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

时间:2014-08-28 17:37:09

标签: .net newrelic

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

1 个答案:

答案 0 :(得分:5)

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

使用签名,您可以构建Custom InstrumentationCustom Transactions

使用示例代码:

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>

通常,您无需在检测文件中指定方法参数。