Мониторинг и управление сервисами с помощью Monit на Centos 7
Monit — это простая и не требующая большого количества ресурсов система мониторинга серверов, имеющая открытый исходный код. Monit может быть легко установлен на сервер или SSD VDS и после несложной настройки многие вопросы проверки работоспособности сервисов, анализа доступности ресурсов будут автоматизированы.
Рассмотрим простую задачу и установим monit на CentOS 7. Добавим репозиторий EPEL в список доступных:
1 2 |
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-7.noarch.rpm # rpm -ivh epel-release-7-7.noarch.rpm |
После этого традиционным и простым способом установим пакет monit:
1 |
# yum install monit |
Включаем автозагрузку, запускаем сервис и проверяем его состояние:
1 2 3 |
# systemctl enable monit # systemctl start monit # monit status |
Отлично, сервис работает, можно приступать к настройке. В CentOS 7 конфигурация описывается в файле /etc/monitrc. Проверим и отредактируем базовые параметры:
1 2 3 |
set daemon 30 # в режиме демона опрашивать сервисы каждые 30 секунд set logfile syslog # куда будет писаться лог set mailserver # настройка почтового сервера для отправки уведомлений |
Для удобства — включим встроенный вэбсервер. Смените пароль на более сложный!
1 2 3 |
set httpd port 2812 and allow 0.0.0.0/0 allow admin:monit # require user 'admin' with password 'monit' |
После изменения параметров не забудьте перезапустить monit:
1 |
# service monit restart |
Добавим несколько сервисов и параметров для мониторинга. Примеры конфигурации есть как в основном файле конфигурации, так и в официальной документации
Для удобства будем размещать конфигурационные файлы для сервисов в /etc/monit.d/, каждый в отдельном файле. Например, опишем в /etc/monit.d/httpd параметры проверки работоспособности вэбсервера Apache и действия в случае аномалий:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Monitor the apache webserver check process apache with pidfile /var/run/httpd/httpd.pid group www start program = "/usr/bin/systemctl start httpd" stop program = "/usr/bin/systemctl stop httpd" if failed host monit.layer6.net port 80 protocol http and request "/index.html" then restart if cpu is greater than 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 500 MB for 5 cycles then restart if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles then stop if 3 restarts within 5 cycles then timeout |
Алгоритм работы простой — запрашиваем страницу index.html с сайта monit.layer6.net. Если попытка неудачная — перезапускаем Apache. Также генерируются предупреждения или делается перезапуск в случае большой нагрузки на CPU, недостатка памяти или наличия большого количества процессов. Обращаем внимание — это пример, а не готовый рецепт решения всех вопросов с доступностью 🙂
Добавим проверку доступности MySQL-сервера, файл /etc/monit.d/mysql:
1 2 3 4 5 6 7 |
# Monitor MariaDB check process mysql with pidfile /var/run/mariadb/mariadb.pid group database start program = "/usr/bin/systemctl start mariadb" stop program = "/usr/bin/systemctl stop mariadb" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout |
Можно и нужно использовать monit для контроля использования системных ресурсов. Например, опишем в файле /etc/monit.d/space процедуру для проверки наличия свободного места на диске и информирования в случае необходимости:
1 2 3 |
#Space check check filesystem rootfs with path / if space usage > 85% then alert |
После смены конфигурации перезапустим еще раз нашу систему мониторинга и обновим интерфейс:
Проверим работу мониторинга. Для этого вручную остановим MySQL-сервер.
1 2 |
# service mariadb stop Redirecting to /bin/systemctl stop mariadb.service |
Проверяем журнальный файл нашей системы мониторинга:
1 2 3 4 5 |
[EST Nov 05 15:17:01] error : 'mysql' failed protocol test [DEFAULT] at [127.0.0.1]:3306 [TCP/IP] -- Connection refused [EST Nov 05 15:17:01] info : 'mysql' trying to restart [EST Nov 05 15:17:01] info : 'mysql' stop: /usr/bin/systemctl [EST Nov 05 15:17:03] info : 'mysql' start: /usr/bin/systemctl [EST Nov 05 15:17:38] info : 'mysql' connection succeeded to [127.0.0.1]:3306 [TCP/IP] |
Отлично, сервис перезапущен автоматически — это означает, что на Monit после правильной настройки можно переложить часть рутинных операций. Рекомендуем!