如何为含唯一标签的Prometheus事件指标配置1小时自动关闭告警?
事件类Prometheus指标的告警规则实现方案
核心告警规则代码
针对你的需求,直接通过指标存在性+时间戳判断实现告警触发与1小时自动关闭,无需依赖changes/increase这类衍生函数:
groups: - name: event_monitoring_alerts rules: - alert: EventTriggered # 表达式逻辑:匹配所有带UID标签的事件指标,且事件发生时间未超过1小时 expr: event_occurred{uid=~".+"} == 1 and time() - timestamp(event_occurred{uid=~".+"}) < 3600 for: 0m # 事件触发后立即告警,无延迟 labels: severity: warning annotations: summary: "事件触发: UID {{ $labels.uid }}" description: "唯一标识为{{ $labels.uid }}的事件已触发,告警将在1小时后自动关闭"
关键逻辑说明
- 规避衍生函数限制:直接匹配
event_occurred指标(替换为你的实际指标名)的存在性,只要指标存在且值符合条件(这里假设事件触发时指标值为1),就能触发告警,完美解决新指标无法被changes/increase识别的问题。 - 1小时自动关闭:通过
time() - timestamp(...) < 3600计算事件发生时长,当超过1小时后,表达式结果为false,Prometheus会自动将对应UID的告警标记为resolved状态,实现自动关闭。 - UID标签传递:在告警的
annotations中通过{{ $labels.uid }}直接引用指标的唯一UID标签,确保每条告警都绑定对应事件的标识。
适配调整建议
- 如果你的事件指标值不是固定为1,可将表达式中的
==1改为符合业务的判断(比如!=0)。 - 若应用生成指标时未显式设置时间戳,Prometheus会用采集时间作为
timestamp()的返回值,不影响整体逻辑。
内容的提问来源于stack exchange,提问作者Rumus
相关产品推荐
相关产品推荐

