Не так давно возникла необходимость простого мониторинга сервисов Docker, и одним из быстрых и легковесных решений является Monit (ну кроме собственных bash-скриптов ;) ). У Monit есть достаточно хорошая и понятная документация. Monit позволяет наблюдать за процессами и файлами (включая права доступа), а также реагировать в зависимости от условий - перезапускать сервисы/отдельные процессы. Кроме этого, Monit можно настроить для мониторинга cети (TCP, UDP) и отдельных веб-ресурсов. Кроме этого существует возможность использовать Monit для тестирования скриптов/программ, проверяя их вывод. Ну и самое простое - это мониторинг системных ресурсов (загрузка процессора/памяти/итд). Однако следует помнить, что для более сложного мониторинга (для больше чем одного сервера) лучше использовать другой продукт на свой вкус.
Основным конфигурационным файлом Monit является /etc/monit/monitrc для Linux. Начальные моменты, которые нужно настроить под себя:
set daemon 120 # Проверка всех сервисов с 2-х минутным интервалом (120s)
set alert sysadm@foo.bar # Отправлять на ящик все уведомления
set mailserver mail.bar.baz, # Основной почтовый сервер
backup.bar.baz port 10025, # Резервный почтовый сервер находится на порту 10025
localhost # Если не доступны - складывать почту локально
После того, как начальные моменты настроены - можно посмотреть примеры проверки сервисов в этом же конфигурационном файле. После этого, можно создавать кастомные проверки в специально заданной директории:
include /etc/monit/conf.d/*
Кроме этого, у Monit существует web-интерфейс, он также настраивается в конфигурационном файле:
set httpd port 2812 and
use address localhost # Прослушиваем адрес localhost
allow localhost # Разрешаем подключение только для localhost
allow admin:monit # Используем учетные данные для входа 'admin:monit'
Основные команды
1. Просмотреть список доступных команд:
monit --help
2. Просмотреть статус Monit:
monit status
3. Просмотреть короткий статус Monit:
monit summary
Примеры конфигураций мониторинга
1. Проверка работы контейнера Docker:
- /etc/monit/conf.d/docker_container_check
check program DOCKER_CONTAINER_NAME with path /var/scripts/check_vpn_server.sh
if status != 0 then exec "/usr/local/bin/monit2telegram"
- /var/scripts/check_vpn_server.sh
#!/bin/bash
sudo docker top "DOCKER_CONTAINER_NAME";
exit $?;
2. Проверка работы Postfix:
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
depends on postfix_rc
check file postfix_rc with path /etc/init.d/postfix
group mail
if failed checksum then unmonitor
if failed permission 755 then unmonitor
if failed uid root then unmonitor
if failed gid root then unmonitor
3. Проверка температуры CPU:
check program CPU with path "/usr/local/etc/monit/scripts/cpu_temp.sh"
if status > 60 then alert
group temperature
- /usr/local/etc/monit/scripts/cpu_temp.sh
#!/bin/sh
TP=`/sbin/sysctl -a | grep dev.cpu.0.temperature | awk '{print substr($2,0,2)}'`
#echo $TP
exit $TP
4. Проверка работы Pi-Hole:
{% gist 42703e7c5bfe314d973de17d559d609f %}
Тут можно обратить внимание, что некоторые из конфигураций мониторинга могут использовать внешние скрипты, для обработки и получения простых значений.
Больше примеров можно найти по ссылке Real-world configuration examples.
Заключение
Если сказать кратко - Monit может помочь тогда, когда нужен простой мониторинг, без резервного мониторинга, в условиях ограниченных ресурсов. Надежность подобного решения можно усилить (в условиях ограниченности ресурсов), если использовать бесплатные сторонние сервисы мониторинга, например как:
На этом все.