如何在Prometheus Alertmanager中配置指定时间段触发的告警规则
Prometheus 仅指定时间范围触发告警配置方案
方案1:Prometheus告警规则嵌入时间判断(推荐)
该方案直接在告警触发条件中增加时间校验,非指定时间段不会生成告警事件,是最常用的实现方式。
核心逻辑是通过PromQL内置的hour()、minute()函数计算当前时间的分钟数总和,和目标区间做比对,再和原有告警条件做逻辑与绑定。
示例配置(每日09:15~15:30检测告警):
groups: - name: business-alert-rule rules: - alert: 业务指标异常告警 # 原有告警条件和时间判断用and关联 expr: (your_alert_expr) and ((hour() * 60 + minute()) >= 555 and (hour() * 60 + minute()) <= 930) for: 1m labels: severity: warning annotations: summary: "实例{{ $labels.instance }}指标异常" description: "当前值为{{ $value }}"
参数说明:
- 555是09:15对应的分钟总和:
9*60 +15 =555 - 930是15:30对应的分钟总和:
15*60 +30 =930 - 若使用东八区时区,需要把
hour()替换为hour(time() + 8*3600),对齐本地时间。
方案2:Alertmanager限制通知时间
如果需要Prometheus持续检测告警,仅在指定时间段发送通知,可以用Alertmanager的时间区间配置实现。
示例配置(Alertmanager v0.22及以上版本支持):
- 先定义时间区间
time_intervals: - name: trading-hours time_intervals: - times: - start_time: 09:15 end_time: 15:30 # 仅工作日生效则加下面这行,不需要可删除 weekdays: ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']
- 绑定到通知路由
route: group_by: ['alertname'] receiver: 'wecom-notify' matchers: - alertname = "业务指标异常告警" # 仅在指定时间区间发送通知 active_time_intervals: - trading-hours
特殊场景适配
如果是跨天的时间区间(比如22:00到次日06:00),把方案1的时间判断条件替换为如下即可:
((hour() * 60 + minute()) >= 1320 or (hour() * 60 + minute()) <= 360)
内容的提问来源于stack exchange,提问作者ARK
相关产品推荐
相关产品推荐

