告警去重先解决“同一条告警反复发”,告警收敛再解决“多条相关告警一起涌进来”,实际搭配顺序必须是先去重、后收敛、最后通知限流,顺序反了,要么重复告警把收敛窗口占满,要么把不同故障硬塞进一张工单。
告警去重和告警收敛的区别:一个管“同一条”,一个管“多条相关”
很多人把这两个词混着用,实际落点完全不同,告警去重处理的是同一条告警因为采集抖动、监控项重复、检查间隔过短而反复触发,告警收敛处理的是同一时间窗口内,不同实例、不同指标但指向同一故障的多条告警。
打个比方:一台数据库服务器内存使用率超过90%,如果监控每30秒检查一次,10分钟内可能产生20条一模一样的“内存使用率高”告警,去重就是把这20条压成1条,如果同时这台服务器上的慢查询告警、连接数告警、磁盘IO告警也一起触发,收敛就是把这4类告警合并成“数据库服务器异常”一条工单,而不是让值班人员收到4条不同通知。
| 维度 | 告警去重 | 告警收敛 |
|---|---|---|
| 处理对象 | 同一条重复告警 | 多条相关告警 |
| 核心动作 | 丢弃重复、只留一条 | 聚合、归并、抑制 |
| 典型配置 | 指纹、时间窗口、状态翻转 | 时间窗口、拓扑关系、业务标签 |
| 失败后果 | 刷屏、值班麻木 | 告警碎片化、漏判影响面 |
| 常见位置 | 监控系统采集层、通知网关 | 告警路由层、工单系统 |
行业共识认为,告警治理的起点不应该是加人值班,而是先把通知链路里的“噪声”去掉,去重和收敛各有分工,少了任何一层,都会让另一层效果打折。
监控告警太多怎么处理?先去重,后收敛,再用通知限流
生产环境里告警太多,多数情况下不是监控项太多,而是同一个故障被拆成了几十条通知,处理顺序要固定:先做去重,再做收敛,最后对通知人做限流。
服务器告警去重配置的三种常用方法
- 指纹去重:把
alertname + instance + service拼成一个唯一指纹,相同指纹在未恢复前只产生一条活跃告警,例如Prometheus Alertmanager的和Zabbix触发器的事件关联都依赖这个思路。
group_by
- 时间窗口去重:同一指纹在指定时间内不重复发送,Alertmanager里的
repeat_interval就是干这个的,设置为4h表示同一条告警4小时内最多提醒一次。 - 状态翻转去重:只在告警从“正常”变成“异常”时发通知,持续异常期间不发重复提醒,恢复时可以发一条恢复通知,也可以选择不发,把
send_resolved设为false能明显减少夜间消息。
去重配置实操:Prometheus Alertmanager片段
route:
group_by: ['alertname', 'instance', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receivers:
- name: 'default'
webhook_configs:
- url: 'http://alert-gateway:8080/webhook'
send_resolved: false
这段配置的意思很直白:同一alertname + instance + service先归到一组,等30秒再发,组内后续新增告警每5分钟追加一次,同一条告警4小时内不重复提醒,恢复事件不推送,避免凌晨恢复一条、早上又恢复一条的刷屏。
Zabbix用户可以在触发器里配置“事件成功关闭时发送消息”,并把“重复发送间隔”从默认几分钟拉长到几小时,如果已经在企业微信里被重复消息折磨,先把这一步做完,告警量通常会明显下降。
运维告警降噪怎么做:告警收敛必须跟在去重后面
去重只能把相同告警压下来,但一个真实故障往往会触发一批不同指标,例如云主机宕机,可能同时出现ping不可达、agent失联、业务健康检查失败三条告警,如果不去重直接收敛,这三条会被合并,但窗口期里还混着重复告警,收敛结果会非常乱。
告警收敛策略有哪些
- 时间收敛:设定10秒到60秒的聚合窗口,窗口内的告警合并成一批发送,窗口越短,时效越强;窗口越长,噪声越少。
- 拓扑收敛:按交换机、机柜、集群、地域机房聚合,例如上海机房一个交换机下的10台服务器都不可达,就发一条“上海机房某交换机下10台服务器失联”。
- 业务影响收敛:按
聚合,把同一业务的数据库、缓存、接口、队列告警合成一张工单。
service + team + severity
- 关系抑制:高等级告警触发时,低等级关联告警不通知,例如数据库主库宕机,从库延迟高就不再单独发通知。
搭配顺序为什么不能反
先收敛会带来两个问题:
- 重复告警占用收敛窗口,真正的关联告警被挤到下一批,响应延迟扩大。
- 去重指纹还没建立,收敛结果里会出现同一条告警的多个时间点,导致工单内容混乱。
所以落地时把去重放在接收网关,收敛放在路由层,通知限流放在最外层,这个顺序本身就能解决相当一部分“告警太多”的问题。
企业微信告警收敛怎么做不刷屏?机器人消息合并与路由
企业微信告警收敛是很多小团队最先感知到的痛点,群机器人一天发几百条,值班人员从“每条都看”变成“一条都不看”。
机器人消息合并的实用配置
在企业微信机器人前面加一层网关,或者直接用Alertmanager的group_by配合企业微信Webhook,可以做到:
- 同一服务同一主机的告警,第一条发完整内容,后续只更新计数,不再单独推消息。
- 同一时间窗口内的多条不同指标告警,合并成一条卡片消息,第一行写“影响实例数”,第二行写“触发时间与持续时长”,第三行写“处置入口链接”。
- 低级别告警不实时推企业微信,改由监控系统每早发一份汇总。
Message格式可以这样设计,不要写长段落:
[支付网关-高危] 影响实例:3台 触发时间:10:32 持续:12分钟 入口:https://oncall.local/incident/3421 涉及告警:接口超时、DB连接数、MQ积压
这种短结构一眼能判断影响面,不需要点开一堆消息。
配合地域与人员的收敛路由
多地域部署时,告警不要全部汇总到一个群,可以在路由规则里按dc或region标签分流:北京机房的告警推到华北值班群,华东机房的告警推到上海值班群,这样能避免一个地域的网络抖动让另一个地域的值班人员被无关告警打扰。
告警去重和告警收敛如何搭配:一套可复制的落地流程
把前面的策略串起来,可以形成五步流程,每一步都能在主流开源监控栈里落地,不需要采购额外商业系统。

- 统一标签:给所有告警打上
team、service、severity、region、instance,没有统一标签,后面去重和收敛都无从谈起。 - 接入去重网关:Alertmanager、Grafana OnCall、夜莺等工具都可以在入口做指纹去重,重复告警只更新活跃计数。
- 设置收敛窗口:根据业务等级设置不同窗口,核心业务30秒,一般业务60秒,日志类告警5分钟。
- 通知限流:对每个接收人设定10分钟内最多接收的告警条数,超过部分进入汇总队列,非工作时间只保留高危通知。
- 每周复盘:统计重复告警占比、收敛后通知条数、有效告警占比,用这三项指标判断策略效果,而不是只看“告警数量降了”。
一个常见错误是:直接给所有人配“静默”策略,告警确实少了,但真实故障也没人响应,正确的降噪不靠静默,而靠去重和收敛把重复和关联合并掉,让剩下每条通知都值得看。
Q&A:告警去重和告警收敛如何搭配的常见疑问
告警去重和告警收敛的区别是什么?
告警去重针对同一条告警反复触发,用指纹、时间窗口或状态翻转压掉重复通知,告警收敛针对同一时段多条不同告警,按时间、拓扑、业务影响合并成一条工单,两者一个减少“条数”,一个减少“碎片”,先做去重再做收敛效果最好。
监控告警太多怎么处理最省事?
先不要加人,也别盲目静默,第一步统一标签,第二步在Alertmanager配置group_by和repeat_interval做去重,第三步设置30秒收敛窗口,第四步按业务和地域路由到企业微信群,这套流程不用改变现有监控项,成本最低,见效最快。
企业微信告警收敛怎么做才能不刷屏?
把机器人消息从“一条告警一条消息”改成“一次收敛一条消息”,具体做法是在Alertmanager接收器前按service + instance分组,设30秒窗口,关闭恢复通知,低级别告警只进每日汇总,消息正文只保留影响实例数、触发时间、持续时长和处置入口,不写大段日志,这样企业微信里留下的每条消息都是需要处理的真实异常。