如何在Prometheus告警表达式中使用标签名编写触发条件
Prometheus告警规则报错问题解析
错误原因
- 核心语法错误:
expr字段仅支持标准PromQL查询语句,不支持Go模板语法{{ }}。{{ $labels.xxx }}这类模板变量只能在告警规则的annotations、自定义labels字段中使用,直接写在查询表达式中会触发语法解析错误,就是你收到的unexpected left brace '{'报错的直接原因。 - 逻辑错误:你的需求是「延迟超过100秒」和「SEVERITY标签等于CRITICAL」两个条件同时满足触发告警,表达式中错误使用了或运算符
or,会导致只要满足任意一个条件就触发告警,不符合预期。同时单独将标签匹配作为表达式片段,也不符合PromQL的语法规范。
正确写法
直接在指标的标签筛选条件中指定SEVERITY匹配规则即可,不需要用到模板变量:
- alert: TestAppLatency expr: LATENCY{SEVERITY="CRITICAL"} > 100 # 以下为告警规则常规补充配置,可按需调整 for: 1m labels: severity: critical annotations: summary: "应用延迟超过阈值" description: "实例{{ $labels.instance }}当前延迟为{{ $value }}秒,超过100秒阈值"
如果你需要将两个条件分开写(比如多指标关联的场景),也可以用and运算符关联,效果完全一致:
expr: LATENCY > 100 and LATENCY{SEVERITY="CRITICAL"}
内容的提问来源于stack exchange,提问作者Ajay Sabarish
相关产品推荐
相关产品推荐

