如何让Grafana Agent采集自定义脚本执行状态指标?
用Grafana Agent采集自定义脚本执行状态指标
不需要额外部署exporter或Web服务,直接用Grafana Agent内置的exec采集能力就能实现,步骤如下:
1. 编写状态检测脚本
创建一个Shell脚本(比如check_hourly_script.sh),用来检测success/fail文件的存在性,直接输出Prometheus格式的指标:
#!/bin/bash # 替换为你的实际文件路径 SUCCESS_FILE="/opt/scripts/success.txt" FAIL_FILE="/opt/scripts/fail.txt" # 失败状态优先级高于成功 if [ -f "$FAIL_FILE" ]; then echo "script_execution_status{job=\"hourly_script\"} 0" rm -f "$SUCCESS_FILE" # 清理冲突文件,避免状态混乱 elif [ -f "$SUCCESS_FILE" ]; then echo "script_execution_status{job=\"hourly_script\"} 1" rm -f "$FAIL_FILE" else # 脚本未执行或状态文件已被清理时的默认状态 echo "script_execution_status{job=\"hourly_script\"} -1" fi
给脚本添加执行权限:
chmod +x /opt/scripts/check_hourly_script.sh
如果需要检测XML文件内容,可在脚本里增加逻辑(比如用grep匹配成功标识),再输出对应指标值即可。
2. 配置Grafana Agent
根据你使用的Agent模式选择对应配置:
Flow模式(推荐)
在Agent的river配置文件(如agent.river)中添加以下组件,让Agent定期执行检测脚本并采集指标:
# 执行检测脚本,输出Prometheus指标 prometheus.exporter.exec "hourly_script_check" { command = ["/opt/scripts/check_hourly_script.sh"] interval = "1m" # 每分钟检测一次,确保及时获取状态 } # 采集上述指标并转发到Grafana后端 prometheus.scrape "default" { targets = prometheus.exporter.exec.hourly_script_check.targets forward_to = [prometheus.remote_write.default.receiver] } # 配置远程写入,替换为你的Grafana实例地址和认证信息 prometheus.remote_write "default" { endpoint { url = "https://your-grafana-instance/api/prom/push" basic_auth { username = "your-username" password = "your-password" } } }
传统模式
在Agent的YAML配置文件中添加scrape任务:
metrics: configs: - name: default scrape_configs: - job_name: 'hourly_script_check' scrape_interval: 1m exec: command: ["/opt/scripts/check_hourly_script.sh"] remote_write: - url: "https://your-grafana-instance/api/prom/push" basic_auth: username: "your-username" password: "your-password"
3. 在Grafana仪表盘添加状态面板
- 新建一个Stat或Gauge面板
- 面板查询语句:
script_execution_status{job="hourly_script"} - 配置值映射:
- 值
1→ 显示"成功",设置绿色标识 - 值
0→ 显示"失败",设置红色标识 - 值
-1→ 显示"未执行",设置灰色标识
- 值
- 面板标题设为"每小时脚本任务状态"
关键说明
- 无需使用any-json-to-metrics exporter,通过自定义脚本直接输出Prometheus格式指标,完全由Grafana Agent本地采集
- 检测脚本的逻辑可灵活调整,比如验证XML内容、脚本执行时间戳等,适配不同需求
- 调整
interval参数可控制状态检测的频率,确保状态变化能及时同步到仪表盘
内容的提问来源于stack exchange,提问作者threaderwharf
相关产品推荐
相关产品推荐

