Distributed Tracing关键技术-Tracing透传协议介绍
陈陈
下面介绍目前主流的跨进程上下文传递协议
Jaeger透传协议头
- uber-trace-id: 包含traceId、spanId、parentSpanId、sampleFlag,各部分用冒号分割。样例:1e4f4b9e8c5d778a:5e6d52a28c5d0e6d:1:1
- uberctx-�: 用于传递额外的追踪信息或者业务数据,这些数据一般是键值对形势,且键在传递时以uberctx-开头。
Zipkin透传协议头
- X-B3-TraceId: 表示一次完整的追踪ID。
- X-B3-SpanId: 表示当前跨度的ID。
- X-B3-ParentSpanId: 表示父跨度的ID。
- X-B3-Sampled: 表示是否采样这个追踪。
- X-B3-Flags: 用于标记追踪的一些特殊属性。
- baggage-:用于传递额外的追踪信息或者业务数据,这些数据一般是键值对形势,且键在传递时以baggage-开头。
W3C透传协议头
- traceparent:这是必须的头部,包含了追踪ID(Trace ID)、跨度ID(Span ID)、采样决策(Sampling Decision)和追踪选项(Trace Options),格式为traceparent=00-{TRACE_ID}-{SPAN_ID}-{TRACE_FLAGS}。样例:00-0af7651916cd4a8f82b7c8a41ce63eab-3deb0f8c8bf6662c-01
- tracestate:这是一个可选的头部,用于携带自定义的追踪状态信息。它是一个逗号分隔的键值对列表,由服务提供商定义。样例:myfirstsource=1-123456789, mysecondsource=d4cda95b
- baggage�:用于传递额外的追踪信息或者业务数据,分号分隔的键值对列表。样例:key1=value1;key2=value2
协议透传关键点
-
大小写问题:有的网络协议对于大小写是不敏感的,比如http,此时当你使用Zipkin协议时,X-B3-TraceId和x-b3-traceid被认为是相同的, 甚至在一些sdk实现中会将传入的字符串强制转成小写,在做协议解析时需要注意这个问题。
-
字符编码问题:当通过baggage传递一些额外的信息时,这些信息很有可能会出现一些中文字符导致协议解析出错,这种情况一般需要对可能出现问题的内容做MD5编码