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

  • 1.0 版本

SkyWalking 不仅是一个普通的分布式追踪系统, 更是一个应用性能监控(APM)系统. 因此其头部信息与它们在改进分析性能的收集器中相比要更加复杂. 你可以在其他商业应用性能监控系统中找到许多相似的机制(其中某些甚至比 SkyWalking 更复杂).

# 头部项

  • 头部名称: sw3
  • 头部值: 通过 | 分割, 各部分如下:

此头部协议来自 SkyWalking 3, 直到 2017 年, 因此头部名称 sw3 沿用至今.

#

  • 追踪段 ID

追踪段 ID 是分布式追踪中某一部分的唯一标识. 每一个 ID 只能在一个线程中使用. 此 ID 包含了 3 部分(long 类型数值), 如 "1.2343.234234234

  1. 第一部分表示应用实例 ID, 由收集器赋值. (基本上就是一个 int 数值, 在 protobuf 中比较有用)
  2. 第二部分表示线程 ID. (在 Java 中很可能是一个 int 数值, 在 protobuf 中比较有用)
  3. 第三部分又分为两部分
    1. 一个时间戳, 单位毫秒
    2. 一个序列号, 在本线程中, 从 0 (包含 0) 到 9999 (包含 9999)

如果你在使用其他编程语言, 你可以自己生成你的 ID, 但是确保它是唯一的, 且包含以上三部分内容.

  • Span ID

一个整数, 在一个追踪段中唯一, 从 0 开始;

  • 父应用实例

父节点的实例 ID, 如: 对于一个 RPC 服务来说, ID 是来自客户端应用实例的 ID.

  • 入口应用实例

入口应用的实例 ID. 如: 一个分布式追踪 A->B->C, 此 ID 为 A 的 ID.

  • 对等主机

对等主机/对等 ID 来自客户端. 如: 客户端使用 182.14.39.1:9080 来访问服务器, 此 ip:port 就是对等主机.

该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.

  • 第一个追踪段的入口 Span 操作名称

入口应用实例 传播过来的入口 Span 的操作名称/id

该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.

  • 父追踪段的入口 Span 操作名称

父应用实例 传播过来的入口 Span 的操作名称/id

该值可以使用压缩收集器服务来获得一个 id(整数) 来代表这个字符串, 如果你使用字符串, 则字符串必须以 # 开始, 否则直接使用整数 ID.

  • 分布式追踪 ID

整个链路追踪中的分布式追踪 ID, 如果在一个批处理进程中, 则它来自第一个批处理生产者的追踪. 组成部分与 追踪段 ID 一样, 包含三个部分.

# 示例值

  1. 1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|1.2343.234234234
  2. 1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|1038|1.2343.234234234