3. 告警治理原则:告警降噪三原则、告警优先级定义、告警生命周期管理
告警风暴,说白了就是监控系统在“尖叫”,但没人知道它在喊什么。我见过最夸张的一次,某电商大促期间,一个核心集群的告警量直接飙到每小时两万条。运维同学打开告警平台,满屏红色,手都在抖——根本不知道先处理哪个。
要解决这个问题,不能靠堆人。你得有一套治理原则。我个人习惯把告警治理拆成三个维度:降噪、定级、管生命周期。下面一个一个说。
3.1 告警降噪三原则:收敛、压缩、抑制
这三个词,我建议你刻在工位上。它们解决的是同一个问题:如何让告警从“噪音”变成“信号”。
3.1.1 收敛:把同类告警合并
什么叫收敛?举个例子:一台服务器上跑了 100 个容器,每个容器都挂了。如果不收敛,你会收到 100 条“容器宕机”告警。这有意义吗?没有。你只需要知道“这台宿主机出问题了”。
收敛的核心思路是:按根因聚合。我习惯用告警指纹(fingerprint)来做。比如,告警的 metric 名称、主机 IP、告警级别相同,就合并成一条,附带受影响实例列表。
- 相同告警规则 + 相同主机 → 合并为一条
- 相同告警规则 + 相同集群 → 合并为一条,附带节点列表
- 相同告警规则 + 相同错误码 → 合并为一条,附带错误详情
我在项目中遇到过,某次数据库连接池耗尽,触发了 500 多条告警。收敛后,只剩 3 条:一条是“连接池使用率 > 90%”,一条是“慢查询增多”,一条是“应用超时”。你看,根因一下子就清晰了。
3.1.2 压缩:去掉冗余信息
压缩和收敛不一样。收敛是合并同类项,压缩是精简单条告警的内容。
你想想看,一条告警里塞了 50 个标签、2000 字的描述,运维同学看都看不完。我见过最离谱的告警,标题就占了 3 行,里面还带着完整的堆栈信息。这哪是告警?这是论文。
压缩的原则很简单:只保留决策所需的最小信息。一条好的告警,应该包含:
- 谁出了问题(主机名、服务名)
- 出了什么问题(指标名、阈值、当前值)
- 什么时候出的(时间戳)
- 严重程度(P0/P1/P2/P3)
其他信息,比如详细日志、调用链 ID,可以放在告警详情页里,或者通过链接跳转。别一股脑全塞进告警正文。
3.1.3 抑制:该闭嘴时就闭嘴
抑制,就是在已知故障期间,主动屏蔽衍生告警。这是降噪三原则里最容易被忽略,但效果最明显的一个。
举个例子:你的数据库挂了,所有依赖它的应用都会报错。如果不抑制,你会收到:数据库告警 + 100 条应用告警。但真正需要处理的,只有数据库那一条。
抑制的常见策略:
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 依赖抑制 | 如果 A 服务挂了,抑制所有依赖 A 的服务告警 | 微服务架构、数据库依赖 |
| 时间窗口抑制 | 同一规则在 N 分钟内只发一次告警 | 抖动、瞬断 |
| 维护模式抑制 | 标记为“维护中”的主机/服务,不产生告警 | 计划内变更、升级 |
3.2 告警优先级定义
降噪之后,你还需要告诉团队:哪些告警必须马上处理,哪些可以等一等。这就是优先级定义。
我个人习惯把告警优先级分成四级,对应不同的响应时间:
| 级别 | 定义 | 响应时间 | 示例 |
|---|---|---|---|
| P0 | 核心业务完全不可用 | 立即响应(< 5 分钟) | 支付接口挂了、数据库主库宕机 |
| P1 | 核心业务部分受损 | 15 分钟内响应 | 响应时间 > 5 秒、错误率 > 5% |
| P2 | 非核心业务异常 | 1 小时内响应 | 后台报表延迟、缓存命中率下降 |
| P3 | 告警信息,无需立即处理 | 下一个工作日 | 磁盘使用率 > 70%、证书即将过期 |
这里有个坑:别把 P3 告警当成垃圾。P3 告警是“预警”,不是“噪音”。我见过不少团队,把所有不紧急的告警都设成 P3,结果 P3 告警堆积如山,没人看。正确的做法是:P3 告警也要有明确的处理流程,比如自动创建 Jira 工单,或者每周 review 一次。
3.3 告警生命周期管理
告警不是发出去就完事了。它有自己的生命周期:产生 → 确认 → 处理 → 关闭 → 复盘。每个阶段,你都得有对应的策略。
3.3.1 产生与确认
告警产生后,第一件事是确认:这是真的吗?我习惯在告警规则里加一个“确认窗口”。比如,连续 3 次采样都超过阈值,才触发告警。这样可以过滤掉瞬时的抖动。
确认之后,告警进入“待处理”状态。这时候,需要有人认领。我建议用告警平台自带的“认领”功能,或者集成到 IM 机器人里,谁点了“我来处理”,告警就绑定到谁身上。
3.3.2 处理与升级
处理阶段,最怕的是“告警没人管”。所以,你需要一个升级机制:
- P0 告警 5 分钟无人认领 → 自动升级到值班经理
- P0 告警 15 分钟未解决 → 自动升级到技术负责人
- P1 告警 30 分钟无人认领 → 自动升级到值班经理
升级不是惩罚,而是兜底。我曾经在一个凌晨 3 点的故障中,因为升级机制及时拉醒了技术负责人,才避免了业务全面瘫痪。嗯,那次之后,我再也不敢关掉升级通知了。
3.3.3 关闭与复盘
告警关闭,不代表事情结束了。我要求团队:每个 P0/P1 告警,都必须有复盘记录。复盘不是追责,而是问三个问题:
- 这个告警为什么会产生?(根因是什么?)
- 我们为什么没有提前发现?(监控盲区?阈值不合理?)
- 下次如何避免?(加规则?改架构?加容量?)
复盘的结果,要反哺到告警规则里。比如,某个告警频繁误报,那就调整阈值;某个告警总是被忽略,那就降级或删除。
3.4 本章知识体系
下面这张图,是我对告警治理原则的总结。你可以把它当成一个检查清单,每次调整告警规则时,对照着看一遍。
好了,告警治理原则就讲到这里。记住一句话:告警不是越多越好,而是越准越好。你花在降噪上的每一分钟,都会在故障处理时加倍还给你。
公众号:蓝海资料掘金营,微信deep3321