为什么需要可观测性 · 从「监控」到「自证」

可观测性和监控不是同义词。这一章讲清两者的分野——监控回答「你预先想到要问的问题」,可观测性回答「你没想到的问题」,以及为什么分布式系统把后者从奢侈品变成了必需品。

作者 David更新于 第 1 篇(共 52 篇)

为什么需要可观测性 · 从「监控」到「自证」

“可观测性”(Observability)这个词这几年被用滥了,很多人把它当成“监控”的时髦说法。但两者有真实且重要的区别——搞清楚这个区别,是理解后面所有技术选择的前提。

监控 vs 可观测性:已知的未知 vs 未知的未知

监控(Monitoring)回答的是“你预先想到要问的问题”;可观测性(Observability)回答的是“你没想到的问题”。

  • 监控 —— 你事先知道要盯什么:CPU 超过 80% 告警、磁盘满了告警、错误率超阈值告警。你列出一张“可能出问题的清单”,挨个装上探针。这对付的是已知的未知(known unknowns)——你知道 CPU 可能会高,只是不知道何时。
  • 可观测性 —— 系统吐出足够丰富的数据,让你能在事后提出当初没想到的问题并得到回答:“为什么只有华东区、只有安卓端、只有下单接口、只在昨晚 8 点那一刻变慢?”这对付的是未知的未知(unknown unknowns)——你事先根本不可能把这个组合列进清单。

一句话:监控是“检查清单”,可观测性是“提问能力”。监控告诉你“出事了”,可观测性告诉你“为什么出事”。

这个区别不是文字游戏。它决定了你采集什么数据:监控思维下,你只存“CPU 使用率”这一个数;可观测性思维下,你存的是带维度的数据(哪台机器、哪个服务、哪个版本、哪个区域),因为你不知道未来会想按哪个维度切。这就是为什么 Prometheus 的数据模型是“指标名 + 一堆标签”而不是一个孤零零的数字——标签就是你未来提问的自由度。

为什么现在才成为必需品

单体应用时代,出问题就上机器 tail -f 日志、gdb 挂上去,基本够用。分布式系统把这套彻底废掉了:

分布式系统让传统调试手段集体失效——这才是可观测性从“奢侈品”变成“必需品”的根本原因。

  • 没有“那台机器” —— 一个请求穿过网关、鉴权、订单、库存、支付十几个服务,分布在几百个容器上,容器还随时被调度走。你 tail 哪一台?
  • 问题不可复现 —— 故障常源于特定的时序、特定的并发、特定的数据组合。“昨晚 8 点那 3 秒” 不会以同样方式重来,断点调试无从下手。
  • 故障是涌现的 —— 每个服务的指标都“正常”,但组合起来系统就是慢。根因可能是某个服务的重试放大了下游压力——没有任何单点数据能显示这一点,只有把数据关联起来才看得见。

于是唯一的出路是:让系统在运行时主动吐出足够的数据,事后无需复现就能重建现场。这不是给系统“加个功能”,而是把“可被理解”当成系统的一等设计目标。

读过本站 WebRTC 专栏第 11 部分的话,你会发现这个逻辑一模一样:WebRTC 的 bug 在别人的网络里、无法复现、跨十几个子系统,所以它必须内建 getStats 和 RtcEventLog。任何跑在你控制不了的环境里的复杂系统,最终都会长出自己的可观测性体系——只是形态不同。

一个具体的例子

抽象说不清,来个具体的。假设你的下单接口 P99 延迟从 200ms 涨到 2s:

图表加载中…

监控只能告诉你第一格:“慢了”。而可观测性让你能一路按任意维度追问下去,直到找到“node-7 磁盘 IO 饱和”这个根因。注意这条追问链上的每一步,都是你事先没写进任何告警规则的问题——你不可能预先想到“如果 node-7 的磁盘满了,下单会慢”。这就是可观测性的价值:保留提问的自由度。

代价不是免费的

必须说清另一面:可观测性不便宜。

  • 性能代价 —— 埋点要占 CPU、内存、网络。高频路径上加一个指标,可能就影响吞吐。
  • 存储代价 —— 维度越多,数据量指数级膨胀。这就是第 8 部分要专门讲的“基数爆炸”——可观测性的头号杀手,很多团队的监控账单比业务服务器还贵。
  • 认知代价 —— 数据太多、面板太杂,反而没人看得懂,告警多到全员免疫。

所以整个可观测性工程,本质是在**“看得见” vs “付得起”** 之间反复权衡。你在后面会一次次看到这个矛盾:采样为什么存在、直方图为什么只存桶而不存每个值、Prometheus 为什么不存原始日志——答案都指向这条轴。

小结与下一章

监控回答你预先想到的问题(已知的未知),可观测性回答你没想到的问题(未知的未知)——前者是检查清单,后者是提问能力。这个区别决定了要采集带维度的数据(标签 = 未来提问的自由度)。它从奢侈品变成必需品,是因为分布式系统废掉了传统调试(没有“那台机器”、不可复现、故障是涌现的),只能让系统自证。但它有性能 / 存储 / 认知三重代价,整个工程都在“看得见 vs 付得起”间权衡。

那么,系统到底该吐出什么样的数据?业界的答案是“三大支柱”。下一章看它们各自回答什么问题。👉 三大支柱:Metrics、Logs、Traces。

参考资料

  • [1] Charity Majors 等《Observability Engineering》(可观测性 vs 监控的经典论述)。
  • [2] Google《SRE Book》第 6 章 Monitoring Distributed Systems。
  • [3] 关联本站 WebRTC 专栏的可观测性部分(同一逻辑的另一个领域样本)。

本页目录