# SkyWalking 跨进程传播的头部协议

  • 版本 3.0

SkyWalking 更像是一个 APM 系统, 而不是通用的分布式跟踪系统. 为了提高OAP的分析性能,头文件要比它们复杂得多. 您可以在其他商业APM系统中找到许多类似的机制。(有些甚至比我们的更复杂)

# 摘要

SkyWalking 跨进程传播的头部协议版本 3.0 也被命名为sw8协议,用于上下文传播.

# 标准头部项

标准标头应该是上下文传播的最低要求.

  • 头部名称: sw8.
  • 头部值: 8 个字段,由-分割. 头部值的最大长度(默认)应该小于 2k.

值格式示例, XXXXX-XXXXX-XXXX-XXXX

#

头部值包含以下段, 所有字符串类型的值都是 BASE64 编码的.

  • 必须项(s)
  1. 采样(Sample). 0 或 1. 0 表示上下文存在, 但是可以(也很可能)忽略. 1 表示此追踪需要采样并发送到后端.
  2. 追踪标识(Trace Id). 字符串(BASE64 编码). 由 . 分割的三个 long 类型值, 表示此追踪的唯一标识.
  3. 父追踪段 ID(Parent trace segment Id). 字符串(BASE64 编码). 字符串且全局唯一.
  4. 父 Span 标识. 整数. 从 0 开始. 此 Span ID 指向了父追踪段中的 Span.
  5. 父服务. 字符串(BASE64 编码). 长度不应小于或等于50个UTF-8编码的字符.
  6. 父服务实例标识. 字符串(BASE64 编码). 长度不应小于或等于50个UTF-8编码的字符.
  7. 父服务的端点. 字符串(BASE64 编码). 父追踪段中第一个入口span的操作名. 长度不应小于或等于50个UTF-8编码的字符.
  8. 本请求的目标地址. 字符串(BASE64 编码). 客户端用于访问目标服务的网络地址(不一定是 IP + 端口).
  • 示例, 1-TRACEID-SEGMENTID-3-PARENT_SERVICE-PARENT_INSTANCE-PARENT_ENDPOINT-IPPORT

# 扩展头部项

扩展头部项是为高级特性设计的. 它提供了部署在上游和下游服务中的代理之间的交互功能。

  • 头部名称: sw8-x
  • 头部值: 由-分割. 字段可扩展.

#

当前值包括的字段.

  1. 追踪模式. 空,0或1。默认为空或0。表示在这个上下文中生成的所有span应该跳过分析,spanObject#skipAnalysis=true。这个上下文应该在默认情况下传播到上游,除非它在跟踪过程中被更改.