仅靠单点日志难以还原复杂问题。统一的请求追踪体系让每个请求的生命周期可视化。
1. 核心目标
- 追踪单个请求跨模块、跨服务的完整路径。
- 快速定位慢接口与异常节点。
- 实现日志、指标、链路的统一关联。
2. 设计关键点
-
全链路 Trace ID
- 在请求进入系统入口(网关)生成全局唯一 Trace ID。
- 下游服务通过 HTTP Header 传递(如
X-Trace-Id)。 - 所有日志打印统一字段。
-
日志结构化
- JSON 格式输出,字段包含:
traceId、spanId、service、duration、status。 - 避免纯文本难以分析。
- JSON 格式输出,字段包含:
-
调用链追踪模型
- 一次请求包含多个 Span,每个 Span 记录耗时与调用关系。
- 聚合后生成完整调用树。
-
采样与性能
- 采样率控制在 1%~10%。
- 异步上报日志,减少阻塞。
5. 工具与框架
- Spring Cloud Sleuth + Zipkin
- SkyWalking
- OpenTelemetry + Jaeger
这些方案均可快速构建追踪体系。
6. 实践经验
- 入口层统一注入 Trace ID,防止断链。
- 将 Trace ID 与错误日志关联,直接跳转到具体请求详情。
- 结合指标监控生成性能热点分析图。
结论:追踪体系让系统具备“观察自身”的能力。没有 Trace ID 的日志,都是孤岛。