← Back to Blog

凌晨三点被十七条告警叫醒:谈谈监控告警的三层设计

94 阅读 点赞

凌晨三点,手机在床头柜上连震了十七次。爬起来打开电脑,发现是同一台机器的磁盘使用率触发了十七条不同的告警——从「磁盘使用率超过 85%」到「日志写入失败」,再到「健康检查超时」,每一条都像是独立的灾难,实际上它们只是同一个根因在不同层面上的回声。花了四十分钟才定位到问题,而真正修好它只用了两分钟。

这大概是很多团队都经历过的场景。我们花了很多精力把监控搭起来,指标采集、面板可视化、告警通道全都配齐了,可告警一响,人还是慌的。问题不在于监控没做好,而在于我们把「看得见」当成了终点,却忽略了从看见到能行动之间,还隔着好几层需要设计的东西。

告警信号雷达波纹封面
好的告警系统不是抓到越多问题越好,而是让人在故障后更从容

第一层:告警不是越多越好,是要有人接得住

很多团队衡量监控质量的指标是「覆盖率」——有多少服务接入了监控、有多少关键指标配了告警。这个指标本身没错,但它只衡量了「感知能力」,没有衡量「响应能力」。一个配了 300 条告警的系统,如果每天触发 200 次,那它衡量出来的真正能力是「团队整体对告警脱敏的速度」。

告警的本质是一次「叫人起床」的请求。每一个告警都应该有一个明确的人负责处理,并且这个人在被叫醒之后,知道下一步该做什么。如果做不到,这条告警就不该存在——它要么降级成面板上的一个指标曲线,要么合并进别的告警里。

实践中有一个简单有效的判断标准:对每一条告警问三个问题——它对应哪个具体的用户可感知影响?收到它的人第一件事做什么?如果什么都不做会怎样?如果第三个问题的答案是「也没什么关系」,那这条告警就是噪声。

把这三个问题问一遍,往往能砍掉一半以上的告警。剩下的那一半,才是真正值得让人从床上爬起来的东西。

第二层:从单点触发到信号收敛

单条告警能力再强,也解决不了「一次故障触发一片告警」的问题。真正的解法是收敛——让一组相关的信号聚合成一个事件,而不是各自为战。

收敛有几种常见思路。最基础的是时间窗口聚合:同一个服务、同一类问题的告警,在五分钟内合并成一条,附上触发次数。这一层能解决大部分「雪崩式刷屏」。

再往上一层是依赖关系收敛:如果告警来自同一个调用链上的上下游,只保留最上游的那条。数据库挂了,下游的十几个服务一起报错,这时候需要被叫醒的只有数据库那条告警,其他都是它的下游症状。要做到这一点,前提是把服务依赖关系沉淀成显式的拓扑数据,而不是靠人脑记忆。

第三层是抑制规则:当一条高优先级的告警已经触发并有人在处理时,相关的低优先级告警自动静默。这需要告警系统能感知「当前是否已有正在处理的事件」——也就是要把告警和值班、工单系统打通。

三层告警收敛漏斗数据可视化
从噪声过滤到告警收敛,再到根因定位:信号需要被逐层收窄

收敛做得好的团队,一个典型的线上故障从「触发三十条告警」变成「触发一条事件,附带三十条关联信号」。值班同学打开事件,看到的是一棵清晰的依赖树,而不是一屏滚动的红色。

第三层:让告警指向行动,而不是指向问题

一条合格的告警,应该自带处理路径。最差的告警是「CPU 使用率高于 90%」——然后呢?它没有告诉任何人该做什么。好的告警是「订单服务响应时间 P99 超过 2 秒,持续 5 分钟,可能原因:数据库连接池耗尽,处理手册见 xx 链接」。

这要求我们在设计告警的时候,就同步写一份运行手册(Runbook)。Runbook 不需要很长,三五句话讲清楚:这个指标意味着什么、先看哪些面板、常见的两三个原因、以及暂时缓解的操作是什么。它的价值不在于穷尽所有可能,而在于让一个刚接手的人在三分钟内能做出第一个正确的判断。

更进一步的做法,是把告警和自动化操作挂钩。有些故障的判断和处理是确定性的——比如某个批处理任务堆积超过阈值,可以直接触发扩容;某个缓存节点失联,可以先摘掉再通知人工。能把「确定性判断」的部分交给机器执行,把「需要人判断」的部分留给人,值班体验会有质的变化。

还有一点容易被忽略:告警要写得像写给陌生人的便条。写告警的人往往默认看的人知道上下文,但实际上凌晨三点被叫醒的人,很可能平时根本不负责这个模块。把所有隐含的前提都写出来——哪个环境、哪个集群、影响的是什么业务、历史上类似情况是怎么处理的。

深夜运维监控室意境图
值得被叫醒的告警,应该自带一条清晰的处理路径

结语

监控告警这件事,容易陷入一个错觉:以为堆够了指标和规则,系统就「可观测」了。但可观测的终点不是看得见,而是看见之后知道该做什么。

回过头看,那十七条凌晨三点的告警里,其实只有一条是必要的。如果重来一次,我希望收到的是一条事件通知,里面写着:某台机器的磁盘正在被某个日志文件写满,可能导致服务不可用,历史上同类问题可以通过调整日志轮转策略解决,链接在这里。这样,我大概能少花三十八分钟。

告警系统的质量,最终不体现在它抓到了多少问题,而体现在它有没有让人在一次故障之后,比上一次更从容。

💬 发表评论