Устранение неполадок Cron с помощью Curl на Pushgateway (Прометей) - PullRequest
0 голосов
/ 14 октября 2019

Я тестирую 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.

1 Ответ

0 голосов
/ 14 октября 2019

Исправлено:

Команда service не вызывается из crontab. Я должен указать полный путь к ресурсу service при вызове его из cron, например /usr/sbin/service --options.

В этом контексте все работает нормально с y=$(/usr/sbin/service --status-all) вместо y=$(service --status-all) в моем services_list.sh скрипт.

...