2015-10-13 72 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

剛剛更新了軟件包,但仍然無法從中獲取任何輸出。有關更多詳細信息,請參閱上述問題 –

相關問題