日志与链路追踪(Tracing)是可观测性的核心组成部分:日志记录离散事件,链路追踪记录请求在服务间的调用关系与耗时。二者结合可快速定位故障与性能瓶颈。本文介绍结构化日志、日志级别与采样、OpenTelemetry 与链路追踪接入,以及日志与 Trace 的关联方式。
一、日志与链路追踪为何重要
根据 CNCF 与各云厂商实践,结构化日志与分布式追踪可显著缩短 MTTR(平均恢复时间)。日志提供事件详情,Trace 提供请求全路径视图。
二、结构化日志
结构化日志使用机器可解析格式(如 JSON),包含固定字段:timestamp、level、message,以及业务与上下文字段(如 trace_id、span_id、user_id)。便于检索、聚合与告警。常见库:Python 的 structlog、Node 的 winston、Go 的 zap。
| 字段 | 说明 |
|---|---|
| timestamp | 时间戳 ISO8601 |
| level | DEBUG/INFO/WARN/ERROR |
| message | 日志内容 |
| trace_id | 请求链路 ID |
| span_id | 当前 span ID,用于关联父子 Span |
数据来源:OpenTelemetry、Jaeger、各云厂商可观测文档(综合整理)。
三、链路追踪
链路追踪(Tracing)记录一次请求经过的多个服务与耗时。Trace 由多个 Span 组成,Span 代表一个操作(如一次 RPC、一次 DB 查询),通过 trace_id 关联同一次请求,通过 parent_span_id 形成树状结构。OpenTelemetry 是业界统一的采集与导出标准,可导出到 Jaeger、Zipkin、云厂商后端等。高流量场景下可通过采样(如 1% 或尾采样)控制成本。
四、日志与 Trace 关联
在日志中写入 trace_id、span_id,可在排查时从日志反查 Trace,或从 Trace 跳转到对应日志。部分后端(如 Jaeger、Loki+Tempo)支持关联查询。
五、落地要素权重
基于可观测项目经验,以下要素的影响程度(相对权重,满分 100):
说明:权重基于日志与追踪项目实践归纳,仅供参考。
六、小结
结构化日志与链路追踪可显著提升排障效率。接入 OpenTelemetry 可统一采集与导出。若需前端监控,可参考《前端性能监控与可观测性》;若需 CI/CD 集成,可阅读《CI/CD 与持续交付实践》。