Dapr 采用 Open Telemetry 协议,该协议利用 W3C 跟踪上下文 来实现服务调用和发布/订阅消息的分布式跟踪。Dapr 生成并传播跟踪上下文信息,可以将其发送到可观测性工具进行可视化和查询。
分布式跟踪是一种由跟踪工具实现的方法,用于跟踪、分析和调试跨多个软件组件的事务。
通常,分布式跟踪会跨越多个服务,因此需要一个唯一的标识符来标识每个事务。跟踪上下文传播就是传递这种唯一标识符的过程。
过去,不同的跟踪供应商各自实现自己的跟踪上下文传播方式。在多供应商环境中,这会导致互操作性的问题,例如:
以前,大多数应用程序由单一的跟踪供应商监控,并保持在单一平台提供商的边界内,因此这些问题没有显著影响。
如今,越来越多的应用程序是分布式的,并利用多个中间件服务和云平台。这种现代应用程序的转变需要一个分布式跟踪上下文传播标准。
W3C 跟踪上下文规范 定义了一种通用格式,用于交换跟踪上下文数据(称为跟踪上下文)。通过提供以下内容,跟踪上下文解决了上述问题:
这种统一的跟踪数据传播方法提高了对分布式应用程序行为的可见性,促进了问题和性能分析。
Dapr 使用标准的 W3C 跟踪上下文头。
traceparent
头。grpc-trace-bin
头。当请求到达时没有跟踪 ID,Dapr 会创建一个新的。否则,它会沿调用链传递跟踪 ID。
这些是 Dapr 为 HTTP 和 gRPC 生成和传播的特定跟踪上下文头。
在从 HTTP 响应传播跟踪上下文头到 HTTP 请求时复制这些头:
Traceparent 头
Traceparent 头以所有供应商都能理解的通用格式表示跟踪系统中的传入请求:
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
Tracestate 头
Tracestate 头以可能是供应商特定的格式包含父级:
tracestate: congo=t61rcWkgMzE
在 gRPC API 调用中,跟踪上下文通过 grpc-trace-bin
头传递。