三大支柱 · Metrics、Logs、Traces

可观测性的三大支柱各自回答不同的问题、各有不同的代价曲线。这一章讲清指标、日志、追踪的本质分工——为什么是这三样、它们的成本模型有何根本不同,以及「三支柱」说法本身的争议。

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

三大支柱 · Metrics、Logs、Traces

上一章说系统要自证。但具体吐出什么数据?业界收敛出了三种形态,合称三大支柱:指标(Metrics)、日志(Logs)、追踪(Traces)。它们不是三种可选方案,而是三个互补的视角——各自擅长回答不同的问题,各自有完全不同的成本曲线。

三支柱各答什么

三大支柱的分工,可以用三个问题概括:

  • 指标(Metrics) —— “系统现在什么状态?” 是聚合后的数字,随时间变化:QPS、错误率、P99 延迟、内存占用。特点是极度便宜(不管一秒来 1 个还是 100 万个请求,聚合后就是几个数),因此可以长期、高频、全量保存。代价是丢失了细节——你知道错误率 5%,但不知道具体是哪些请求失败了。
  • 日志(Logs) —— “具体发生了什么?” 是离散的事件记录,带完整上下文:哪个用户、哪个订单号、什么错误堆栈。特点是细节完整,但极度昂贵(每个事件一条,量与流量成正比),且难以聚合(要从文本里捞出统计值很费劲)。
  • 追踪(Traces) —— “这一个请求经历了什么?” 是一次请求跨服务的完整路径:在网关花了 5ms、订单服务 10ms、库存服务 1.8s(← 元凶)。特点是揭示因果与关联——这是分布式系统里指标和日志都给不了的视角。代价是量大,通常要采样。

一句话记忆:指标告诉你“出事了”,追踪告诉你“在哪一跳出的”,日志告诉你“那一跳到底怎么了”。三者串起来才是一次完整的排障。

成本模型才是关键区别

三支柱最本质的差异不在“记什么”,而在成本怎么随流量增长——这决定了你能拿它们干什么:

支柱数据量随流量能保存多久能全量吗
指标几乎不增长(聚合掉了)数月~数年✅ 全量
追踪线性增长数天~数周❌ 通常采样
日志线性增长(且每条更大)数天~数月⚠️ 常需取舍

指标“几乎不随流量增长”这一点,是它成为可观测性地基的根本原因。 想想:一个服务每秒处理 10 万请求,如果每个请求记一条日志,一天就是 86 亿条;但如果只记“请求总数”这一个计数器,一天下来它仍然只是一条时间序列——不管流量是 10 万还是 1000 万 QPS,存储成本几乎一样。

这个“聚合换细节”的交易,让指标可以做到长期、高频、全量、廉价,因此适合做告警和趋势(第 4 部分)。而日志和追踪因为线性增长,注定要在采样、保留期、成本上做痛苦取舍——这正是上一章说的“看得见 vs 付得起”那条轴。

你会发现整个 Prometheus 的设计,都是把“指标便宜”这个优势用到极致:压缩到平均 1~2 字节一个采样点、用倒排索引支持任意维度切——便宜到你可以毫无顾虑地全量长存。

一次真实排障里三者怎么配合

回到上一章那个 P99 变慢的例子,看三支柱如何接力:

图表加载中…

指标发现问题 → 追踪定位到哪一跳 → 日志看清那一跳的细节。 这条“从宏观到微观逐级聚焦”的路径,是可观测性的标准工作流,也解释了为什么三者缺一不可:

  • 只有指标:知道慢了,不知道哪慢。
  • 只有日志:海量文本里大海捞针,且不知道该捞哪个时间段。
  • 只有追踪:采样过的,可能恰好没采到出问题的那条;且没有全局趋势。

三者之间还需要能互相跳转——这就是第 6 部分要讲的关联机制(exemplar 让你从指标曲线一键跳到那一刻的某条 trace,trace 和日志靠 trace_id 关联)。支柱之间的“桥”和支柱本身一样重要,否则你在三个割裂的系统间手工对时间戳,效率极低。

“三支柱”说法的争议

必须提一句:“三大支柱”这个框架近年受到了不少批评,值得知道。

批评的核心是:“三支柱”容易让人以为“装齐这三样就有可观测性了”,但实际上割裂的三套系统 ≠ 可观测性**。**

  • 割裂的问题 —— 指标在 Prometheus、日志在 ES、追踪在 Jaeger,三套系统、三个界面、三套查询语言,排障时人肉在中间倒腾。数据是有了,提问却依然困难。
  • 本质是“宽事件” —— Charity Majors 等人的观点认为:三支柱只是同一份底层数据的三种投影。更本质的做法是记录高基数、宽维度的结构化事件(wide events),指标 / 追踪 / 日志都可以从它派生。
  • 实践的回应 —— OpenTelemetry 正是往“统一”方向走的:用同一套 SDK、同一个协议(OTLP)、同一条管道(Collector)运送三支柱,并强调它们之间的关联。这也是第 5 部分要讲 Collector的原因——它的存在本身就是对“三支柱割裂”的一种回应。

所以别把“三支柱”当教条,把它当理解数据形态的入门框架:形态确实是三种,但目标是让它们成为一个整体。

小结与下一章

三大支柱的分工:指标(聚合数字,答“什么状态”,几乎不随流量增长故可全量长存)、日志(离散事件,答“具体发生了什么”,细节全但贵)、追踪(请求路径,答“哪一跳出的问题”,揭示因果但通常要采样)。本质区别是成本随流量的增长方式——这决定了各自的用法。排障标准流是指标发现 → 追踪定位 → 日志细看,三者间的关联桥(exemplar / trace_id)和支柱本身一样重要。“三支柱”框架有“割裂”之讥,OpenTelemetry 的统一路线正是对它的回应。

理论说完了。下一章用一条具体的指标走完全程,把这个专栏要讲的所有站点串成一张图。👉 一条指标的一生。

参考资料

  • [1] Peter Bourgon 的经典文章 Metrics, tracing, and logging —— 三支柱框架的经典表述。
  • [2] Charity Majors 等《Observability Engineering》(对三支柱的批评与“宽事件”主张)。
  • [3] OpenTelemetry 官方文档:signals 概念(统一三支柱的实践)。

本页目录