в bash, debian, monitoring

Установка и настройка Monit в Debian Jessie

monit
Установка и настройка Monit в ОС Debian Jessie мало отличается от установки Monit в седьмой версии Debian (Wheezy), однако есть пару моментов, на которые стоит обратить внимание. Давайте разберемся!

Установка Monit с помощью менеджера пакетов:

sudo aptitude install monit

После успешной установки открываем конфигурационный файл /etc/monit/monitrc и вносим следующие правки в секции Global:

...
set daemon  10   #проверять сервисы с интервалом 10 секунд
...
...
set logfile /var/log/monit.log   #писать логи в отдельный файл
...
...
set mailserver localhost   #почтовый сервер для отправки алертов
...
...
set mail-format { from: monit@$HOST }    #меняем формат получаемых алертов 
set mail-format { Subject: monit alert -- $SERVICE - $EVENT -> $ACTION }
...
...
set alert alert@mydomain.com    #ящик для получения алертов
...
...
set httpd port 2812 and    #открываем доступ к web-интерфейсу 
      use address IP-ADDRESS    #с адреса IP-ADDRESS
      allow USER:PASSWORD    #и для пользователя USER с паролем PASSWORD
...

В этом же конфигурационном файле /etc/monit/monitrc можно описывать и сервисы, которые необходимо мониторить, но я предпочитаю помещать такие настройки в каталог /etc/monit/conf.d/. Рассмотрим конкретный пример — мониторинг web-сервера apache.

Переходим в каталог /etc/monit/conf.d/:

cd /etc/monit/conf.d/

Создаем файл apache:

touch apache

И, следуя официальной документации, приводим его к следующему виду:

check process apache with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop  program = "/etc/init.d/apache2 stop"

if totalmem > 1500.0 MB for 5 cycles then alert
if totalmem > 2000.0 MB for 5 cycles then restart

if children > 30 for 6 cycles then restart

Примечание. Не забываем убедиться, что .pid-файл действительно находится в том месте, которое указано после параметра pidfile.

Выполняем:

monit reload

И ожидаем, что все будет работать — ведь в Debian Wheezy это работало! Но когда требуется выполнить перезапуск web-сервера (в нашем примере — когда основной и дочерние процессы используют более 2 ГБ памяти либо когда дочерних процессов больше 30), то возникают проблемы — процесс переходит в состояние Active: active (exited) вместо Active: active (running).

Примечание. Вот что говорит об этом Google: «State active (exited) means that systemd has successfully run the commands but that it does not know there is a daemon to monitor.»

Когда процесс находится в Active: active (exited) — сайты работают, но остальные мониторинги (например, Zabbix) тревожно вопят, что web-сервер apache не запущен — это как минимум раздражает. Выяснилось, что все дело в новой системе инициализации (systemd-sysv) по умолчанию установленной в Debian Jessie.

Решается данная проблема довольно просто — приводим конфиг /etc/monit/conf.d/apache к следующему виду:

check process apache with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop  program = "/etc/init.d/apache2 stop"

if totalmem > 1500.0 MB for 5 cycles then alert
if totalmem > 2000.0 MB for 5 cycles then exec "/usr/local/sbin/apache2restart"

if children > 30 for 6 cycles then exec "/usr/local/sbin/apache2restart"

Создаем исполняемый файл /usr/local/sbin/apache2restart со следующим содержанием:

#!/bin/bash
`systemctl restart apache2.service`

Не забываем выполнить:

monit reload

После этого web-сервер apache корректно перезапускается и находится в «правильном» состоянии Active: active (running).

Добавить комментарий