-->

使用在NewRelic的.NET自定义仪器的泛型类(Custom instrumentation f

2019-10-20 20:02发布

有没有什么办法来仪泛型类在.NET中使用新的舍利定制instrumenation? 我添加了仪表的配置就像我对于非泛型类,但没有运气做。

Answer 1:

您将需要使用IL签名。 确定签名的最好办法是在newrelic.config New Relic的日志转起来“所有”,运行你的应用程序,然后搜索相应的日志分析器的方法名称(请务必设置日志回信息完成后) 。

使用签名可以构建自定义仪器和自定义事务 。

使用示例代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var t = new Test<int>();
            while (true)
            {
                StartTransaction();
                t.mymethod(100);
            }
        }
        static void StartTransaction()
        {
            Console.WriteLine("Start Transaction");
            System.Threading.Thread.Sleep(1100);
            MethodA();
        }
        static void MethodA()
        {
            Console.WriteLine("MethodA");
        }
    }
    class Test<T>
    {
        public void mymethod(T t) {
            var k = t;
            System.Threading.Thread.Sleep(1000);
        }
    }
}

。展望剖析日志,NewRelic.Profiler [PID],其中[PID]对应于w3wp进程或其他进程中运行你的应用程序,你会看到以下内容:

[Trace]Possibly instrumenting: (Module: C:\Users\me\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe, AppDomain: ConsoleApplication1.exe)[ConsoleApplication1]ConsoleApplication1.Test`1.mymethod

不带扩展名ConsoleApplication1和类/方法名ConsoleApplication1.Test`1.mymethod的AppDomain中都需要建立自定义的仪器/交易。

实施例(定制事务):

<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
    <instrumentation>
      <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="Background/MyTaskRunner">
        <match assemblyName="ConsoleApplication1" className="ConsoleApplication.Test`1">
          <exactMethodMatcher methodName="mymethod" />
        </match>
      </tracerFactory>
    </instrumentation>
</extension>

一般来说,你并不需要在仪器仪表文件中指定方法参数。



文章来源: Custom instrumentation for generic classes in .Net using NewRelic
标签: .net newrelic