半夜三点,手机突然疯狂震动,运维群里弹出十几条告警信息。你一个激灵从床上跳起来,连滚带爬打开电脑,结果发现是数据库在做例行维护——又是一场虚惊。
这种情况在开发和运维团队里太常见了。每次系统升级、数据库迁移或者服务器打补丁,监控系统就像条件反射一样疯狂报警。其实大家心知肚明:这会儿出点“异常”很正常,可告警还是照发不误。真正的问题被淹没在噪音里,反而可能错过。
什么是维护窗口期?
简单说,就是你提前规划好的“系统施工时间”。比如每周三凌晨1:00到3:00,固定做日志归档和依赖更新。这段时间内,部分服务响应变慢甚至短暂不可用,属于预期行为。
问题来了:能不能让监控系统“懂事”一点,别在这段时间瞎喊?答案就是——维护窗口期免告警配置。
怎么实现免告警?以 Prometheus + Alertmanager 为例
Alertmanager 支持通过 API 或配置文件设置静默(Silence)规则。你可以提前创建一条规则,在指定时间段内屏蔽特定标签的告警。
{
\"matchers\": [
{
\"name\": \"job\",
\"value\": \"mysql-backup\",
\"isRegex\": false
}
],
\"startsAt\": \"2025-04-02T01:00:00Z\",
\"endsAt\": \"2025-04-02T03:00:00Z\",
\"createdBy\": \"ops-team\",
\"comment\": \"weekly maintenance window\"
}
这条规则的意思是:在4月2日凌晨1点到3点之间,所有 job 标签为 mysql-backup 的告警全部静音。其他服务如订单系统、支付接口的告警照常通知。
更聪明的做法是结合自动化脚本。比如用 Cron 在每周三00:55自动调用 Alertmanager API 创建静默,03:05再发一条解除。整个过程无需人工干预。
别只盯着 Prometheus
Zabbix 也有“维护模式”,可以直接给主机或主机组设置维护时段。在此期间,该主机产生的触发器不会生成告警。
Grafana 的告警功能同样支持类似配置。在 Alert Rule 中加入 time condition 判断,比如:
IF
avg(last_5m) > 80%
AND
now() NOT BETWEEN '01:00' AND '03:00'
THEN alert
这样就排除了每天凌晨1点到3点的高负载误报。
如果你用的是云厂商的监控服务,比如阿里云云监控、腾讯云可观测平台,一般也能在控制台找到“屏蔽策略”或“告警静默”功能,操作更直观。
几个实用建议
维护窗口不是万能护身符。设置时注意几点:
范围要精准。别图省事把整个系统的告警全关了,万一其他模块真出问题就麻烦了。最好按服务、环境(如 pre-prod)、地域来细分。
时间宁短勿长。设定的时间段尽量贴近实际操作周期。多留缓冲可以理解,但拖太久等于裸奔。
记得留记录。无论是手动还是自动创建的静默规则,都要有日志可查。谁在什么时候屏蔽了什么,出了问题好追责。
测试不能少。新上的静默规则先在预发环境跑一轮,确认不会误杀关键告警。
有些团队还会在内部 IM 系统里加个机器人,维护开始前自动发消息提醒:“接下来两小时,API 网关延迟升高属正常现象,请勿惊慌。”这种小细节,反而最暖人心。