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,可以放在告警详情页里,或者通过链接跳转。别一股脑全塞进告警正文。

我的习惯:告警标题控制在 80 字以内,正文不超过 300 字。超过这个长度,阅读效率会断崖式下降。

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 一次。

优先级定义的黄金法则:一个告警的优先级,应该由它对用户的影响程度决定,而不是由它对系统的影响程度决定。CPU 使用率 95% 是 P2 还是 P3?看它有没有导致用户请求超时。没有?那就是 P3。

3.3 告警生命周期管理

告警不是发出去就完事了。它有自己的生命周期:产生 → 确认 → 处理 → 关闭 → 复盘。每个阶段,你都得有对应的策略。

3.3.1 产生与确认

告警产生后,第一件事是确认:这是真的吗?我习惯在告警规则里加一个“确认窗口”。比如,连续 3 次采样都超过阈值,才触发告警。这样可以过滤掉瞬时的抖动。

确认之后,告警进入“待处理”状态。这时候,需要有人认领。我建议用告警平台自带的“认领”功能,或者集成到 IM 机器人里,谁点了“我来处理”,告警就绑定到谁身上。

3.3.2 处理与升级

处理阶段,最怕的是“告警没人管”。所以,你需要一个升级机制

  • P0 告警 5 分钟无人认领 → 自动升级到值班经理
  • P0 告警 15 分钟未解决 → 自动升级到技术负责人
  • P1 告警 30 分钟无人认领 → 自动升级到值班经理

升级不是惩罚,而是兜底。我曾经在一个凌晨 3 点的故障中,因为升级机制及时拉醒了技术负责人,才避免了业务全面瘫痪。嗯,那次之后,我再也不敢关掉升级通知了。

3.3.3 关闭与复盘

告警关闭,不代表事情结束了。我要求团队:每个 P0/P1 告警,都必须有复盘记录。复盘不是追责,而是问三个问题:

  1. 这个告警为什么会产生?(根因是什么?)
  2. 我们为什么没有提前发现?(监控盲区?阈值不合理?)
  3. 下次如何避免?(加规则?改架构?加容量?)

复盘的结果,要反哺到告警规则里。比如,某个告警频繁误报,那就调整阈值;某个告警总是被忽略,那就降级或删除。

一个小技巧:我习惯在告警平台里加一个“告警健康度”指标。健康度 = 有效告警数 / 总告警数。如果健康度低于 60%,说明你的告警规则需要大修了。

3.4 本章知识体系

下面这张图,是我对告警治理原则的总结。你可以把它当成一个检查清单,每次调整告警规则时,对照着看一遍。

告警治理原则知识体系 告警降噪三原则 告警优先级定义 告警生命周期管理 收敛:按根因合并同类告警 压缩:精简单条告警内容 抑制:屏蔽衍生告警 P0:核心业务完全不可用 P1:核心业务部分受损 P2:非核心业务异常 P3:告警信息,无需立即处理 产生与确认 处理与升级 关闭与复盘 核心目标:让每条告警都有明确的处理价值 降噪 → 定级 → 管理,形成闭环

好了,告警治理原则就讲到这里。记住一句话:告警不是越多越好,而是越准越好。你花在降噪上的每一分钟,都会在故障处理时加倍还给你。


公众号:蓝海资料掘金营,微信deep3321