如何在Prometheus alert rules中使用条件运算符设置severity等级
Prometheus 告警规则按环境动态设置severity的实现方法
Prometheus 原生告警规则的labels字段不直接支持类if的条件判断语法,你可以通过以下两种常用方案实现需求:
方案1:拆分两条告警规则(最推荐,易维护易调试)
分别匹配生产和非生产环境,各自定义对应severity等级即可:
# 生产环境CPU高负载告警,级别critical - alert: CPULoad_Prd expr: expression_used_to_check_load and env == "prd" for: 15m labels: severity: critical annotations: summary: 生产环境CPU负载过高 description: "实例{{ $labels.instance }}CPU负载持续15分钟超过阈值" # 非生产环境CPU高负载告警,级别warning - alert: CPULoad_NonPrd expr: expression_used_to_check_load and env != "prd" for: 15m labels: severity: warning annotations: summary: 非生产环境CPU负载过高 description: "实例{{ $labels.instance }}CPU负载持续15分钟超过阈值"
方案2:动态生成severity标签(适合不想拆分规则的场景)
用PromQL的label_replace函数结合布尔运算,动态给指标加上severity标签,可实现单条规则完成条件判断:
- alert: CPULoad expr: label_replace( expression_used_to_check_load, "severity", "critical", "env", "prd" ) or label_replace( expression_used_to_check_load, "severity", "warning", "env", ".+" ) for: 15m annotations: summary: "{{ $labels.env }}环境CPU负载过高" description: "实例{{ $labels.instance }}CPU负载持续15分钟超过阈值"
注:该写法中
or运算符会优先匹配前面的生产环境规则,生产环境匹配到critical标签后不会再走后面的非生产匹配,完全符合你需要的条件判断逻辑。
内容的提问来源于stack exchange,提问作者rschirin
相关产品推荐
相关产品推荐

