Задача стоит следующая. Мониторить время работы службы в ОС Ubuntu.
Штатный инструмент Zabbix не позволяет собирать информацию о времени работы службы через элементы. В Windows — да, на Unix — нет.
Поэтому придется вопрос, как настроить мониторинг время работы службы Ubuntu кастомно.
В моем примере меня интересует служба mybot.service. Это какой-то бот на Pyton на сервере клиента.
Предположительно на сервере установлен Zabbix-Agent. В директории агента создам папку scripts и перейдем в нее.
1 2 3 |
cd /etc/zabbix mkdir scripts cd scripts |
Далее создаем сам файл скрипта uptime_mybot_service
1 |
nano uptime_mybot_service.sh |
Первоначальный вариант скрипта для отладки и проверки выглядит вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash # Получение даты и времени запуска службы start_time=$(systemctl show mybot.service --property=ActiveEnterTimestamp --value) # Проверка, запущена ли служба if [ "$start_time" != "" ]; then # Получение текущего времени в Unix timestamp current_time=$(date +%s) # Преобразование времени старта службы в Unix timestamp start_timestamp=$(date --date="$start_time" +%s) # Вычисление времени работы службы в секундах elapsed_time=$((current_time - start_timestamp)) echo "Время работы службы mybot.service: $elapsed_time секунд" else echo "Служба mybot.service не запущена" fi |
И сделаем файл исполяемым
1 |
chmod ugo+x uptime_mybot_service.sh |
Теперь проверим вывод информации
1 |
./uptime_mybot_service.sh |
И получаем вывод нашего скрипта. Все работает корректно. Я редактирую скрипт, чтобы осталось только время вывода секунд и если служба не запущена. То есть вывод у нас будет без текста и ковычек. Чтобы типа данных считался числовой, а не текстовый.
1 |
echo $elapsed_time |
И проверю вывод информации. Проверяю вывод.
Теперь нам нужно настроить заббикс на сбор этих данных. Переходим в каталог выше, нам нужно отредактировать zabbix_agentd.conf
1 2 |
cd .. nano zabbix_agentd.conf |
Ищем раздел UserParameter и добавим туда следующее содержимое
1 |
UserParameter=uptime_mybot[*], /etc/zabbix/scripts/uptime_mybot_service.sh |
Сохраняем файл и перезапустим Zabbix-Agent, чтобы применилась конфигурация.
1 |
systemctl restart zabbix-agent |
Теперь нам необходимо эту информацию собирать в заббиксе. Переходим в нужный хост, создаем элемента данных
- Название нашего элмента данных;
- Тип агента я предпочитаю активный. но есть оставить просто zabbix агент — все будет работать;
- Ключ вызова нашего скрипта;
- Числовой, целое число;
Время проверки делаем под свою задачу.
Элемент данных создан. Переходим в триггеры и создаем триггер на основе данных. Пример триггера.
Таким образом, если время работы служьы будет меньше 30 секунд — мы получим уведомелние.
Это решение не могу сказать правильным, но иногда приходиться его использовать, в целом рабочее.