如何长期从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,指向自定义清理服务
- 清理服务收到通知后,执行两步操作:
- 调用Prometheus API
/api/v1/admin/tsdb/delete_series,删除带有对应repo_namespace和repo_name标签的所有指标 - 调用Grafana API
/api/dashboards/uid/<dashboard-uid>,删除对应仓库的专属仪表盘(通用仪表盘无需处理)
- 调用Prometheus API
- 注意: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+仓库的落地技巧
- 组级CI模板自动继承:在GitLab组的CI/CD设置中添加组级CI模板,组内所有仓库(含新增仓库)自动继承指标上报逻辑,无需手动配置
- API批量更新现有仓库:编写脚本调用GitLab API,批量为现有100+仓库添加CI模板include配置,一次完成批量部署
- 统一脚本中心维护:将硬件指标导出(如FPGA综合后资源统计)、软件指标导出(如二进制大小统计)的脚本放在中心仓库,CI作业统一拉取执行,确保所有仓库上报格式一致
内容的提问来源于stack exchange,提问作者Paebbels
相关产品推荐
相关产品推荐

