You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Opsgenie通知优先级配置Grafana动态标签?

Grafana动态设置Opsgenie告警优先级问题解决方案

问题描述

我在Grafana中配置了向Opsgenie发送告警的规则,Opsgenie通知设有P1-P5的优先级(P1最高),需通过og_priority标签设置该优先级。
当前监控的Prometheus指标date_event{role="worker"}返回Unix时间戳,需求为:

  • 当告警因时间戳超过3分钟(即time() - date_event{role="worker"} > 180)触发时,og_priority设为P5
  • 当告警因时间戳超过5分钟(即time() - date_event{role="worker"} > 300)触发时,og_priority设为P4

当前使用的Prometheus查询语句:

(time() - date_event{role="worker"}) > 180
or
(time() - date_event{role="worker"}) > 300

尝试过的动态模板表达式均未成功:
示例1:

{{ if gt $values.B.Value (time() - 5*60) }}P4{{ else if gt $values.B.Value (time() - 3*60) }}P5{{ end }}

示例2:

{{ if gt $values.B (time() - 5*60) }}P4{{ else if gt $values.B (time() - 3*60) }}P5{{ end }}

示例3:

{{ if gt (time() - date_event{role="worker"}) 300 }}P4{{ else if gt (time() - date_event{role="worker"}) 180 }}P5{{ end }}

解决方案

一、可行:通过Grafana模板表达式实现动态og_priority标签

Grafana支持用Go模板表达式动态生成自定义标签值,关键是要正确引用告警触发时的计算结果:

  1. 修改Prometheus查询:将时间差值作为独立指标暴露,方便模板引用,同时调整告警条件:

    time() - date_event{role="worker"} as delay
    

    在告警条件中设置两个判断:delay > 180 和 delay > 300(可通过Grafana告警规则的多条件配置实现)

  2. 配置动态标签模板:在告警的「自定义标签」中,给og_priority设置以下模板:

    {{ if gt $values.A.Value 300 }}P4{{ else if gt $values.A.Value 180 }}P5{{ end }}
    

    注意事项:

    • $values.A.Value 对应查询返回的delay数值,变量名要和查询的「Ref ID」匹配(默认是A、B,可在查询编辑界面查看)
    • 模板中不能直接执行PromQL查询,只能引用告警触发时已经计算好的数值
    • 可通过Grafana的模板预览功能验证表达式是否返回预期结果

二、备选:创建独立告警规则(更简单可靠)

如果动态模板调试遇到阻碍,直接创建两个无重叠范围的独立告警规则是更稳妥的选择:

  • 规则1(P5优先级):
    查询语句:time() - date_event{role="worker"} > 180 and time() - date_event{role="worker"} <= 300
    自定义标签:og_priority: P5
  • 规则2(P4优先级):
    查询语句:time() - date_event{role="worker"} > 300
    自定义标签:og_priority: P4
    这种方式避免了模板调试的复杂度,且能确保不同阈值触发对应优先级的告警,不会重复通知。

内容的提问来源于stack exchange,提问作者blazing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:33:18