# SkyWalking 跨进程传播的头部协议
- 1.0 版本
SkyWalking 不仅是一个普通的分布式追踪系统, 更是一个应用性能监控(APM)系统. 因此其头部信息与它们在改进分析性能的收集器中相比要更加复杂. 你可以在其他商业应用性能监控系统中找到许多相似的机制(其中某些甚至比 SkyWalking 更复杂).
# 头部项
- 头部名称:
sw3
- 头部值: 通过
|
分割, 各部分如下:
此头部协议来自 SkyWalking 3, 直到 2017 年, 因此头部名称 sw3
沿用至今.
# 值
- 追踪段 ID
追踪段 ID 是分布式追踪中某一部分的唯一标识. 每一个 ID 只能在一个线程中使用. 此 ID 包含了 3 部分(long 类型数值), 如 "1.2343.234234234
- 第一部分表示应用实例 ID, 由收集器赋值. (基本上就是一个 int 数值, 在 protobuf 中比较有用)
- 第二部分表示线程 ID. (在 Java 中很可能是一个 int 数值, 在 protobuf 中比较有用)
- 第三部分又分为两部分
- 一个时间戳, 单位毫秒
- 一个序列号, 在本线程中, 从 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.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|1.2343.234234234
1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|1038|1.2343.234234234