Я тестирую Pushgateway вдоль Prometheus, каждую минуту отправляя простые данные об услугах моих виртуальных машин с помощью bash-скрипта и curl, запускаемых crontab.
У меня есть два bash-скрипта. Первый, cpu_usage.sh
, анализирует и отправляет данные о команде ps -aux
на pushgateway через curl:
#!/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 (временная метка последнего нажатия на метод services_list
на Pushgateway остается неизменной).
Мой синтаксис crontab такой: * * * * * cd /path/ && ./script.sh
Скрипты в 777
/ root:root
, crontab всегда редактируется как root. Я попытался объединить оба скипа в одном файле bash, и независимо от того, в каком порядке я их разместил, вызов curl для метода services_list
никогда не выполняется (но с методом cpu_usage
все в порядке).
Я немного растерялся, так как два скрипта очень похожи, а ручные вызовы на services_list.sh
работают нормально. Есть идеи ? Спасибо.
Запуск на Debian 9 с Pushgateway 0.10.