如何在 .net core 3.1 应用程序中访问 W3C TraceContext 标头?

Tob*_*gel 3 c# w3c trace .net-core

这些来源(微软文档微软开发博客)指出,为了在 .net 3.0+ 核心应用程序中使用新的W3C 跟踪上下文标头,不需要额外的配置。但是,我们没有从通过 ServiceClient 发出的任何请求中接收到 Traceparent 或 Tracestate。

正确的设置过程是什么?你们是如何访问分布式跟踪 ID 的?如果可能的话,我们更愿意自动公开这些值,而不向所有现有服务添加大量代码。

预先非常感谢您!

PS:这是我的第一个问题;如果您需要更多信息,请告诉我

Lui*_*lis 5

.net 5中的IdSystem.Diagnostics.Activity已经被配置为w3c标准。这意味着所有内容都Actions可以通过traceparentid 格式进行识别,并且traceparenttracestate将发送到http请求标头中的下游依赖项。正如您所说,不需要额外的配置,但在 .net 3 中不同,默认的 id 格式是 id 格式,Hierarchical并且它作为 .net 向下游传播HeaderRequestId。要查看 Activity Id 格式,请将 导入System.Diagnostics到您的类中并输入:Console.WriteLine(Activity.Current.Id),您将看到如下格式:|fab6082c-46326cca135ffe48.1.。要将其更改为 .net 3 中的 w3c 格式,需要在 main 方法中强制使用它:

public static void Main(string[] args)
{
    Activity.DefaultIdFormat = ActivityIdFormat.W3C;
    Activity.ForceDefaultIdFormat = true;

    CreateHostBuilder(args).Build().Run();
}
Run Code Online (Sandbox Code Playgroud)

然后,您将看到 w3c 的格式以及已传播到标头中的下游依赖项的traceparent和字段。tracestate

如果您想发送消息抛出代理,请使用AMQP 调用情况application-properties部分。您可以在此处此处找到这两种情况的一些示例。