在MassTransit发布者/消费者上传播W3C跟踪上下文

时间:2020-05-18 09:26:14

标签: c# masstransit opentracing distributed-tracing

试图支持在MassTransit中通过http调用->发布者->消费者-> http调用传播W3C跟踪上下文traceId和spanId属性(只是现在它们显示在日志/ seq中,但我们使用Dynatrace),但是我在这里找不到开箱即用的东西吗: https://masstransit-project.com/advanced/monitoring/diagnostic-source.html

如果没有可用的内容,我可能会根据这些文章尝试自己创建一些东西:

我可以找到这个作为OpenTracing的示例: https://github.com/yesmarket/MassTransit.OpenTracing

这是NServiceBus的参考: https://jimmybogard.com/building-end-to-end-diagnostics-and-tracing-a-primer-trace-context/

除非有人能提出已经存在的建议?

3 个答案:

答案 0 :(得分:1)

Dynatracing声称可以与OpenTracing https://www.dynatrace.com/integrations/opentracing/无缝集成,并且如果您使用您提到的库,并且您的HTTP部分已安装OpenTracing,那么它将立即可用。

在托管服务中获得HTTP调用并在处理上下文中通过MassTransit发送或发布消息的唯一潜在缺点是,所有内容都必须使用OpenTracing进行检测,因为它将使用OpenTracing API启动子范围

我们使用Datadog进行此操作,因此我们使用Datadog OpenTracing集成库,并使用OpenTracing Contrib库跟踪WebApi和HttpClient。因此,自动检测对我们不起作用。但是,使用这些库来检测您的应用程序而不是使用自动检测并不难。

通常的流程是:

  • 外部-> WebApi:开始跨度
  • WebApi-> MassTransit:开始子跨度,将上下文注入标头
  • MassTransit->使用者:提取上下文,开始子跨度 等等

具有注入和提取功能的两个位都在MassTransit.OpenTracing库中处理,因此,没有其他事情要做。

有了您的提供商必须支持OpenTracing的库,通常是这样的:

  • 配置提供程序的跟踪器
  • 使用提供商提供的集成库将OpenTracing全局跟踪程序设置为包装器
  • 使用OpenTracing创建跨度时,它将创建特定于供应商的跨度并将其包装在OpenTracing跨度中

答案 1 :(得分:1)

我是您引用的MassTransit.OpenTracing库的作者,但我在W3​​C建议之前就写了它,该建议似乎是最新的(2020年2月6日)。

我的目标是我希望通过具有同步/ HTTP和异步消息代理通信的微服务体系结构进行分布式跟踪。对于HTTP,我使用的是OpenTracing.Contrib.NetCore,它“使用.NET的DiagnosticSource来检测其代码”。对于异步消息代理通信,我将RabbitMQ与MassTransit结合使用,但我并不真正理解MassTransit DiagnosticSource方法suggested on the website(并且也找不到任何示例),因此我决定深入研究。一点点地滚动我自己的。

长话短说,使用Jaeger作为示踪剂,一切都按预期进行。有趣的是,我们(在我工作的公司中)决定也使用DynaTrace,该DynaTrace的工作水平低得多,从而消除了在代码中处理大量此类内容的需要。也就是说,这种方法不是无效的(IMO),因为并非每个人都能负担得起DynaTrace(或类似的APM工具)。

在接下来的一周或2中,我将尝试根据W3C的建议对该库进行升级。如果您想帮助您进行贡献/审查(或者您想从另一个方向发展并自己滚动),请告诉我。也可以)...

答案 2 :(得分:1)

基于Ryan Bartsch的库和Jimmy Bogard的文章,我创建了此程序包,它可以完成我需要做的事情: https://github.com/zidad/MassTransit.ActivityTracing