如何监控GitHub Actions定时工作流?求Prometheus+Grafana方案
监控GitHub Actions定时工作流的告警方案
针对你的需求,结合现有Prometheus+Grafana+AWS栈,推荐以下几种简便方案,无需依赖CloudWatch发送指标:
方案1:通过GitHub API拉取状态,用Prometheus监控时间差
操作步骤
- 生成GitHub PAT:创建一个仅含
repo权限的Personal Access Token,用于调用GitHub Actions API。 - 部署自定义Exporter或用Blackbox Exporter:
- 若用Blackbox Exporter:配置HTTP probe调用
GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs接口,提取返回结果中最新运行记录的created_at字段,转换成时间戳。 - 若自定义Exporter:写一个简单脚本(比如Python),定期调用上述API,输出Prometheus格式的指标,例如:
github_actions_workflow_last_run_seconds{workflow="your-workflow-name"} 1699999999
- 若用Blackbox Exporter:配置HTTP probe调用
- Prometheus配置:添加scrape任务拉取这个Exporter的指标,然后编写告警规则:
(604800为一周的秒数)time() - github_actions_workflow_last_run_seconds{workflow="your-workflow-name"} > 604800 - Grafana告警:基于上述PromQL配置告警通知,可对接AWS SNS发送告警到邮箱、Slack等渠道。
优势
无需修改现有工作流,适合不想改动原有CI/CD逻辑的场景。
方案2:工作流运行时向Prometheus Pushgateway推送指标
操作步骤
- 确保Pushgateway已部署:如果你的Prometheus环境还没部署Pushgateway,直接在现有集群或AWS EC2上部署一个轻量服务。
- 修改GitHub Actions工作流:在工作流的最后成功步骤中,添加一个推送指标的任务,示例:
- name: Push run timestamp to Prometheus Pushgateway if: success() run: | CURRENT_TIMESTAMP=$(date +%s) curl -X POST http://your-pushgateway-url:9091/metrics/job/github-actions/workflow/your-workflow-name \ -d "github_actions_workflow_last_run_seconds $CURRENT_TIMESTAMP" - Prometheus配置:添加scrape任务拉取Pushgateway的指标,同样用方案1中的PromQL编写告警规则。
- Grafana告警:配置同方案1,对接AWS通知渠道。
优势
改动极小,仅需在工作流末尾加一步,无需维护额外的API查询服务,是最简便的方案。
方案3:AWS Lambda + GitHub API(备选)
如果想复用AWS现有服务,可部署一个Lambda函数,定期调用GitHub API查询工作流最后运行时间,将时间差指标推送到CloudWatch,再通过Prometheus的CloudWatch Exporter导入指标,最后配置告警。但这个方案步骤略多,不如前两个直接,适合已经深度绑定AWS服务的场景。
内容的提问来源于stack exchange,提问作者user15937765
相关产品推荐
相关产品推荐

