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

Prometheus组合告警规则不触发问题排查求助

问题:Prometheus组合告警规则无法触发排查

配置的告警规则

- alert: HostHighCpuLoadTSDB
  expr: (100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle",common_name="stg-tsdb-eks"}[2m])) * 100) > 5) and (hour() < 8 or hour() > 9)
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: Host high CPU load (instance {{ $labels.instance }})
    description: "CPU load is > 5%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

告警表达式

(100 - (avg by(instance) 
    (rate(node_cpu_seconds_total{mode="idle",common_name="stg-tsdb-eks"}[2m])) * 100) > 5) 
and (hour() < 8 or hour() > 9)

问题现象

  • 单独使用CPU负载条件表达式,告警可正常触发;
  • 单独使用时间条件表达式,告警可正常触发;
  • 测试时间为12点(满足hour() >9),且CPU负载已超过5%,但两个条件组合后告警无法触发。

环境信息

  • Prometheus版本:v2.41.0
  • Alertmanager版本:v0.25.0
  • 部署方式:通过Helm部署kube-prometheus-stack运行在Kubernetes集群

需求

CPU负载超过5%时触发告警,但排除8:00-9:00时间段。

问题原因及解决方案

原因

Prometheus的and运算符默认要求两边序列的标签完全匹配。hour()返回的时间序列没有任何标签,而CPU负载表达式的结果带有instance标签,两者标签集不匹配,导致and运算后没有符合条件的序列,因此告警无法触发。

解决方案

使用on()运算符忽略标签匹配,让两个条件仅做值的逻辑与判断,修改后的告警表达式如下:

(100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle",common_name="stg-tsdb-eks"}[2m])) * 100) > 5) 
and on() (hour() < 8 or hour() > 9)

验证

将修改后的表达式输入Prometheus的Expression浏览器,若能返回符合条件的instance序列,则说明配置正确,等待for:5m后告警即可正常触发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:08