云上可观测性体系:指标、日志与链路追踪的协同设计

云上可观测性体系:指标、日志与链路追踪的协同设计

很多团队的可观测性建设是“出了问题才补”的:先上了监控告警,性能问题出现了加链路追踪,合规要求来了再补日志。结果是三套系统各管一段,排障时仍需人工把三份数据对起来。可观测性的难点不在采集,而在三者在同一套标签体系下能被关联

指标、日志与链路追踪三支柱插画
三类信号缺一不可:指标发现异常,链路定位范围,日志解释原因

一、三类信号各自解决什么问题

信号 回答的问题 成本特征
指标 Metrics 系统现在正常吗?趋势如何? 存储便宜、采集开销低,适合长期保留
日志 Logs 那一刻到底发生了什么? 体量大、存储贵,需分级与采样
链路 Traces 慢在哪一段?调用了哪些下游? 采集有开销、需要采样策略

典型的排障路径应该是:告警由指标触发 → 用链路追踪把问题收敛到某个服务与某个接口 → 在日志里定位到具体异常。如果这三步之间需要人工拼时间戳,说明体系还没有真正建成。

二、统一标签体系是地基

关联的前提是三个系统使用同一套语义标签。建议至少统一下面几类:

  • 服务标识:服务名、实例 ID、版本号。版本号尤其重要,灰度发布时的异常定位全靠它。
  • 环境与地域:环境(prod/staging)、可用区、集群。
  • 请求标识:TraceId 与 SpanId,以及来自网关的 RequestId。
  • 业务维度:租户 ID、关键的资源类型。注意不要把高基数维度(如用户 ID、订单号)写进指标标签,会直接导致时序库膨胀。

高基数是可观测性成本失控的头号原因。经验规则:指标标签的组合数应控制在几万量级以内,超出部分应放进日志或链路属性里。

三、采样:控制成本的关键决策

链路追踪全量采集在生产环境几乎不可行。可选的几种策略:

  • 头部采样:在入口处按比例决定是否采样,实现简单,但会丢掉低概率的慢请求。
  • 尾部采样:先收集完整链路,再按规则决定是否保留。可以保证错误与慢请求被保留,是生产环境的推荐做法,代价是需要缓冲与集中决策组件。
  • 混合:入口按较低比例头部采样,同时开启“错误全留、超阈值全留”的尾部规则。

日志方面,建议按级别分级:ERROR 与关键业务日志全量保留并延长保留期,DEBUG 仅在按需开启时采集。结构化 JSON 日志应作为默认要求,否则后续检索只能靠正则,成本极高。

四、告警设计:从“有告警”到“有用告警”

告警做不好会反过来伤害可观测性:告警太多,团队就会集体忽略。三条原则:

  • 基于症状而非原因。告警“下单接口错误率超过 1%”,而不是“CPU 超过 80%”。后者只是可能的原因。
  • 区分级别与责任。P0 必须有人立即响应并明确值班,P2 可以只进日报。没有责任人的告警等于日志。
  • 用燃烧率而非瞬时值。基于错误预算的燃烧率告警能有效减少毛刺导致的误报,比单点阈值稳定得多。

五、落地节奏建议

不建议一开始就追求全覆盖。可行的路径是:

第一步,把核心链路的指标与告警补齐,确保“出事能知道”;第二步,接入链路追踪并开启尾部采样,把“知道出事了”推进到“知道慢在哪”;第三步,统一日志格式与保留策略,完成三者关联;第四步,才开始做容量预测、成本归因这类进阶分析。

衡量可观测性是否有效,可以用一个很实际的指标:从告警响起到定位到根因的平均耗时(MTTI)。这个数字下降,说明体系真的在起作用。

Related

相关阅读

这篇文章讨论的问题,我们也许能帮你解决

把你的场景描述给我们,一起看看有没有更省的路径。