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

如何为数据间断的Prometheus计数器指标配置故障告警

针对间断性任务失败指标的Prometheus告警配置

你的核心问题是仅任务失败时才推送的counter指标因数据间断,无法用常规rate/increase函数准确告警,以下是符合你需求的具体配置方案:

方案1:匹配你设想的告警逻辑

直接将你描述的逻辑转化为PromQL规则,判断当前有失败数据,且要么是首次失败、要么是新增失败:

groups:
- name: job_failure_alerts
  rules:
  - alert: JobFailureDetected
    expr: |
      exists(job_failure_counter[5m]) and (
        absent_over_time(job_failure_counter[10m:5m])
        or
        last_over_time(job_failure_counter[5m]) > last_over_time(job_failure_counter[10m:5m])
      )
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "任务失败告警"
      description: "任务{{ $labels.job }}出现失败,当前失败次数: {{ $value }}"

规则解释:

  • exists(job_failure_counter[5m]):确认最近5分钟内有失败指标推送(即当前存在失败记录)
  • absent_over_time(job_failure_counter[10m:5m]):检查5~10分钟前的时间段没有该指标数据,说明是首次触发失败
  • last_over_time(job_failure_counter[5m]) > last_over_time(...):对比最近5分钟和5~10分钟的指标最后值,counter递增说明有新增失败
  • for:1m:避免单次推送的抖动,确保告警持续1分钟后触发(可根据你的任务频率调整)

方案2:简化版(适合Pushgateway自动清理旧指标的场景)

如果你的Pushgateway配置了自动过期(比如通过X-Prometheus-Refresh-Interval请求头,或--pushgateway.delete-on-shutdown参数),旧的失败指标会被自动清理,此时可以直接用存在性判断:

groups:
- name: job_failure_alerts
  rules:
  - alert: JobFailureDetected
    expr: exists(job_failure_counter[5m])
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "任务失败告警"
      description: "任务{{ $labels.job }}出现失败"

适用场景:

任务失败推送后,Pushgateway会在任务恢复(不再推送)的一段时间后删除旧指标,此时exists能准确反映最近是否有失败发生。

关键注意事项

  • 确保Pushgateway的指标生命周期配置合理:如果没有自动清理机制,旧的失败指标会一直存在,导致告警误触发。建议在推送时添加X-Prometheus-Refresh-Interval: 300(单位秒),让Pushgateway在5分钟后自动删除未更新的指标。
  • 调整时间范围:上述规则中的5m、10m需根据你的任务执行频率调整,比如任务每小时执行一次,就将时间范围改为1h、2h。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:52:33