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

如何在Prometheus端实现HighCpuLoad告警每7天仅触发一次?

实现HighCpuLoad告警每7天仅触发一次(Prometheus端方案)

针对你的需求,我们可以直接在Prometheus的告警规则中添加时间窗口判断逻辑,无需修改Alertmanager的路由配置,完全保留原有按project_name标签转发到对应Slack频道的逻辑,同时确保HighCpuLoad告警每7天仅触发一次。

具体告警规则配置

修改你现有的HighCpuLoad告警规则,加入时间范围判断:

groups:
- name: vm_alerts
  rules:
  - alert: HighCpuLoad
    expr: |
      # 原有CPU负载告警条件:CPU使用率超过80%(持续5分钟由`for`字段控制)
      100 - (avg by (instance, project_name) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 80
      # 新增条件:过去7天内该实例+项目的HighCpuLoad告警从未触发过
      AND
      absent_over_time(ALERTS{alertname="HighCpuLoad", alertstate="firing", instance=~"$labels.instance", project_name=~"$labels.project_name"}[7d])
    for: 5m  # 可根据实际需求调整告警持续触发的阈值时间
    labels:
      severity: warning
    annotations:
      summary: "High CPU Load on {{ $labels.instance }}"
      description: "CPU load exceeds 80% for 5 minutes. This alert will only trigger once every 7 days per instance."

方案原理

  1. 原有告警逻辑:通过irate计算CPU空闲率,转换为使用率后判断是否超过阈值,for字段确保告警持续触发一段时间才会被发送。
  2. 时间控制逻辑:
    • ALERTS是Prometheus内置指标,记录当前所有告警的状态(firing/resolved)。
    • absent_over_time(...)函数会检查过去7天内,对应instance和project_name的HighCpuLoad告警是否有过触发记录:
      • 如果过去7天内从未触发过该告警,函数返回1,满足条件,告警触发。
      • 如果过去7天内已经触发过该告警,函数返回0,不满足条件,告警不会重复触发。
    • 当7天周期结束后,过去7天的时间窗口不再包含上次触发记录,函数会再次返回1,允许告警重新触发。

优势与注意事项

  • 兼容性:完全保留Alertmanager原有路由配置,不会影响其他34种告警的正常转发逻辑。
  • 独立性:按instance和project_name分别控制告警频率,不同VM或项目的告警触发互不干扰。
  • 内置指标依赖:确保Prometheus的ALERTS指标处于启用状态(默认开启,无需额外配置)。
  • 灵活调整:如果需要修改周期,只需把[7d]改为其他时间单位(比如[3d]表示3天一次)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:31