
告警疲劳(alert fatigue)在社区里的定义很冷静:值班人员被反复误报训练出条件反射,对分页先略过、再延后、然后忽略,真告警混在同样的模式里被一起放过去。近年关于 AIOps 降噪的讨论,争议点已经从"能不能压量"转向"压量的代价由谁承担":降噪解决噪音问题,覆盖(coverage)解决"每次用户可见故障至少产生告警"的问题,而剪掉告警的动作天然作用于后者。二者的张力,构成告警治理全部难度的来源。
与此同时,OpenTelemetry 语义约定的推进正在改变另一个前提。过去同一故障在不同监控系统里字段命名各异,跨系统聚合从起跑线就输在数据对不上;语义统一之后,同类告警有了可对齐的属性与单位,聚合的可行性在改善。但迁移本身也埋着陷阱:指标更名或单位变化后,旧阈值可能静默失配而不报错。噪音可以被压,覆盖必须守住——这条边界决定了后面每个环节的设计取舍。
降噪收益的机制来源,是把"需要人判断的告警条数"换成"需要人判断的事件数"。假设每条告警的独立判断成本近似恒定,收益就来自合并掉冗余判断:相同告警的重复上报交给字段去重,瞬时抖动交给防抖,维护窗口噪音交给时间屏蔽,同根因的告警串交给关联聚合,上游故障的下游传导交给依赖抑制。
容易被做偏的是聚合与去重的分工。去重针对单条告警的重复上报,字段一致才能合并;真正压垮值班的是字段各不相同、根因却相同的告警串——数据库连接池耗尽会同时引发应用侧错误响应增多、接口超时、健康检查失败、负载均衡摘除节点,各告警的对象与指标全不一样,靠哈希合并不掉。聚合解决的是"同一因",这也是聚合规则必须依赖业务与拓扑关系的原因。
机制 | 解决什么 | 失效条件 |
|---|---|---|
字段去重 | 相同告警的重复上报 | 字段不一致就合并不掉,跨系统同类告警需要别的手段 |
防抖抑制 | 指标瞬时抖动造成的假告警 | 把缓慢劣化误判为抖动,趋势性问题被掩盖 |
时间屏蔽 | 变更、割接、跑批窗口内的批量噪音 | 屏蔽必须带自动解除时限,否则变成漏报源头 |
关联聚合 | 同根因、不同对象与指标的告警串 | 依赖准确的业务与依赖关系,否则聚合结果不可信 |
依赖抑制 | 上游故障导致的下游传导告警 | 完全依赖 CMDB 拓扑准确性,拓扑错则抑制错 |
把产品名抽掉,市面上的处理路径可以归成若干类形态,差异集中在机制重心与上下文来源上。
维度 | 统一告警中心型 | 事件响应调度型 | 关联分析型 | 全栈可观测内置型 |
|---|---|---|---|---|
机制重心 | 汇聚存量监控告警,做收敛与分派 | 值班表、升级链路与响应流程 | 跨工具告警的拓扑与模式归并 | 在自身指标、日志、链路数据上做告警 |
降噪手段 | 去重、屏蔽、防抖、聚合、依赖抑制 | 去重、合并与抑制窗口 | 拓扑与历史模式关联归并 | 异常检测配合事件去重 |
上下文来源 | 联动 CMDB 补全负责人与业务归属 | 值班与升级链路信息 | 历史事件模式 | 同平台内的链路与日志 |
典型边界 | 聚合质量受 CMDB 准确度约束 | 承接告警而非治理告警 | 自身不采集,数据规范决定上限 | 成本随观测规模上升 |
形态之间不存在普适优劣,只有适配:告警散落在存量监控里时,统一告警中心型解决纳管问题;痛点在响应流程跑不顺时,事件响应调度型见效更快;告警规模庞大且数据规范时,关联分析型才有发挥空间;云原生体系内追求上下文一致时,全栈内置型的路径更短。
时间屏蔽忘记解除是漏报的常见来源:计划变更、网络割接、批量跑批期间的告警被人工关闭,关闭动作既没有时限也没有留痕,恢复时忘记重新打开。防抖的失效更隐蔽——把缓慢劣化误判为抖动,趋势性问题就被系统性掩盖。聚合的风险在于过合并:头部故障恢复后事件被关闭,恰好并行的另一起独立故障若被并进同一事件,会随头部一起从视野里消失。依赖抑制在拓扑不准确时会抑制错方向,把真信号当成传导噪音处理。
工程上的对策形状明确:每条抑制规则必须带自动解除时限;聚合后的告警保留子告警明细可下钻;支付、交易这类出错即损失的高后果路径豁免抑制,接受额外告警量作为代价;新规则先影子运行,对比与既有分页的分歧再固化。
降噪规则也是规则,同样需要维护。规则数量增长之后,规则会从解决问题的手段异化为新的问题:长期零触发的僵尸规则占用注意力,过时规则在新架构下变成过合并的来源,无留痕的调整让日后没人能解释某条阈值为什么设成这样。由此引出的治理要求很具体:每条规则有归属人、有编号、有创建原因、有失效条件,调整走工单留痕,按固定节奏复盘清理。
复盘看的是趋势而非单点数值:告警总量按来源与业务拆分、有效告警率、贡献噪音的头部规则清单、事后才被发现的故障条数、规则变更留痕的抽查结果。少数头部规则贡献了大部分告警,是普遍现象,也是复盘的杠杆所在——修掉头部规则,总量先降下来。另一个反直觉信号是升级触发次数:长期为零反而可疑,通常意味着升级策略没有真正生效。
关联聚合与依赖抑制的可信度,取决于业务关系与 CMDB 拓扑的准确程度。时钟不同步、字段命名不统一、缺少服务标签,会让因果链在排序时错乱;拓扑靠人工维护且长期不更新,抑制规则会把事件派给错误的团队。CMDB 尚不准确时并非无路可走:先打通告警对象到工单字段的映射,补全对象、负责人、业务归属,就能支撑基础的分派与去重;依赖抑制这类强依赖拓扑的能力,等关键业务域拓扑补齐后再逐步开放。
动态基线是同类问题的另一面。无监督异常检测算法(N-Sigma、EWMA、KDE、DBSCAN、孤立森林、LOF、OneClassSVM)能发现指标偏离常态,但不解释为什么偏离;输入是定义混杂的告警流时,算法可压缩的噪音上限受限。"什么算告警、谁该被叫醒"属于规则层的业务判断,算法替代不了这一步。
把上述代价摆完,结论可以带条件地写出来。当存量监控系统较多、告警散落各处、有效告警率低且漏报可以被度量时,先做告警定义与分流——必须有人动手吗、不动手会不会出事、值班员看到后知道该做什么,均回答肯定才进告警通道——再做收敛,AI 放在规则治理之后;在此顺序下,降噪收益大概率大于治理与维护成本。反过来,告警量尚未超出人工处理极限时,优先修阈值与路由,不必引入聚合层;高后果业务占比高、而 CMDB 长期不准确的组合下,强依赖拓扑的抑制收益可能小于漏报代价,应当推迟。
判断接入层是否称职有个朴素标准:新增告警源能否在页面上自行配置完成,而不需要改动平台代码。判断聚合层,则看值班员能否仅凭聚合事件的输出重建故障现场;重建不出来,说明抑制过深。
适用边界:告警总量小、单人可遍历的场景,治理收益低于维护成本;字段语义不统一的存量环境,应先做清洗与语义对齐,再谈跨系统聚合。
遗留问题:聚合规则的正确性难以离线验证,只能靠运行期分歧对比近似;语义约定迁移期的阈值漂移,目前缺少成熟的自动检测手段。
下一步验证:影子运行候选分组规则,统计与既有分页的分歧并逐条归因;用历史故障做反查,确认漏报没有随降噪上升;对每条抑制规则抽样复盘,确认被抑制的告警始终可以带原始上下文恢复查看。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。