四大黄金信号 · 以及三套方法论的关系
Google SRE 的 Latency、Traffic、Errors、Saturation。这一章讲清它和 RED/USE 的关系(它其实是 RED + 饱和度)、它独有的两个洞见——「成功请求和失败请求的延迟要分开看」以及「饱和度要看趋势和预测」。
四大黄金信号 · 以及三套方法论的关系
第三套方法论来自 Google 的《SRE Book》——四大黄金信号(Four Golden Signals)。书里的说法很硬气:如果你只能测四个指标,就测这四个。
| 信号 | 含义 |
|---|---|
| Latency | 请求耗时 |
| Traffic | 流量(请求速率) |
| Errors | 错误率 |
| Saturation | 饱和度:系统“有多满” |
它和 RED/USE 是什么关系
| 黄金信号 | 对应 |
|---|---|
| Latency | = RED 的 Duration |
| Traffic | = RED 的 Rate |
| Errors | = RED 的 Errors |
| Saturation | = USE 的 Saturation ← 多出来的这个 |
所以三套方法论的关系是:
- RED 从服务/请求视角出发,给出三个信号。
- USE 从资源视角出发,给出三个信号。
- 黄金信号从面向用户的整体系统视角出发,把 RED 的三个 + USE 里最重要的那个(饱和度)合在一起。
它们不矛盾,是同一片领土的三张地图。 实践中你不需要“三选一”,而是:对服务用 RED、对资源用 USE,而黄金信号提醒你:别忘了饱和度也是面向用户的一等信号。
为什么 Google 要把饱和度提到服务层
这是黄金信号最有价值的地方——它把“饱和度”从资源指标提升成了服务级的一等信号:
因为饱和度是唯一有预测性的信号。 其他三个都是滞后的:
- Latency 涨了 → 已经慢了,用户已经在受苦。
- Errors 涨了 → 已经错了,用户已经看到 500 了。
- Traffic 变了 → 那是外部输入,不是你的健康。
只有饱和度是“提前量”:线程池用了 80%、磁盘还剩 20%、连接池快满了——这些时候用户还什么都没感觉到,但你知道再涨一点就要出事。
这就是“叫醒你”和“叫醒你时已经晚了”的区别。 基于 Latency/Errors 的告警本质上是事后通知(SLO 已经在燃烧了);基于饱和度的告警是事前预警,你还有时间扩容。
《SRE Book》强调饱和度要看“趋势和预测”,而不只是当前值:
# 不只问"磁盘满了吗",要问"按这个速度,多久会满"
# predict_linear:基于过去 6 小时趋势,预测 4 小时后的值
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4*3600) < 0这条查询的意思是:“按当前增长速度,4 小时内磁盘会满”——它在磁盘还有 30% 空间时就告警,给你充足的处理时间。这比“磁盘使用率 > 90%”这种静态阈值高明得多:后者在小盘上太晚(90% 时可能只剩几分钟),在大盘上太早(90% 的 10TB 盘还剩 1TB,能撑一周)。第 5 部分讲阈值时会展开这个思路。
黄金信号独有的洞见:成功和失败的延迟要分开
《SRE Book》里有个容易被忽略、但极其实用的提醒:
失败请求的延迟会污染你的延迟指标——必须把成功和失败分开统计。
两种污染方向,都很致命:
- 失败得快 —— 服务过载时快速返回 503(fail fast),这些请求耗时极短。它们混进整体延迟里,会把 P99 拉低——于是系统越是在崩溃,延迟指标看起来越健康。这是个极其危险的假象:告警不响,但用户全在看错误页。
- 失败得慢 —— 超时的请求耗时 = 超时时间(比如 30s)。它们会把 P99 拉高到超时值附近,掩盖了成功请求的真实延迟变化。
正确做法:延迟按 status 分开看。
# ✅ 只看成功请求的 P99(这才是"用户成功时等了多久")
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{status=~"2.."}[5m])) by (le)
)
# 失败请求的延迟单独看(它有自己的意义:失败得快还是慢?)
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{status=~"5.."}[5m])) by (le)
)记住这个组合:成功率(E)+ 成功请求的延迟(D)。 这两个一起才完整描述了“用户体验”:有多少人成功了,以及成功的人等了多久。混在一起的 P99 是个会骗人的数。
实战:一张服务健康看板该有什么
把三套方法论落成一张真正有用的看板:
三套方法论速查
| 你要监控的东西 | 用 | 信号 |
|---|---|---|
| HTTP/gRPC 服务、消息消费者 | RED | Rate、Errors、Duration |
| CPU/内存/磁盘/网络/连接池/线程池 | USE | Utilization、Saturation、Errors |
| 整个面向用户的系统(顶层看板) | 黄金信号 | Latency、Traffic、Errors、Saturation |
| 业务健康 | 没有方法论 | 靠你对业务的理解(第 1 章说过) |
小结与下一章
四大黄金信号 = Latency、Traffic、Errors、Saturation,本质是 RED + 饱和度——三套方法论是同一片领土的三张地图,不用三选一(服务用 RED、资源用 USE、顶层看板用黄金信号)。它最大的贡献是把饱和度提升为服务级一等信号,因为饱和度是唯一有预测性的信号(延迟和错误都是滞后的——响的时候用户已在受苦;饱和度让你在出事前扩容);故饱和度要看趋势和预测(predict_linear 比静态阈值高明,后者在小盘上太晚、大盘上太早)。独有洞见:成功与失败的延迟必须分开——失败得快会把 P99 拉低(系统越崩指标越健康,危险的假象),失败得慢会把 P99 顶到超时值(掩盖真实延迟);正确组合是成功率 + 成功请求的延迟。看板要分层(用户视角 → 哪一跳 → 哪个资源),结构应该长得像排障思路。
方法论说完了“该测什么”。接下来是“怎么把它定义好”——命名、标签、以及那条不能碰的基数红线。👉 怎么定义指标。