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

如何长期从CI收集多类型项目统计数据?

FPGA/嵌入式仓库批量管理Prometheus+Grafana指标追踪方案

针对FPGA硬件开发及嵌入式软件开发场景,管理100+仓库并批量实现硬件/软件指标的长期收集、关联、可视化及生命周期管理,结合GitLab集成的Prometheus与Grafana,给出以下实操解决方案:

核心指标关联与上报基础

所有CI作业上报指标时,必须通过GitLab预定义变量自动添加仓库关联标签,确保每条时序数据可追溯到具体仓库:

  • 必加标签:repo_namespace="$CI_PROJECT_NAMESPACE"、repo_name="$CI_PROJECT_NAME"、commit_sha="$CI_COMMIT_SHA"
  • 示例上报脚本(基于PushGateway):
# 上报FPGA LUT资源占用
echo "fpga_resource_usage{repo_namespace=\"$CI_PROJECT_NAMESPACE\", repo_name=\"$CI_PROJECT_NAME\", resource=\"lut\", commit_sha=\"$CI_COMMIT_SHA\"} 1234" | curl --data-binary @- http://pushgateway:9091/metrics/job/gitlab-ci/$CI_PROJECT_PATH
# 上报软件可执行文件大小
echo "software_binary_size{repo_namespace=\"$CI_PROJECT_NAMESPACE\", repo_name=\"$CI_PROJECT_NAME\", commit_sha=\"$CI_COMMIT_SHA\"} 56789" | curl --data-binary @- http://pushgateway:9091/metrics/job/gitlab-ci/$CI_PROJECT_PATH

问题1:Prometheus时序数据与Git仓库关联

通过上述强制添加仓库标签的方式实现,所有指标携带repo_namespace和repo_name标签,后续Prometheus查询、Grafana可视化均基于这两个标签过滤数据,确保指标与仓库一一绑定。

问题2:基于Git仓库权限设置统计数据访问权限

利用GitLab集成Grafana的OAuth认证与文件夹权限绑定:

  • 按GitLab组创建对应Grafana文件夹,将文件夹权限绑定到GitLab组的对应角色(开发者/维护者/所有者)
  • 创建通用仪表盘时,添加模板变量$repo_namespace和$repo_name,用户访问时只能看到自己有权限的仓库数据(Grafana会自动识别GitLab用户的权限范围)
  • 若需严格控制Prometheus层面的数据访问,可通过relabel_configs过滤掉用户无权访问的仓库标签,但更高效的方式是依靠Grafana的权限+变量过滤。

问题3:仓库推送数据时自动添加Grafana视图

推荐使用通用仪表盘+模板变量方案(适配批量场景):

  • 创建一个统一的FPGA/嵌入式指标仪表盘,配置$repo_namespace和$repo_name两个模板变量,变量数据源选择Prometheus的标签值
  • 用户访问仪表盘时,选择对应的仓库即可自动加载该仓库的所有指标,无需为每个仓库单独创建仪表盘
  • 若需专属仪表盘,可通过CI作业调用Grafana API,基于预定义JSON模板批量创建:将模板中的占位符{{repo_namespace}}和{{repo_name}}替换为当前仓库变量,调用/api/dashboards/db接口创建仪表盘并放入对应组文件夹。

问题4:仓库删除后清理旧数据

通过GitLab webhook+自定义清理服务实现:

  • 在GitLab组级别配置“项目删除”触发的webhook,指向自定义清理服务
  • 清理服务收到通知后,执行两步操作:
    1. 调用Prometheus API /api/v1/admin/tsdb/delete_series,删除带有对应repo_namespace和repo_name标签的所有指标
    2. 调用Grafana API /api/dashboards/uid/<dashboard-uid>,删除对应仓库的专属仪表盘(通用仪表盘无需处理)
  • 注意:Prometheus需开启--web.enable-admin-api参数以支持删除操作。

问题5:通过仓库内YAML文件完成配置

利用GitLab CI的模板机制实现:

  • 在中心仓库(如ci-templates)创建通用CI模板.gitlab-ci-fpga-metrics.yml,包含指标上报、仪表盘创建等作业
  • 仓库内仅需在.gitlab-ci.yml中添加include配置,即可继承所有逻辑:
include:
  - project: 'your-group/ci-templates'
    ref: main
    file: '.gitlab-ci-fpga-metrics.yml'

# 可选:仓库自定义配置,比如指定指标导出脚本路径
variables:
  FPGA_METRICS_SCRIPT: './scripts/export_fpga_metrics.sh'
  • 可额外添加.metrics-config.yml文件,定义当前仓库需追踪的特定指标(如跳过某些FPGA资源统计),CI作业读取该文件动态生成上报内容。

批量管理100+仓库的落地技巧

  1. 组级CI模板自动继承:在GitLab组的CI/CD设置中添加组级CI模板,组内所有仓库(含新增仓库)自动继承指标上报逻辑,无需手动配置
  2. API批量更新现有仓库:编写脚本调用GitLab API,批量为现有100+仓库添加CI模板include配置,一次完成批量部署
  3. 统一脚本中心维护:将硬件指标导出(如FPGA综合后资源统计)、软件指标导出(如二进制大小统计)的脚本放在中心仓库,CI作业统一拉取执行,确保所有仓库上报格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:30:51