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

基于LGTM栈(Mimir+Grafana)收集GitHub Actions指标的最优方案咨询

收集GitHub Actions指标对接Mimir+Grafana的最优方案

针对你的场景,结合LGTM技术栈(Mimir+Grafana),推荐以下几种高效且可持续的方案,替代过时的第三方Action和冗余Webhook:

1. GitHub API定时拉取方案(首推)

自己实现定时采集逻辑,完全可控,不会依赖第三方工具的维护状态:

  • 核心思路:用一个自定义的GitHub Action定时触发,调用GitHub REST API批量拉取工作流运行数据,转换为Prometheus兼容格式后推送到Mimir。
  • 具体步骤:
    1. 创建一个专用的采集工作流(比如.github/workflows/metrics-collector.yml),设置定时触发(如每5分钟),也可结合工作流结束事件补充采集:
      name: GitHub Actions Metrics Collector
      on:
        schedule:
          - cron: '*/5 * * * *'
        workflow_run:
          workflows: ["*"]
          types: [completed]
      jobs:
        collect-metrics:
          runs-on: ubuntu-latest
          steps:
            - name: Fetch workflow runs
              env:
                GH_TOKEN: ${{ secrets.GH_PAT }}
              run: |
                gh api repos/${{ github.repository }}/actions/runs --per-page 100 --state completed > runs.json
            - name: Parse and push metrics to Mimir
              env:
                MIMIR_URL: ${{ secrets.MIMIR_REMOTE_WRITE_URL }}
                MIMIR_TOKEN: ${{ secrets.MIMIR_AUTH_TOKEN }}
              run: |
                # 用jq解析JSON,提取指标(需提前安装jq)
                jq -r '
                  .workflow_runs[] |
                  let duration = (.completed_at | fromdate) - (.started_at | fromdate)
                  in
                  "{\"timeseries\": [{\"labels\": [{\"name\": \"workflow\", \"value\": \"\(.name)\"}, {\"name\": \"status\", \"value\": \"\(.status)\"}, {\"name\": \"conclusion\", \"value\": \"\(.conclusion)\"}], \"samples\": [{\"value\": \(duration), \"timestamp\": \(.completed_at | fromdate)}]}]}"
                ' runs.json | while read -r metric; do
                  curl -X POST "$MIMIR_URL" \
                    -H "Authorization: Bearer $MIMIR_TOKEN" \
                    -H "Content-Type: application/json" \
                    -d "$metric"
                done
      
    2. 配置必要的Secrets:GH_PAT(带repo权限的个人访问令牌)、MIMIR_REMOTE_WRITE_URL、MIMIR_AUTH_TOKEN。
    3. 可根据需求调整采集范围(比如只拉取最近24小时的数据)、指标维度(添加分支、触发者等标签)。
  • 优势:自主可控,无第三方依赖;批量拉取减少请求冗余;灵活调整采集频率和指标维度。

2. 优化版全局Webhook方案

如果需要实时指标,可优化Webhook的冗余问题:

  • 核心思路:在仓库/组织级别配置一个全局Webhook,监听workflow_run事件,通过轻量中间服务解析事件并推送到Mimir。
  • 具体步骤:
    1. 在GitHub仓库/组织的Webhook设置中,添加一个新Webhook,选择workflow_run事件,指定中间服务的接收地址。
    2. 搭建中间服务(比如用Go/Python编写),接收Webhook请求,验证签名后提取工作流运行数据,转换为Prometheus指标格式,调用Mimir的远程写API推送。
    3. 中间服务可实现去重、聚合逻辑(比如合并同一工作流的重复事件),避免冗余推送。
  • 优势:实时性强,适合即时告警场景;全局Webhook减少单工作流配置冗余。

3. 工作流内置指标导出

在现有工作流中直接添加指标导出步骤,无需额外采集任务:

  • 核心思路:在每个工作流的结尾(无论成功失败),添加步骤计算当前运行时长、状态等指标,直接推送到Mimir。
  • 示例步骤:
    - name: Export workflow metrics
      if: always()
      run: |
        # 计算运行时长
        STARTED_TS=$(date -d "${{ github.event.workflow_run.started_at }}" +%s)
        COMPLETED_TS=$(date +%s)
        DURATION=$((COMPLETED_TS - STARTED_TS))
        # 生成Mimir兼容的指标数据
        METRIC_DATA=$(cat << EOF
        {
          "timeseries": [
            {
              "labels": [
                {"name": "workflow", "value": "${{ github.workflow }}"},
                {"name": "job", "value": "${{ github.job }}"},
                {"name": "status", "value": "${{ job.status }}"},
                {"name": "repo", "value": "${{ github.repository }}"}
              ],
              "samples": [
                {"value": $DURATION, "timestamp": $COMPLETED_TS}
              ]
            }
          ]
        }
        EOF
        )
        # 推送到Mimir
        curl -X POST ${{ secrets.MIMIR_REMOTE_WRITE_URL }} \
          -H "Authorization: Bearer ${{ secrets.MIMIR_AUTH_TOKEN }}" \
          -H "Content-Type: application/json" \
          -d "$METRIC_DATA"
    
  • 优势:指标与工作流运行强绑定,数据精准;无需额外定时任务或中间服务。

Grafana仪表盘配置

完成指标采集后,在Grafana中配置Mimir数据源,即可创建针对性的仪表盘:

  • 运行时长趋势面板:基于运行时长指标,展示不同工作流的平均/中位数时长变化。
  • 状态统计面板:用状态标签的计数,按成功/失败/取消状态分组展示。
  • 错误率面板:通过失败次数/总运行次数的计算逻辑展示错误率。
  • 最近失败工作流列表:结合GitHub API数据或日志,展示最近失败的工作流详情。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:42:13