如何在Zabbix中通过自动发现原型采集多GitLab Runner的Prometheus数据?
实现GitLab Runner自动发现的具体步骤
1. 修改Shell脚本,新增自动发现逻辑
在现有采集脚本中添加Runner ID自动发现分支,输出Zabbix要求的JSON格式数据(结构必须为{"data": [{"{#RUNNERID}": "xxx"}, ...]})。
示例脚本(假设文件名为gitlab_runner_monitor.sh):
#!/bin/bash PROMETHEUS_URL="http://<你的GitLab Runner Prometheus地址>:9252/metrics" case $1 in discover_runners) # 从Prometheus指标中提取唯一的Runner ID并格式化输出 runner_ids=$(curl -s "$PROMETHEUS_URL" | grep 'gitlab_runner_jobs.*runner_id' | awk -F 'runner_id="|"' '{print $2}' | sort -u) echo -n '{"data": [' first=1 for id in $runner_ids; do if [ $first -ne 1 ]; then echo -n ','; fi echo -n "{\"{#RUNNERID}\": \"$id\"}" first=0 done echo ']}' ;; get_metric) # 原有指标采集逻辑,接收Runner ID和指标名参数 RUNNER_ID=$2 METRIC=$3 curl -s "$PROMETHEUS_URL" | grep "gitlab_runner_${METRIC}.*runner_id=\"${RUNNER_ID}\"" | awk '{print $2}' ;; esac
给脚本添加执行权限:
chmod +x /path/to/gitlab_runner_monitor.sh
2. 配置Zabbix Agent的UserParameter
在Zabbix Agent的自定义配置文件(如zabbix_agentd.d/gitlab_runner.conf)中添加以下配置:
# 自动发现所有Runner ID UserParameter=gitlab.runner.discovery,/path/to/gitlab_runner_monitor.sh discover_runners # 采集指定Runner的指定指标,$1为指标名,$2为Runner ID UserParameter=gitlab.runner.metric[*],/path/to/gitlab_runner_monitor.sh get_metric $2 $1
重启Zabbix Agent使配置生效:
systemctl restart zabbix-agent
3. 在Zabbix模板中配置自动发现规则
3.1 创建自动发现规则
- 进入Zabbix前端,打开你的GitLab Runner模板,选择「自动发现规则」
- 点击「创建自动发现规则」:
- 名称:
GitLab Runner ID自动发现 - 键值:
gitlab.runner.discovery - 更新间隔:根据实际需求设置(如5分钟)
- 其余选项保持默认,点击「添加」
- 名称:
3.2 创建监控项原型
在上述自动发现规则下,为需要的指标创建监控项原型(以「活跃作业数」为例):
- 点击「监控项原型」→「创建监控项原型」
- 名称:
Runner {#RUNNERID} 活跃作业数 - 键值:
gitlab.runner.metric[running_jobs,{#RUNNERID}] - 类型:Zabbix客户端
- 信息类型:数字(浮点)
- 更新间隔:1分钟
- 其余选项按需配置,点击「添加」
- 名称:
重复此步骤可添加其他指标的原型,如pending_jobs、completed_jobs等,仅需修改键值中的指标名即可。
3.3 可选:创建触发器原型
若需为每个Runner设置告警规则(如活跃作业数超标):
- 点击「触发器原型」→「创建触发器原型」
- 名称:
Runner {#RUNNERID} 活跃作业数过高 - 表达式:
{你的模板名称:gitlab.runner.metric[running_jobs,{#RUNNERID}].last()}>5 - 严重级别:按需设置,点击「添加」
- 名称:
4. 验证配置
- 在Agent机器上手动执行自动发现命令,检查输出格式是否正确:
/path/to/gitlab_runner_monitor.sh discover_runners
正常输出示例:
{"data": [{"{#RUNNERID}": "10"}, {"{#RUNNERID}": "15"}]}
- 验证指标采集:
/path/to/gitlab_runner_monitor.sh get_metric 10 running_jobs
应返回对应Runner的活跃作业数值。
3. 在Zabbix前端等待自动发现执行后,查看关联主机的监控项,确认每个Runner的对应监控项已自动生成。
内容的提问来源于stack exchange,提问作者solick
相关产品推荐
相关产品推荐

