最佳实践:告警通知时如何做到最佳降噪效果

告警通知降噪的关键不是把所有告警细节塞进短信或电话,而是把通知入口收敛、把查看细节交给页面聚合。本文用 300 条告警的场景说明通知策略、分派、升级和值班协同如何配合。

作者 被告警折磨的SRE

摘要

  • 告警通知降噪的目标,是避免值班人员在告警风暴中被短信、电话、IM 消息反复打断。
  • 对通知来说,最佳体验通常不是把 300 条告警压成 5 条或 9 条,而是在同一轮事故语境下只触达 1 次。
  • 对查看来说,不能只给一条简略消息,而要在页面上按服务、规则、级别等维度聚合展示,让值班人员能快速定位类别和影响面。
  • 通知策略要和分派、升级、静默、认领、协同配合:先把人叫醒,再把完整上下文交给处理页面。
  • 本文的核心结论是:通知降噪和查看降噪要分开设计,通知入口尽量收敛,事件详情在页面展开。

一个典型的告警风暴场景

比如在某个凌晨 1 点 30 分,突然爆发了 300 条告警,具体类别和数量如下:

  • 1条交换机网口的状态告警
  • 10条机器失联告警
  • 100个服务成功率告警,有a服务、b服务、c服务、d服务
  • 100个服务延迟告警,有e服务、f服务、g服务
  • 89个连接失败告警,有e服务、f服务、g服务、h服务

这个公司有 OnCall 团队或运维团队,作为告警接收的第一层团队。所以,这 300 个告警会一次性分派给值班人员张三。

如果张三一下子收到 300 条短信或电话,手机可能一直处于被呼叫状态,甚至没有办法联系其他人。这就是典型的通知疲劳:不是值班人员不重视告警,而是通知本身已经干扰了响应动作。

因此,这类场景真正需要解决的问题不是“告警事件能不能被归类”,而是“值班人员需要被通知几次,以及被通知后能不能快速进入处理上下文”。

常见做法:先对告警事件做归类

很多厂商的典型做法,是对告警事件做归类:

  • 按照告警规则归类,这 300 个告警事件可以归为 5 个。
  • 按照服务归类,可能归为 9 个。
  • 采用文本聚类,可能最终归为 x 个。

这样处理以后,作为接收人的我,一次性收到 x 个告警。每个告警消息里会带一些概要信息,看起来比 300 条通知少了很多。

这个做法当然有价值,但它还不是通知降噪的终点。因为对值班人员来说,5 条、9 条或 x 条电话短信,仍然可能在同一时间段反复打断响应动作。

更理想的通知策略:只通知一条,详情到页面看

我作为用户,真正期望的是:如果最终就归为 1 条通知就好了。

这样做有两个直接收益:

  • 节省电话、短信等通知成本。
  • 减少对值班人员的重复打扰,让值班人员可以把注意力放到定位和协同上。

问题是,如果所有消息都聚拢在一个通知里,这个通知的内容会不会过于简略?其实还好,原因如下:

  • 相比根据告警规则、服务聚类,1 条通知确实减少了一些信息,但减少得没有想象中那么多。在通知消息这个载体里,5 条、9 条和 1 条都只能承载概要信息。
  • 真正查看具体告警事件详情时,一定是在页面上看,而不是在短信里或者电话里看。
  • 页面上应该支持聚类,也应该支持自定义聚类规则,比如 Prometheus alertmanager 或者 Nightingale 都支持类似的展示方式。

下面是一个页面聚合展示的例子:

告警通知时如何做到最佳降噪效果-告警聚合视图

既然如此,就可以直接把这 300 条告警在通知层面归类为 1 条,然后把处理链接返回给用户。用户收到之后,消息里的提示大概是:

xx 告警了,共 300 条,最高级别 Critical,处理链接 https://xxxx

这条通知要完成的任务很明确:告诉值班人员“有事发生了、规模是多少、最高级别是什么、去哪里处理”。更细的分组、服务、规则、事件列表,不应该挤在通知里,而应该在处理页面里展开。

通知降噪策略总览

策略环节 要解决的问题 推荐做法 注意事项
通知收敛 同一轮告警风暴反复打扰值班人 在通知层面尽量收敛为 1 条入口消息 通知要包含总量、最高级别和处理链接
页面聚合 值班人需要看清告警类别和影响面 在页面按规则、服务、级别等维度聚合展示 不要把所有细节塞进短信或电话
分派和值班 谁应该第一时间处理 将事件分派给 OnCall 团队或运维值班人 分派目标要明确,避免多人同时被无差别打扰
升级 首轮值班人未响应或需要协同 结合升级策略把事件转给下一层人员或团队 升级应服务于响应闭环,而不是制造更多重复通知
静默 已知变更或无需重复打扰的场景 对明确范围内的重复通知做静默 静默不等于删除事件,页面仍应保留可查看上下文
认领与协同 多人处理时需要同步状态 支持认领、备注、协同处理 让后来者能看到当前进展,减少重复沟通

底层逻辑:区分通知降噪和查看降噪

上面的做法其实就是 Flashduty 的做法。作为一个统一的事件 OnCall 中心,Flashduty 既可以支持告警聚合降噪,也支持排班、认领、升级、协同等其他功能。

这套降噪逻辑的关键,是区分对待通知降噪和查看降噪。

通知降噪:把打扰次数降到最低

通知降噪关注的是“人被打扰几次”。在告警风暴里,通知的目标不是让值班人员在短信里读完所有细节,而是尽快知道有高优先级事件需要处理。

所以,通知降噪做到极致,就是通知一条。它承担的是唤醒和入口作用。

查看降噪:把页面信息组织清楚

查看降噪关注的是“人进入页面后能不能看懂”。页面上要根据聚合规则做聚合展示,让用户一目了然地知道有哪些类别的告警事件、哪些服务受影响、最高级别是什么。

这两件事不能混在一起做。如果把查看详情的任务交给短信或电话,通知会变长、变碎、变难读;如果只做 1 条通知但页面没有聚合能力,值班人员进入页面后仍然会被 300 条事件淹没。

因此,合理的设计应该是:通知尽量短,页面足够清楚。

FAQ

Q1:告警通知降噪是不是等于把告警合并掉?

不是。通知降噪主要减少的是对人的重复打扰,不应该让告警事件详情消失。事件详情仍然要在页面上可查看,并且最好能按规则、服务、级别等维度聚合展示。

Q2:为什么不把 300 条告警按规则或服务归成 5 条、9 条再通知?

这种做法比直接通知 300 条好,但对值班人员来说,同一时间收到多条短信或电话仍然是打扰。更好的方式是通知层面收敛为 1 条入口消息,页面层面再提供聚合视图。

Q3:一条通知里至少应该包含哪些信息?

至少应该说明发生了什么、共有多少条告警、最高级别是什么,以及处理链接在哪里。比如:

xx 告警了,共 300 条,最高级别 Critical,处理链接 https://xxxx

Q4:静默会不会导致漏告警?

静默应该用于明确范围内的重复通知控制,而不是删除告警事件。合理的做法是减少不必要的触达,同时在页面保留事件上下文,让值班人员需要时可以继续查看和处理。

结论

告警通知降噪的本质,不是追求某个漂亮的压缩比例,而是让值班人员在告警风暴中只被必要地打扰,并且被打扰后能快速进入完整处理上下文。

通知层面,尽量收敛为一条清晰的入口消息;查看层面,在页面上做好聚合、分派、认领、升级、静默和协同。两者配合起来,才是真正对值班人员友好的告警降噪。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云