2015-10-13 71 views
0

我一直在尝试在NewRelic中为MassTransit设置自定义指标,类似于NServiceBus如何与NewRelic配合使用。看来这很容易使用NewRelic .Net Custom Transactions文档实现。使用MassTransit配置NewRelic(类似于NServiceBus)

到目前为止,从检查出GitHub上的MassTransit代码,我已经设法为MassTransit组合了一个简单的工具文件,但这只包含消息发送,但我真的希望收到消息,但我似乎无法找到第一个拦截与运输实施无关。

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="urn:newrelic-extension"> 
    <instrumentation> 
     <tracerFactory metricName="MassTransit/Send"> 
      <match assemblyName="MassTransit" className="MassTransit.Transports.SendEndpoint"> 
       <exactMethodMatcher methodName="Send" parameters="!!0,System.Threading.CancellationToken" /> 
       <exactMethodMatcher methodName="Send" parameters="!!0,MassTransit.Pipeline.IPipe`1[MassTransit.SendContext`1[!!0]],System.Threading.CancellationToken" /> 
      </match> 
     </tracerFactory> 
    </instrumentation> 
</extension> 

,我试图创造相当于MassTransit一个NServiceBus仪器文件的例子如下:

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="urn:newrelic-extension"> 
    <instrumentation> 
     <tracerFactory> 
      <match assemblyName="NServiceBus.Core" className="NServiceBus.InvokeHandlersBehavior"> 
       <exactMethodMatcher methodName="Invoke" parameters="NServiceBus.Pipeline.Contexts.IncomingContext,System.Action" /> 
      </match> 
     </tracerFactory> 
     <tracerFactory> 
      <match assemblyName="NServiceBus.Core" className="NServiceBus.Unicast.UnicastBus"> 
       <exactMethodMatcher methodName="SendMessage" parameters="NServiceBus.Unicast.SendOptions,NServiceBus.Unicast.Messages.LogicalMessage" /> 
      </match> 
     </tracerFactory> 
    </instrumentation> 
</extension> 

UPDATE

至于建议由克里斯·帕特森我已经更新到新的包,所以有一种方法,我可以在ReceivePipe内挂钩。

我一直在努力,那么仪器这种方法,但没有成功,我可以在它的可能是如何看到过对所有的日志转弯时日志内仪器:

[Trace] 2015-10-19 09:08:45 Possibly instrumenting: (Module: D:\Liberis\Services\Liberis.Salesforce.Service\MassTransit.dll, AppDomain: Liberis.Salesforce.Service.exe)[MassTransit]MassTransit.Pipeline.Pipes.ReceivePipe.MassTransit.Pipeline.IPipe<MassTransit.ReceiveContext>.Send(MassTransit.ReceiveContext) 

我也尝试更新的配置,下面以匹配以上,但仍然没有成功:

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="urn:newrelic-extension"> 
    <instrumentation> 
     <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="MassTransit/Receive"> 
      <match assemblyName="MassTransit" className="MassTransit.Pipeline.Pipes.ReceivePipe.MassTransit.Pipeline.IPipe<MassTransit.ReceiveContext>"> 
       <exactMethodMatcher methodName="Send" parameters="MassTransit.ReceiveContext" /> 
      </match> 
     </tracerFactory> 
    </instrumentation> 
</extension> 

我也尝试使用nrconfig工具,但只有输出为ReceivePipe类以下内容:

<match assemblyName="MassTransit" className="MassTransit.Pipeline.Pipes.ReceivePipe"> 
    <exactMethodMatcher methodName=".ctor" parameters="MassTransit.Pipeline.IPipe`1&lt;MassTransit.ReceiveContext&gt;,MassTransit.Pipeline.IConsumePipe" /> 
    </match> 

我有一种感觉,我需要以不同的方式对它进行测试,因为该类隐式实现IPipe<ReceiveContext>接口?

+0

你可以尝试https://groups.google.com/forum/#!forum/masstransit-discuss – stuartd

+0

添加到谷歌集团也只是增加可见性,将使它们都得到更新。谢谢 –

+0

np。请注意,该小组的新海报已经过审核,因此可能不会立即显示。 – stuartd

回答

0

在@Chris Patterson的帮助下,我设法弄清楚了,比我想象的要多得多。

下面是所需要的配置的xml:

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="urn:newrelic-extension"> 
    <instrumentation> 
     <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="MassTransit/Send"> 
      <match assemblyName="MassTransit" className="MassTransit.Transports.SendEndpoint"> 
       <exactMethodMatcher methodName="Send" parameters="!!0,System.Threading.CancellationToken" /> 
       <exactMethodMatcher methodName="Send" parameters="!!0,MassTransit.Pipeline.IPipe`1[MassTransit.SendContext`1[!!0]],System.Threading.CancellationToken" /> 
      </match> 
     </tracerFactory> 
     <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="MassTransit/Receive"> 
      <match assemblyName="MassTransit" className="MassTransit.Pipeline.Pipes.ReceivePipe"> 
       <exactMethodMatcher methodName="MassTransit.Pipeline.IPipe&lt;MassTransit.ReceiveContext&gt;.Send" parameters="MassTransit.ReceiveContext" /> 
      </match> 
     </tracerFactory> 
    </instrumentation> 
</extension> 

好像方法签名完全改变由于隐式地实现IPipe接口。

我还添加了这一个GitHub的仓库 - https://github.com/LiberisLabs/NewRelic.Agent.CustomTransactions

1

您应该能够以类似的方式挂接ReceivePipe.Send方法。

https://github.com/MassTransit/MassTransit/blob/master/src/MassTransit/Pipeline/Pipes/ReceivePipe.cs#L30

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="urn:newrelic-extension"> 
    <instrumentation> 
     <tracerFactory metricName="MassTransit/Receive"> 
      <match assemblyName="MassTransit" className="MassTransit.Pipeline.Pipe.ReceivePipe"> 
       <exactMethodMatcher methodName="Send" parameters="ReceiveContext" /> 
      </match> 
     </tracerFactory> 
    </instrumentation> 
</extension> 

至少,这是我对XML语法的猜测,但该方法是合理的。

+0

这个在3.0.14中看起来很新,我不得不更新软件包并给出一个。 –

+0

刚刚更新了软件包,但仍然无法从中获取任何输出。有关更多详细信息,请参阅上述问题 –

相关问题