链路追踪

在微服务架构中,一次用户请求可能跨越数十个服务,每个服务处理的时间只有几毫秒,但串联起来的总耗时可能达到秒级。当请求变慢或出错时,你无法靠「日志在哪台机器上」的传统方式定位问题——你需要知道「这次请求经历了哪些服务、每个服务耗时多少、哪里出了问题」。

链路追踪(Distributed Tracing)正是来解决这个问题的。它通过为每次请求分配唯一的 TraceID,将请求在所有服务中的处理记录串联起来,形成一条完整的「调用链」。有了链路追踪,你可以清晰地看到请求从网关到数据库的完整路径,以及每个环节的耗时和状态。

核心概念

链路追踪有三个核心概念:

Trace:一次请求的完整生命周期,从入口到响应。一个 Trace 由一个或多个 Span 组成。

Span:一个服务或操作的执行单元。每个 Span 记录:操作名称、开始时间、结束时间、父 Span ID(形成调用树)、标签(Attributes)和事件(Events)。

Context:跨进程传递的上下文,包含 TraceID 和 SpanID。Context 需要通过 HTTP Header、消息队列属性等方式在服务间传播。

链路追踪的价值

链路追踪解决了微服务架构下三个核心问题:

请求路径可视化:清晰展示请求从哪来、经过哪些服务、最终返回哪里。每个 Span 的父子关系构成调用树,直观呈现系统架构。

性能瓶颈定位:当总耗时异常时,通过 Span 列表快速找到耗时最长的环节。P99 延迟告警触发时,可以直接关联到那次慢请求的 Trace 详情。

故障根因追溯:当某个服务出错时,追踪它被哪些上游服务调用、它调用了哪些下游服务,确定是「自己有问题」还是「下游拖累了」。