使用NewRelic在.Net中为泛型类定制检测

plm*_*heu 1 .net newrelic

有没有办法在.Net中使用新的遗物自定义仪器来检测泛型类?我为非泛型类添加了仪器配置,但没有运气.

小智 5

您需要使用IL签名.确定签名的最佳方法是在Newrelic.config中将New Relic日志记录设置为"all",运行您的应用程序,然后在相应的profiler日志中搜索方法名称(确保在完成后将日志记录设置回信息) .

使用签名,您可以构建自定义检测自定义事务.

使用示例代码:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查看分析器日志,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
Run Code Online (Sandbox Code Playgroud)

构建自定义检测/事务需要不带扩展ConsoleApplication1的AppDomain 和类/方法名称ConsoleApplication1.Test`1.mymethod.

示例(自定义事务):

<?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>
Run Code Online (Sandbox Code Playgroud)

通常,您不需要在检测文件中指定方法参数.