我在启用了 OpenTelemetry 跟踪的 .Net 上运行了三个服务。通信从第一个服务开始到第二个服务,通过
HttpClient
。第二个服务处理 http 请求并将工作项添加到其自己的排队后台服务中。此工作项向第三个服务发出 http 请求。
轨迹导出到
Jaeger
.
我在第二个和第三个服务上检查了 traceparent 标头,它们是不同的。
我认为这是因为第二个服务在不同范围的后台发出 http 请求。 (为每个工作项创建的新范围) 我怎样才能连接这样的活动以一次看到整个通信?
我尝试在工作项 lambda 中创建新活动并设置父活动 ID,但没有帮助。
你在哪里设置父活动ID?你用过
Activity.SetParentId
方法吗?根据这份文件:
此方法仅适用于从 活动构造函数。通过调用
创建的活动 或者CreateActivity
已经设置了父 ID,并调用它 方法无效。StartActivity
此方法只能在启动
对象之前使用。 如果在Activity
对象之后调用此方法,则该方法无效 开始了Activity
不确定你的代码是如何构建的,但我参考了这个GitHub Issue中的例子并且它有效,你可以检查它。 这是代码。