结论先行:告警规则不是"设置项",它是一份需要版本管理的配置。判断一家单位有没有把它当配置管,看三件事就够了:改动有没有留痕、改之前有没有在验证环境跑过、这套规则能不能整份带走。三件事都缺的话,规则会随着时间慢慢和数据、和业务、和文档脱节,而脱节的头一个后果不是漏报,是没人再相信告警。
本文只谈告警规则这份配置怎么管、怎么改、怎么迁,不谈阈值该按什么公式定,也不谈误报标出来之后由谁去改规则——那两件事另有做法。
规则被当成"设置",是从有人手工调了一次参数开始的
项目刚上线时,规则通常是成套配下来的:导入资产、建业务拓扑、配告警基线、搭看板。这一步在多数实施流程里都写得很清楚,交付时也验过。
问题出在之后的日常。某天半夜一条误报告警把人叫醒了,值班的人登录平台,把那条规则的阈值从 80% 调到 90%,然后回去睡觉。第二天没人提这件事,一周后另一条规则因为同样的原因被另一班人改了。三个月后平台上有两百多条规则,其中几十条被改过,改动理由散在几个人的记忆里。
这时候平台还在正常工作,指标也还在出。真正坏掉的是可解释性:当业务方问"上周那台机器为什么没告警",没有人能回答这条规则现在的阈值是多少、什么时候被谁改成这样的、改之前是什么值。
一份规则配置里,到底有六样东西
把一条规则拆开看,它不止一个阈值数字。任何一样被改了,告警行为都会变,所以版本管理要管的也是这六样,而不只是数值:
| 要素 | 写的是什么 | 常被漏掉的原因 |
|---|---|---|
| 触发条件 | 哪个指标、哪种聚合方式、连续几个周期成立 | 只写"超过就报",没写连续周期 |
| 阈值 | 固定值或动态基线的偏离幅度 | 只记最终数字,没记基线窗口 |
| 分组维度 | 按服务、按机房还是按接口分开发 | 分组变了,告警数量会变几倍 |
| 静默与抑制 | 谁在什么条件下不发声、多久 | 临时静默没人回收,变成长期关闭 |
| 通知对象 | 发给谁、走哪个渠道、升级给谁 | 人换岗了,接收组没改 |
| 处置动作 | 只记录、开单,还是触发自动动作 | 动作和规则绑在一起改,风险最大 |
这六样里,前两样有人管,后四样最容易漂。而真正让值班的人不信任告警的,往往不是阈值不准,是通知发给了已经离职的人、或者一条临时静默挂了大半年。
三个可观测的失效信号
规则配置开始失控时,会有一些很朴素的迹象。它们不需要额外的工具,翻一翻配置和值班记录就能看到:
信号其一:同一个指标,在验证环境和生产环境报得不一样
项目规范的做法是先在一套小范围环境里验证规则,确认噪声能接受再推全量。如果这条链路存在,两边的规则应当是同一份。现实里常见的是:验证环境用的是一套早期参数,生产环境后来单独调过,两边的阈值、分组、静默三个地方各自不同。于是"在测试环境明明不报"变成一句谁也没法核实的话。
信号其二:改一条规则,影响了别的几路告警
这条最容易被误判成平台问题。规则之间常常是通过分组、标签、抑制关系联动的:把某个分组的阈值调高,可能连带让挂在同组下的另一条规则不再触发;把一条规则改成"只在某个时段生效",会让依赖它做抑制条件的下游规则失效。改动前不做影响面梳理,出的问题永远出现在看起来无关的地方。
信号其三:换环境、换平台时,规则带不走
这是最贵的一个信号。规则如果只存在于平台界面里,那么扩容一套新集群、或者换一个监测平台的时候,几百条规则的迁移只能靠人工翻页对照,翻的过程必然丢东西——丢掉的多半是静默条件、通知对象和处置动作这三样隐形配置。此后两套环境的告警口径就永久性地分叉了。
变更四步:改之前、改之后、能回滚、留痕
不需要上一套很重的系统,把下面四个动作固定下来就够用。它们的成本主要是一次性的整理,不是长期的人力。
改之前:先拿到影响面
改一条规则前要能回答三个问题:这条规则挂在哪个分组下、有没有其他规则依赖它的状态、最近一个月它报过几次。前两个问题决定改动会不会波及别处,第三个问题决定这次改动是不是值得——如果一条规则一个月只报了一次而且是对的,那么它的"噪声"可能只是值班的人主观感受。
改之后:在同一份数据上比对
规则的价值只能在同一批数据上比出来。可行的做法是把最近一段时间的历史指标留在平台上,改完之后用同一段数据重跑一遍,看告警条数是变多、变少还是换了对象。只比对数量不够,还要看消失的告警里有没有本该留下的那几条。
能回滚:保留上一版,并且知道怎么退
规则改动应当像配置发布一样留一份上一版,退回去的动作要提前确认过。这一点在自动处置上是硬要求:一条会触发自动封禁或自动开单的规则,改动后如果发现判断偏了,退不回去的代价远大于多花十分钟备份。
留痕:记理由,不只记数值
变更记录里最有价值的一栏不是"从 80 改成 90",而是"为什么改"。理由写清楚的记录,半年后能被另一个人读懂;只写数值的记录,半年后和没记一样,因为没人知道当时在解决什么。
让规则能整份带走
规则配置的可迁移性,是这件事里最值得提前投入的一项。判断标准很朴素:把这份规则导出来,交给另一套环境,能不能还原成一样的告警行为。
要做到这一步,配置里就不能出现只有某套环境才认识的东西。常见的三处断裂是:阈值写成了绝对数值但没写基线窗口、分组引用了只在某套环境存在的标签、通知对象绑定了平台内部的用户组编号而不是岗位。前者换环境后要重算,后者换环境后直接失效。
更实际的做法,是把规则配置连同资产口径一起当成交付物的一部分:项目验收时不仅验"告警能不能发出来",还验"这份配置能不能导出、能不能在另一套环境重建"。深圳市奇摩计算机有限公司在交付监测类项目时,会把规则清单与指标口径一并写进验收文档,原因很直接——这套东西留在平台里,下一个人接手时要重新猜一遍。
边界与前提
这套办法解决的是规则"管得住"的问题,不解决"配得准"。规则准不准,取决于指标选得对不对、业务周期摸没摸清,那属于另一类工作。
另外有两个前提要说清楚:其一,规则数量很少的环境(比如只有二三十条)不必上完整的版本管理,把变更记在一份共享文档里就够;其二,如果平台本身不提供规则导出能力,那么这件事要从采购环节就提出来,事后补不了。
还有一点,动态基线的规则与固定阈值的规则不能用同一套办法管。动态基线是被数据训练出来的,它的"版本"其实是数据窗口和训练参数,不是一个人工设定的数字。这类规则的留痕重点在于:用的哪一段数据、什么时候重训、重训前后的告警差异有多大。
如果您正在梳理现网的告警规则,也不知道那两百多条规则里有多少条已经和业务脱了节,欢迎预约咨询,我们可以按上面这六样要素先做一轮清点。
