Loading...
墨滴

lel

2021/04/15  阅读:79  主题:全栈蓝

TraceId 和 SpanId 生成规则

traceid 和 spanid 的使用示意图

意义

traceid

为什么需要traceid,为了查看完整的调用链,一旦调用过程中出现问题,可以第一时间定位到问题现场

整个调用链是一棵树形结构,traceid的传递涉及到主干与支干,进程内与进程外

spanid

spanid 代表本次调用在整个调用链路树中的位置

哪个环节生成

traceid 生成规则

产生规则是: 服务器 IP + UserID + 当前时间戳

比如:

0ad1348fC4836DA8B4214717B5C773E99802F8A91618385153
  1. 前 8 位 0ad1348f 即产生 traceid 的机器的 IP,这是一个十六进制的数字,每两位代表 IP 中的一段,我们把这个数字,按每两位转成 10 进制即可得到常见的 IP 地址表示方式 10.209.52.143
  2. C4836DA8B4214717B5C773E99802F8A9 为用户的GUID(UUID)去掉中横杠(-)
  3. 1618385153 为时间戳

spanid 生成规则

假设一个业务系统A接收了一次请求(请求自带请求头spanid=0)

那么在业务系统A的日志中,记录下的 spanid 是 0,如果需要通过 依次调用 B、C、D 三个系统,那么在 B、C、D 三个系统的服务端日志中,spanid 分别是 0.1,0.2 和 0.3;如果 C 系统在处理请求的时候又调用了 E,F 两个系统,那么 C 系统中对应的客户端日志是 0.2.1 和 0.2.2,E、F 两个系统对应的服务端日志也是 0.2.1 和 0.2.2。

根据上面的描述可以知道,如果把一次调用中所有的 spanId 收集起来,可以组成一棵完整的链路树。

参考资料: 监控之traceidTraceId 和 SpanId 生成规则

lel

2021/04/15  阅读:79  主题:全栈蓝

作者介绍

lel