SkyWalking 跨进程传播协议的头部信息被称为 sw8
协议,版本 3.0。sw8
协议的头部(header)包含了用于上下文传播的关键信息,其名称为 sw8
,头值由 -
分隔的 8 个字段组成,且头值的长度应小于 2KB。
这 8 个字段的具体含义如下:
- 采样(sample):取值为 0 或 1,0 表示上下文存在,但可能被忽略;1 表示这个追踪需要采样并发送到后端。
- 追踪 ID(traceid):是经过 base64 编码的字符串,其内容是由
.
分割的三个long
类型值,表示此追踪的唯一标识。 - 父追踪片段 ID(parenttracesegmentid):同样是 base64 编码的字符串,代表全局唯一的字符串。
- 父跨度 ID(parentspanid):是一个从 0 开始的整数,这个跨度 ID 指向父追踪片段中的父跨度。
- 父服务名称(parentservice):为 base64 编码的字符串,是一个长度小于或等于 50 个 UTF-8 编码的字符串。
- 父服务实例标识(parentserviceinstance):也是 base64 编码的字符串,内容是长度小于或等于 50 个 UTF-8 编码的字符串。
- 父服务的端点(parentendpoint):通过 base64 编码的字符串,表示父追踪片段中第一个入口跨度的操作名,由长度小于或等于 50 个 UTF-8 编码的字符组成。
- 本请求的目标地址(peer):采用 base64 编码的字符串,其内容是客户端用于访问目标服务的网络地址(不一定是 IP + 端口)。
例如,有两个服务 onemore-a
和 onemore-b
,用户通过 HTTP 调用 onemore-a
的 /onemore-a/get
,然后 onemore-a
的 /onemore-a/get
又通过 HTTP 调用 onemore-b
的 /onemore-b/get
,那么在 onemore-b
的 /onemore-b/get
的请求头中,sw8
键对应的值可能如下:1-ytrlyzzmyzhjy2fingjingi2odiwnjq2othjyzk3ztyunzqumtyymtgzodexmdq1ntawmdk=-ytrlyzzmyzhjy2fingjingi2odiwnjq2othjyzk3ztyunzqumtyymtgzodexmdq1ntawmdg=-2-b25lbw9yzs1h-ztfkmmziyjyzymjhndmwndk5ywy4otvjmdqwztmyzmvamtkylje2oc4xljewmq==-l29uzw1vcmutys9nzxq=-mtkylje2oc4xljewmjo4ma==
。
以 -
字符进行分割,可以得到以下内容:
1
:采样,表示这个追踪需要采样并发送到后端。ytrlyzzmyzhjy2fingjingi2odiwnjq2othjyzk3ztyunzqumtyymtgzodexmdq1ntawmdk=
:追踪 ID,解码后为a4ec6fc8ccab4bb4b682064698cc97e6.74.16218381104550009
。ytrlyzzmyzhjy2fingjingi2odiwnjq2othjyzk3ztyunzqumtyymtgzodexmdq1ntawmdg=
:父追踪片段 ID,解码后也为a4ec6fc8ccab4bb4b682064698cc97e6.74.16218381104550009
。2
:父跨度 ID。b25lbw9yzs1h
:父服务名称,解码后为onemore-a
。ztfkmmziyjyzymjhndmwndk5ywy4otvjmdqwztmyzmvamtkylje2oc4xljewmq==
:父服务实例标识,解码后为e1d2fbb63bba430499af895c040e32fe@192.168.1.101
。l29uzw1vcmutys9nzxq=
:父服务的端点,解码后为/onemore-a/get
。mtkylje2oc4xljewmjo4ma==
:本请求的目标地址,解码后为192.168.1.102:80
。
此外,还有扩展头部(extension header)项,其名称为 sw8-x
,头值由 -
分割,字段可扩展。当前扩展头部值包括的字段为追踪模式(tracingmode),取值为空、0 或 1,默认为空或 0,表示在这个上下文中生成的所有跨度应该跳过分析,默认情况下会在上下文中传播到服务端,除非在跟踪过程中被更改。其主要是为高级特性设计的,用于提供部署在上游和下游服务中的探针之间的交互功能。