首页/云/可观测性速查/Trace ID 与 Span ID 的格式

Trace ID 与 Span ID 的格式

标识规范固定:trace_id 为 16 字节(32 位十六进制),span_id 为 8 字节(16 位十六进制);全链路靠 trace_id 关联,span_id 定位具体节点。

可观测性速查云更新于 2026-10-13

Trace ID 与 Span ID 是什么

分布式追踪靠两个标识串起全链路:trace_id 标识一次完整请求,长度 16 字节(32 位十六进制);span_id 标识链路中的一个节点操作,长度 8 字节(16 位十六进制)。同一 trace 内 trace_id 保持不变,每跳生成新的 span_id,并记录 parent_span_id 指向父节点,从而还原调用树。

基本信息

trace_id16 字节,32 位十六进制
span_id8 字节,16 位十六进制
父子关系子 span 记录 parent_span_id
生成方式随机生成,不拼接业务信息
常用大小写十六进制小写
相关规范W3C Trace Context、OpenTelemetry

典型使用场景

  • 按 trace_id 拉取一次请求经过的全部服务与耗时
  • 定位某个慢请求具体卡在哪一跳,看 span 的耗时分布
  • 把 trace_id 打进日志,实现日志与链路互相跳转
  • 统计跨服务调用次数,梳理服务依赖关系
  • 在压测或回归时按 trace 对照前后差异
  • 排查异步链路时确认 trace 是否在消息队列处断开

格式示例

格式示例
trace_id   4bf92f3577b34da6a3ce929d0e0e4736   # 32 hex
span_id    00f067aa0ba902b7                   # 16 hex

子 span 记录 parent_span_id 指向父节点;
跨服务传播时 trace_id 保持不变,span_id 每跳新生成。

# 日志里带上标识,才能与链路互跳
{"ts":"...","trace_id":"4bf92f3577b34da6a3ce929d0e0e4736","span_id":"00f067aa0ba902b7"}

两个标识的职责

标识长度作用
trace_id32 位十六进制串联一次请求的全部操作
span_id16 位十六进制标识链路中的单个操作
parent_span_id16 位十六进制指向父节点,还原调用树
是否可变—trace_id 全程不变,span_id 每跳新生成
日志里打印 trace_id 是实现「链路与日志互跳」的前提,格式按十六进制小写对齐,避免大小写差异导致比较失配。
标识必须随机生成:用时间戳或自增数拼接会在高并发下碰撞,也会泄漏业务信息。
全零的 trace_id 常被用于表示「跟踪被丢弃」的采样标记,排查时遇到全零标识应先确认采样策略。
跨系统对接时先核对标识长度与字节序:第三方系统用十进制或变长表示时,需要显式转换而不是直接透传。

易错点

  • 各组件对 ID 大小写的处理不同,统一小写避免字符串比较失配
  • 生成非随机的 trace_id(如时间戳拼接)会碰撞,用规范随机生成器
  • 只在入口打印 trace_id 而后端不打印,链路与日志无法互跳,排查时仍要人工对齐时间
  • 截断或改写标识(只保留前 8 位)会让查询匹配失败,存储与展示都要保留完整值
  • 把全零 trace_id 当成正常值排查会误导方向,它通常代表采样未命中

数据来源与参考

  • W3C Trace Context 规范
  • OpenTelemetry 官方文档 · Trace IDs
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌