使用Pushgateway上的Curl对Cron进行故障排除(Prometheus)

时间:2019-10-14 08:54:49

标签: bash curl cron debian prometheus

我正在沿着Prometheus测试Pushgateway,每分钟通过crontab触发的bash脚本和curl推送有关我的VM服务的简单数据。

我有两个bash脚本。 第一个cpu_usage.sh解析并通过curl将关于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每分钟将格式化的数据发送到我的pushgateway实例localhost:9091

现在,我正尝试使用名为service --status-all的脚本发送services_list.sh命令的解析结果,这正是我处理cpu_usage.sh脚本的方式:< / p>

#!/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用户身份进行编辑。我已经尝试将两个scipt连接到一个bash文件中,无论我将它们放置的顺序如何,都不会进行services_list方法的curl调用(但是cpu_usage方法的一切正常)。

我有点迷茫,因为这两个脚本非常相似,并且在services_list.sh上进行手动调用可以正常工作。有什么想法吗 ?谢谢。

在Debian 9上使用Pushgateway 0.10运行。

1 个答案:

答案 0 :(得分:0)

Fixed :

无法从crontab调用命令service。从cron调用service资源时,我必须提供/usr/sbin/service --options资源的完整路径。

在这种情况下,我的y=$(/usr/sbin/service --status-all)脚本中的y=$(service --status-all)代替了services_list.sh,一切运行正常。

相关问题