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

如何处理Prometheus中类事件Gauge指标,实现工作流连续失败告警?

解决GitHub Actions工作流连续失败告警的优化方案

针对你提到的github-actions-exporter指标偏事件型、工作流改为按需触发后告警持续多日的问题,以下是几个实用的优化方案:

方案1:基于最近N次运行的连续失败判断(优先推荐)

因为每次工作流运行会生成独立的指标行,我们可以直接跟踪最近几次运行的状态,判断是否连续失败。示例PromQL(以连续3次失败为例):

count by (workflow, source_eks_cluster, repo) (
  topk(3, github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed'}) == 0
) == 3

逻辑说明:

  • topk(3, ...):取目标工作流最近完成的3次运行记录(按样本时间戳排序,对应实际运行时间)
  • 筛选出其中状态为0(失败)的记录,统计数量
  • 当数量等于3时,说明连续3次运行失败,触发告警

优势:

  • 适配按需触发的可变周期,无需依赖固定时间窗口
  • 只要有一次成功运行,topk结果会包含该成功样本,统计数量小于3,告警自动恢复,不会持续触发

方案2:利用最新运行状态+失败次数组合判断

如果需要兼顾“最新一次失败”和“累计失败次数”,可以结合last_over_time和count_over_time:

last_over_time(github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed'}[7d]) == 0
and
count_over_time(github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed', value='0'}[7d]) >= 3

逻辑说明:

  • 先判断最近7天内的最后一次运行是失败状态
  • 同时确认最近7天内失败次数不少于3次

适用场景:

  • 允许非连续失败,但需要累计达到一定次数才告警的场景

方案3:调整指标过期策略(需修改Exporter配置)

如果有权限修改github-actions-exporter的配置,可以设置指标的过期时间(比如24小时),让旧的运行记录自动被清理。之后用以下查询:

count by (workflow, source_eks_cluster, repo) (
  github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed', value='0'}
  unless
  github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed', value='1'}
) > 0

逻辑说明:

  • 仅当存在失败记录,且没有任何成功记录时触发告警
  • 旧记录过期后,只要有一次成功运行,告警会自动恢复

注意:

  • 过期时间需要根据业务场景设置,避免误删有效运行记录

方案4:通过记录规则预处理指标(优化查询性能)

如果需要频繁查询这类告警规则,可以先创建Prometheus记录规则,预处理目标工作流的最新运行状态:

groups:
- name: github_workflow_rules
  rules:
  - record: github_workflow:latest_run_status
    expr: |
      last_over_time(github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed'}[7d])
  - record: github_workflow:failed_run_count_7d
    expr: |
      count_over_time(github_workflow_run_status{repo='xxx/yyy', workflow='zzz', event='workflow_dispatch', status='completed', value='0'}[7d])

之后告警查询可以简化为:

github_workflow:latest_run_status == 0 and github_workflow:failed_run_count_7d >= 3

优势:

  • 减少告警查询时的计算开销,提升Prometheus性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:11:13