黄金指标(延迟 / 流量 / 错误 / 饱和度)
2017 年,Google SRE 团队在《Site Reliability Engineering》一书中提出了黄金指标(Golden Signals)概念。四个简单的问题:用户访问慢不慢(Latency)、系统忙不忙(Traffic)、有没有出错(Errors)、有没有快撑不住(Saturation)。这四个指标,覆盖了服务健康状况的 80%。
为什么黄金指标重要?因为它解决了「该监控什么」这个问题。很多团队的监控是「看到什么加什么」,结果监控面板堆了几百个指标,但出问题的时候反而不知道该看哪个。黄金指标是一种优先级框架:先确保这四个指标能看准,再根据需要补充其他指标。
四个黄金指标
1. Latency(延迟)
「这个请求花了多长时间?」这是用户最能感知到的指标。但「延迟」不是简单的一个数字——你需要的不是平均值,而是分布。
平均值会说谎。想象一个系统:99% 的请求在 10ms 内完成,1% 的请求在 5 秒后才完成,平均延迟是 60ms,看起来还不错。但这 1% 的慢请求可能影响了数万个用户。
正确做法:使用分位数。P50(Median)、P90、P99、P99.9 分别代表不同层次的慢请求。
延迟监控还需要注意区分成功和失败。系统故障时,错误请求往往返回得很快(立即失败),如果把快错和慢对混在一起统计,会掩盖真实问题。
2. Traffic(流量)
「系统正在处理多少请求?」流量指标反映的是系统负载,可以用来判断系统是否接近容量上限、是否有异常流量涌入。
流量监控的核心价值在于容量规划和异常检测:
- 流量突然飙高 → 可能是 CC 攻击或突发热点事件
- 流量持续下降 → 可能是依赖服务不可用、接口异常或外部流量流失
- 流量周期性波动 → 帮你在高峰期前做好扩容准备
3. Errors(错误)
「请求中有多少失败了?」错误率的微小变化可能意味着重大故障。错误率从 0.1% 上升到 1%,看起来只有 0.9% 的差距,但如果是 10 万 QPS 的系统,每分钟就多了 9000 个错误请求。
错误监控需要区分不同的错误类型:
4. Saturation(饱和度)
「系统的各个资源有多满?」延迟飙升、流量下降,往往是因为某个资源被耗尽了。饱和度是故障的先行指标——在系统真正崩溃前,饱和度会提前发出信号。
饱和度监控的关键是关注资源瓶颈而非总量。比如 CPU 使用率 80% 不一定是问题,但如果你的线程池队列已经积压了 10000 个待处理任务,这才是真正的饱和。
黄金指标的采集设计
设计原则
- 标签层级要合理:
service、endpoint、status是必须有的标签,instance、pod用于定位 - 错误和成功的指标分开:避免慢错被快对拉平
- 延迟用 Histogram 记录分位数:而不是 Summary(Summary 无法二次聚合)
- 饱和度要选对资源:不同服务的瓶颈不同,Web 服务看 CPU + 连接池,IO 密集型看磁盘和网络
推荐的黄金指标埋点
黄金指标的告警配置
黄金指标的局限性
黄金指标是服务级别的监控框架,但它不够全面。以下场景需要补充:
- 数据库健康:连接池使用率、查询延迟、慢查询数量
- 消息队列:积压消息数、消费延迟、生产速率
- 缓存:命中率、内存使用率、驱逐率
- 业务指标:下单量、转化率、支付成功率
这些补充指标不是「黄金指标」,但对于特定业务场景同样关键。
质量判断标准
读完本节后,你应该能够回答:
- 为什么说「平均延迟」会说谎?应该用什么指标来正确衡量延迟?
- 黄金指标的告警配置中,
for: 2m字段的作用是什么?为什么不能去掉? - 在延迟监控中,为什么建议将成功请求和错误请求的延迟分开统计?
- 饱和度监控中,为什么说「CPU 80% 不一定是问题」?什么情况下才是真正的问题?
- 黄金指标是否足够覆盖所有监控需求?在什么场景下需要补充其他指标?