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

  • 版本 2.0

# 摘要

SkyWalking 跨进程传播的头部协议版本 2.0 也叫做 sw6 协议. 第二版的协议与第一版协议(亦即 sw3)有相同的目的, 就是确保上下文得以正常传播.

# 与版本 v1 的差异

两个版本的差异主要来自 SkyWalking 的演进, 包括

  1. 服务网格和语言并不总是一样, 头部中的某些信息应该是可选的
  2. 需要 BASE64 编码
  3. 包括了采样标记

# 头部项

  • 头部名称: sw6
  • 头部值: 由 - 分割, 各部分如下. 头部值的最大长度(默认)应该小于 2k.

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

#

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

  • 必须项
  1. 采样(Sample). 0 或 1. 0 表示上下文存在, 但是可以(也很可能)忽略. 1 表示此追踪需要采样并发送到后端.
  2. 追踪标识(Trace Id). 字符串(BASE64 编码). 由 . 分割的三个 long 类型值, 表示此追踪的唯一标识.
  3. 父追踪段 ID(Parent trace segment Id). 字符串(BASE64 编码). 由 . 分割的三个 long 类型值, 表示父服务中的追踪段的唯一标识.
  4. 父 Span 标识(Parent span Id). 整数. 从 0 开始. 此 Span ID 指向了父追踪段中的 Span.
  5. 父服务实例标识(Parent service instance Id). 整数. 父服务的实例 ID.
  6. 入口服务实例标识(Entrance service instance Id). 整数. 入口服务的实例 ID.
  7. 本请求的目标地址(Target address of this request). 字符串(BASE64 编码). 客户端用于访问目标服务的网络地址(不一定是 IP + 端口). 该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.
  • 可选项

当代理/SDK 没有这些信息时, 或者头部大于阈值(默认 2k)时, 可选项可以不存在头部值中

  1. 追踪的入口端点. 字符串(BASE64 编码). 该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.
  2. 父服务的端点. 字符串(BASE64 编码). 该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.

# 示例

  1. 简单版本, 1-TRACEID-SEGMENTID-3-5-2-IPPORT
  2. 完整版本 1-TRACEID-SEGMENTID-3-5-2-IPPORT-ENTRYURI-PARENTURI