首页 > 解决方案 > 在 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 上运行。

标签: bashcurlcrondebianprometheus

解决方案


固定的 :

该命令service不可从 crontab 调用。service从 cron 调用时,我必须提供资源的完整路径,例如/usr/sbin/service --options.

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


推荐阅读