知识卡片

分布式追踪的trace与span

专业/工作 · 527.c

内容

一次用户请求在分布式系统里往往会流经好几个服务,日志、健康检查、指标这几类遥测数据各自只能反映单个应用内部发生了什么,没法把”跨服务的同一次请求”串起来看。最朴素的解法是在系统入口生成一个关联 ID,塞进日志里、并透传给下游服务,靠这个 ID 把散落在各个应用里的日志捞出来拼成一条完整链路——分布式追踪就是把这个朴素思路正规化:一次请求对应一个用唯一 trace ID 标识的 trace,trace 由跨越一个或多个服务的若干 span 组成,每个 span 代表处理过程里的一个具体步骤,有自己的开始结束时间戳,用 trace ID 加 span ID 唯一定位;span 上还能挂标签(tag)记录请求 URI、当前用户这类补充上下文。发散:分布式追踪本质上是把”跨服务关联日志”这件事从”手动约定一个 ID 字段、靠人肉在日志里搜”升级成了”有标准数据模型、有专门存储和查询工具支撑”的一等公民能力——朴素思路能解决同样的问题,只是缺了结构化和工具链,扩展到几十上百个服务时会迅速失控。

参考来源

《Cloud Native Spring in Action》第13章《Observability and monitoring》