日志、指标、Trace 与关联 ID
日志记录离散事件,指标聚合系统行为,Trace 展示一次请求跨组件的执行路径。三类信号回答不同问题,通过统一时间、服务版本和 trace context 关联后,才能从异常趋势下钻到具体调用。
1. 指标适合发现范围和趋势
Counter、gauge 和 histogram 能以较低成本持续聚合请求量、错误率、延迟分布和资源饱和度。告警优先基于用户可感知的 SLI,例如成功率和 P99,而不是只看单机 CPU。
标签允许按 route、region、status 和 version 切分,但 user ID、order ID 等无界值会造成高基数,增加存储和查询成本。高基数上下文放进日志或 Trace。
平均延迟会掩盖长尾。使用 histogram 保留分布,并明确 bucket 和聚合方式;客户端与服务端可以观察到不同耗时。
2. 结构化日志保存事件细节
日志以稳定字段输出时间、级别、服务、版本、事件名、trace ID、错误类型和必要业务键,不依赖后续正则从自然语言解析。
一条错误只在拥有处理责任的边界记录完整堆栈,逐层重复打印会放大日志并混淆错误数量。token、密码、银行卡和完整请求体默认不记录,调试开关也有时限与审计。
日志级别表达操作意义:预期业务拒绝通常不是 ERROR,已自动重试的瞬时错误可以统计但不必每次打印大堆栈。
3. Trace 连接一次请求的因果路径
入口创建 trace,服务内每个有意义的操作形成 span,记录父子关系、开始结束时间、状态和受控属性。跨 HTTP、RPC 和消息边界传播标准 trace context。
Trace 可以看到时间花在网关排队、服务方法、数据库还是下游 RPC,也能发现串行调用和意外重试。它不会自动解释主机整体饱和,仍需与指标结合。
异步消息的生产与消费可能不是严格父子时长关系,可以使用 link 关联事件来源,避免一个长时间未结束的虚假 span。
4. 关联 ID 补充业务查询入口
Trace ID 标识一次技术调用,订单 ID、支付 ID 或任务 ID 标识跨多次请求的业务流程。客服可能先拿到订单号,再查询相关事件和 traces。
外部客户端提供的 request ID 需要格式和长度限制,内部可以另生成可信 ID 并保留映射。不要直接把高敏感业务 ID 暴露到所有指标标签。
5. 采样在成本与证据之间取舍
Head sampling 在请求开始时决定是否记录,成本可控但可能错过后来失败的请求。Tail sampling 在看到完整结果后保留错误、慢请求或特定高价值流量,需要集中缓冲和更多资源。
无论采样策略如何,核心请求量、错误和延迟指标都应完整聚合。安全审计也不能依靠可能被采样掉的应用 Trace。
采样率和规则作为版本化配置,故障时可在范围和时间受控的情况下提高,而不是全局永久打开 100%。
6. 上下文传播要限制 baggage
Trace context 通常只包含小型标识。baggage 可以携带租户或实验等属性并沿链路传播,但会进入每次下游请求,增加网络与隐私风险。
只传播真正需要的低敏感、有限长度字段。身份和授权凭据使用专门安全机制,不能把 baggage 当可信权限来源。
线程池、异步 Future 和消息处理器需要显式传播并在任务结束后清理上下文,避免串到下一次任务。
7. 从告警逐步下钻
典型路径是:
- 指标确认异常开始时间、影响 route、region 和版本。
- 选择异常窗口中的慢或错 Trace,找到最长和失败 span。
- 用 trace ID 查看相关结构化日志与异常详情。
- 回到该服务的资源、JVM、数据库和依赖指标验证假设。
- 修复后用同一 SLI 和对照版本确认恢复。
直接搜索所有日志通常噪声很大;只看一条 Trace 又可能把个例当成整体。
8. 遥测管道也需要可靠性边界
应用不应因为日志或 Trace 后端变慢而阻塞核心请求。使用有界缓冲、批量导出和丢弃策略,并监控 dropped spans、日志队列和 exporter 错误。
遥测数据有保留期限、访问权限和成本预算。高价值错误可以更久保留,普通成功 Trace 低比例采样;策略变化不能破坏审计合规。
9. 常见问题
9.1 有 Trace 后还需要日志吗
需要。Trace 展示调用关系和耗时,日志适合保存特定事件细节、状态转换和堆栈。也不应把所有日志全文塞进 span event,避免重复成本和敏感数据扩散。
9.2 Correlation ID 和 Trace ID 可以相同吗
单次同步请求中可以复用,但业务流程可能跨多个请求和消息。通常保留标准 Trace ID,再用稳定业务 ID 关联更长生命周期,职责更清晰。
10. 面试题
10.1 日志、指标和 Trace 各自能证明什么,如何关联排障
出现公司:月之暗面
考察重点
- 聚合趋势、事件详情和单请求因果链。
- trace context、业务关联 ID 和异步传播。
- 高基数、采样、隐私与遥测背压。
相关内容:第 1 节“指标适合发现范围和趋势”至第 8 节“遥测管道也需要可靠性边界”。
参考回答
指标用聚合数据发现错误率、P99 和饱和度在哪个时间、版本和区域异常;Trace 展示一条请求跨网关、服务、数据库和消息的 span 因果与耗时;结构化日志保存具体状态转换、错误类别和堆栈。排障先从 SLI 缩小范围,再选异常 Trace 找慢 span,用 trace ID 查日志,最后回到该组件资源指标验证。
Trace ID 连接一次技术调用,订单或任务 ID 连接跨请求业务流程。高基数业务 ID 不放指标标签,敏感数据不进日志和 baggage。Trace 按 head 或 tail 采样控制成本,核心指标和安全审计不能依赖采样;导出端使用有界缓冲,避免遥测后端故障阻塞业务。