维护期间暂停告警应使用alertmanager静默功能,通过标签匹配和utc时间窗口精准屏蔽告警,支持web界面或api创建,需避免时区、标签值错误及混淆抑制规则。

维护期间暂停告警,核心是用 Alertmanager 的 静默(Silence) 功能,不是关掉规则或停掉 Prometheus,而是让符合条件的告警在指定时间段内不触发通知。关键在于“按标签匹配 + 时间窗口控制”,操作灵活、可逆、不影响监控数据采集。
静默规则怎么写才管用
静默不是全局关告警,而是精准屏蔽——靠标签(labels)匹配。比如你正在升级 MySQL 集群,只需让 job="mysql" 或 cluster="prod-db" 的告警静音,其他服务照常报警。
- 必须设置起止时间(UTC 时间),北京时间要 +8 小时;例如维护从今晚 20:00 开始,持续 2 小时,静默开始时间填
2026-06-18T12:00:00Z,结束填2026-06-18T14:00:00Z - Matchers 填写至少一个标签条件,多个条件是“且”关系;常用组合:
job=~"mysql|redis"、severity="critical"、instance="10.0.1.5:9100" - 描述字段建议写清楚原因,如“618大促后数据库主从切换维护”,方便团队追溯
两种创建方式:提前设好 or 出事再拦
推荐提前配置,避免维护一开始就被告警轰炸。但临时发现漏配,也能立刻补救。
-
Web 界面操作:访问 Alertmanager(通常是
:9093),点右上角 New Silence → 填时间、Matchers、描述 → Save。状态变为 Active 即生效 -
命令行创建(适合 CI/CD 集成):用 curl 调 Alertmanager API,例如:
curl -X POST http://alertmanager:9093/api/v2/silences \ -H 'Content-Type: application/json' \ -d '{ "matchers": [{"name":"job","value":"node_exporter","isRegex":false}], "startsAt": "2026-06-18T12:00:00Z", "endsAt": "2026-06-18T14:00:00Z", "createdBy": "ops-team", "comment": "host maintenance" }'
别踩这些坑
静默看似简单,但配错就等于“该响没响”或“不该响乱响”。
- 时间填错最常见:忘了转 UTC,结果静默提前结束或根本没启动
- 标签值写错:比如
job="node-exporter"写成job="node_exporter"(下划线 vs 连字符),匹配失败 - 误用抑制(inhibit)代替静默:抑制用于“一个告警触发后压住另一个”,不适用于计划性维护场景
- 静默未清理:维护完忘记删规则,导致后续真实故障也被屏蔽
验证是否真静音了
别只信界面状态,动手测一下:
- 手动触发一条匹配静默条件的告警(比如改 Prometheus 规则 for=1s,或用 curl 模拟推送)
- 去 Alertmanager 的 Silences 页面看对应条目状态是否为 Active,且 Alerts 页面里不应出现该告警
- 检查接收渠道(邮件/钉钉等)是否收不到通知,但 Prometheus UI 中该告警仍显示为 Firing —— 这才是正常表现











