监控告警的异化:为什么告警越多,系统反而越危险

一个系统出了问题,没有告警,当然危险。

但另一种情况也值得警惕:告警一直在响,真正的故障却需要业务方反馈,团队才开始处理。

监控覆盖了,规则触发了,消息也送达了。为什么仍然没能及时发现问题?

因为从"异常被报告"到"有人采取行动",中间还有一段距离。告警越多,这段距离有时反而越长。

下面用一个简化场景,讨论告警如何失去作用,以及怎样把它重新变成有效的响应入口。


一、一个问题,为什么产生几十条通知?

某业务服务的下游持续变慢,请求占用资源的时间增加,逐渐形成积压。

text 复制代码
下游响应变慢
    ↓
并发请求堆积
    ↓
线程池、连接池压力增加
    ↓
入口请求超时
    ↓
业务成功率下降

每个环节都可能触发告警:

告警 反映的信息
下游 P99 延迟升高 依赖响应异常
活跃线程数升高 并发资源压力增加
连接池等待时间增加 获取连接变慢
入口超时率升高 请求无法及时完成
业务失败率升高 用户目标受到影响

这些信号都有价值,但如果每条规则按实例触发、分别发送、重复提醒,一个问题就可能产生几十条通知。

值班人员需要先判断:它们是不是同一件事?哪条最重要?影响了哪些业务?应该找谁?

通知增加了,判断工作也被转移到了人身上。

更麻烦的是,同一批规则平时也会触发:短暂抖动、自动恢复、无须介入。

经历多次之后,值班人员会学会先等一等。

这时,一次持续恶化的故障,可能与日常噪声有着相似的开场。


二、告警不仅消耗时间,也消耗信任

我们常把告警当成一道防线:有规则,就有人知道;有人知道,就会处理。

实际上,一条告警需要走完这样的链路:

text 复制代码
收到 → 看懂 → 判断影响 → 找到责任人 → 开始处理

消息送达,只完成了第一步。

如果一条告警反复触发,却长期不需要行动,人就会降低对它的重视程度。如果多条规则都如此,整个通知渠道都会失去可信度。

无效告警消耗的,不只是处理它的几分钟,还有下一条重要告警被及时关注的机会。

Google SRE 强调,打断值班人员的告警应该具有可操作性:收到后,需要有人及时采取明确行动。

因此,创建规则时,应该先问:

这条消息触发后,我们希望收到它的人做什么?

如果答案长期是"先看看",就需要重新评估它的通知等级。

信息可以进入看板,可以形成待办,也可以用于排查。它们不必都成为紧急通知。


三、黄金信号是观察框架,不是全部报警的清单

Google SRE 提出的四个黄金信号是:延迟、流量、错误和饱和度。

落到业务上,它们对应四个问题:

黄金信号 业务问题
延迟 用户需要等多久才能得到结果?
流量 工作是否正常进入并完成?
错误 用户希望完成的事情是否成功?
饱和度 剩余处理能力是否还能承接需求?

这比只看 CPU、内存或 HTTP 状态码,更接近用户受到的影响。

例如,接口返回 HTTP 200,但订单创建失败;提交任务很快,但任务几个小时没有完成。技术调用看起来正常,业务已经异常。

不过,业务指标补齐之后,也不能把每个变化都设成紧急告警。

流量下降可能是低峰,耗时短暂升高可能是抖动,积压增加也可能仍在交付时限内。

指标负责提供信息,告警负责提出行动要求。两者需要分别设计。

紧急告警应优先关注明确的业务影响,或需要立即处理的风险。资源、依赖和日志信号则帮助定位原因,也可以在风险明确时提前预警。


四、治理告警,先把通知组织好

1. 聚合相关信号

面对前面的下游变慢场景,值班人员首先需要看到的是:

某业务成功率下降,相关异常包括下游延迟升高、连接等待增加。

而不是先阅读几十条孤立消息。

在 Grafana Alerting 中,可以通过稳定的服务、环境、区域等标签,结合 Notification policies 进行路由和分组。

分组过细,仍然形成通知风暴;分组过宽,又可能把独立故障混在一起。边界应结合责任范围和处置方式设计。

2. 去重并控制重复提醒

持续存在的同一问题,不应每次评估都成为新事件。

时间戳、业务单号、动态错误文本等内容,不宜放入告警身份标签,否则可能不断生成新的告警实例。它们更适合放在注释或查询链接里。

重复通知间隔也需要匹配响应流程。没人确认、影响继续扩大时,应有升级机制;已经进入处置的事件,不必继续用相同消息刷屏。

3. 降低噪声,保留证据

短暂异常可以通过适当的持续时间条件过滤,但等待时间过长也会延误响应。

同一故障的次级通知可以减少,相关指标仍应保留在看板中,供响应人员下钻。

调整之后,要用历史故障和日常数据验证:

  • 原来的噪声是否减少?
  • 真实问题是否仍能及时触发?
  • 故障恢复后是否及时解除?

通知少了,并不自动意味着治理成功。


五、告警需要行动入口,也需要退出机制

"服务异常,请关注",把后续工作全部留给了值班人员。

一条紧急告警至少应提供:

  • 影响业务和范围;
  • 负责团队;
  • 业务看板与排查链接;
  • 建议检查项或处置手册。

例如先确认业务影响,再查看近期变更和异常依赖。具体动作需要说明条件,避免把"重启服务"变成默认答案。

规则上线以后,还需要维护。

业务会迁移,流量会变化,阈值会过时。曾经有效的规则,可能逐渐只剩噪声。

可以定期审查触发最多的几条:

问题 目的
最近触发中,多少次需要介入? 判断行动价值
收到后是否知道怎么处理? 检查处置能力
是否与其他规则重复? 减少重复打断
哪些真实故障没有及时发现? 检查覆盖缺口
负责人和业务范围是否仍然有效? 清理过期规则

删告警需要依据,保留告警同样需要依据。


六、告警过多,也是管理问题

做研发管理时,很容易从规则数量里获得安全感。

事故之后"再加一条告警",具体、容易交付,也容易被当作整改完成。

但谁接收、收到后做什么、旧规则是否仍然有效,未必一起被安排。

最后,值班人员需要在深夜替整个系统判断:这一百条消息里,哪一条值得处理?

Google SRE 重视减少重复、可被自动化替代的运维劳动。每天人工确认"这条不用管,那条再等等",就是一个值得治理的信号。

注意力是有限的可靠性资源。

规则数量可以增加,但无效打断不应随之增加。管理者需要为告警的行动价值、责任边界和维护成本负责。

下一次添加规则前,先问清楚:

谁需要收到?为什么需要现在收到?收到后做什么?

告警体系的质量,最终体现在危险发生时,人能否及时看见、正确判断并开始行动。