【发布时间】:2016-01-11 07:20:12
【问题描述】:
我一直在尝试在 NewRelic 中为 MassTransit 设置自定义指标,类似于 NServiceBus 与 NewRelic 的工作方式。使用 NewRelic .Net Custom Transactions 文档,这似乎很容易实现。
到目前为止,我没有在 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>
更新
正如 Chris Patterson 所建议的,我已更新到新包,因此我可以在 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<MassTransit.ReceiveContext>,MassTransit.Pipeline.IConsumePipe" />
</match>
由于类隐式实现了IPipe<ReceiveContext> 接口,我觉得我需要对其进行不同的检测?
【问题讨论】:
-
添加到 google 组也只是为了增加可见性,将使它们都保持更新。谢谢
-
np。请注意,该组的新海报经过审核,因此可能不会立即显示。
-
所以这是在检测代码本身,而不是在 API 级别挂钩?
-
只是检测类似于 Fody 的代码,所以它们只是包装方法调用。
标签: c# .net nservicebus newrelic masstransit