bash - 在 Pushgateway (Prometheus) 上使用 Curl 对 Cron 进行故障排除
问题描述
我正在沿着 Prometheus 测试 Pushgateway,每分钟使用 crontab 触发的 bash 脚本和 curl 推送有关我的 VM 服务的简单数据。
我有两个 bash 脚本。第一个,通过 curlcpu_usage.sh
解析和发送有关ps -aux
命令的数据到 pushgateway:
#!/usr/bin/env bash
z=$(ps aux)
while read -r z
do
var=$var$(awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\", cpu=\""$3"\"}", $3z}');
done <<< "$z"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine
一切都很好,我的 crontab 每分钟将格式化的数据发送到localhost:9091
我的 pushgateway 实例。
现在,我正在尝试service --status-all
使用名为 的脚本发送命令的解析结果,这与services_list.sh
我处理脚本的方式完全相同cpu_usage.sh
:
#!/usr/bin/env bash
y=$(service --status-all)
while read -r y
do
varx=$varx$(awk '{print "services_list{service=\""$y"\"}", 1}');
done <<< "$y"
curl -X POST -H "Content-Type: text/plain" --data "$varx
" http://localhost:9091/metrics/job/top/instance/machine
当手动执行这两个脚本时,就像./cpu_usage.sh
和./services_list.sh
,一切都很好,Pushgateway 成功地从两个脚本中检索数据。
但是当我通过 CRON 传递这些调用时,只会cpu_usage.sh
向 pushgateway 发送数据(Pushgateway 上最后一次推送services_list
方法的时间戳保持不变)。
我的 crontab 语法如下:* * * * * cd /path/ && ./script.sh
脚本位于777
/中root:root
,crontab 始终以 root 身份编辑。我尝试将两个 scipts 连接到一个 bash 文件中,无论我放置它们的顺序如何,services_list
都不会对方法进行 curl 调用(但方法上一切正常cpu_usage
)。
我有点迷茫,因为这两个脚本非常相似,并且手动调用services_list.sh
工作正常。有什么想法吗 ?谢谢你。
使用 Pushgateway 0.10 在 Debian 9 上运行。
解决方案
该命令service
不可从 crontab 调用。service
从 cron 调用时,我必须提供资源的完整路径,例如/usr/sbin/service --options
.
在这种情况下,一切都在我的脚本y=$(/usr/sbin/service --status-all)
中运行良好。y=$(service --status-all)
services_list.sh
推荐阅读
- excel - 将同一列从多个工作表复制到新工作表
- android - Flutter 移动 UI 元素
- python - 如何在不单击“保存”按钮的情况下使用 Python 和 Selenium 自动下载文件?
- react-native - 如何在 react-native 中将标签插入到 ref 中?
- mod-rewrite - Apache2 重写规则导致 404
- python - 迭代一个列表以获取每个组的三个最高数字
- google-cloud-platform - 增加 google cloud shell 的磁盘存储空间?
- swift - 命令编译故事板失败,退出代码非零
- python - 循环并检查是否是刷新时间.. 线程是解决这个问题的方法吗?
- go - 无法将功能添加到接口