HTTP monit — настройка Monit для сервера с веб-приложением на PHP


При настройке для проверки http Monit настраивают задавая параметры в отдельных скриптах в каталоге /etc/monit/conf.d/.



Проверка http Monit, контроль работы приложения на PHP


Каталог /etc/monit/conf.d/ подключается в /etc/monit/monitrc



Создадим скрипт, который будет контролировать основные  составляющие стэка. Их три: Nginx, PHP-FPM и MySQL.


mcedit /etc/monit/conf.d/web-server

check process nginx with pidfile /var/run/nginx.pid
group www-data
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
if failed host example.com port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout

check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed unixsocket /var/run/mysqld/mysqld.sock then restart
if 5 restarts within 5 cycles then timeout

check process php5-fpm with pidfile /var/run/php5-fpm.pid
start program = "/etc/init.d/php5-fpm start"
stop program = "/etc/init.d/php5-fpm stop"
if failed host example.com port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout

check file nginx-error with path /var/log/nginx/error.log
if match "^timed out" then alert


Файл разделен на блоки, каждый блок соответствует одному из компонентов. Задаются определенные проверки и определяются действия, которые предпринимает Monit если условия проверки оказались выполнены.



Проверка HTTP реализована за счет двух строк в блоке для Nginx.

Блок в целом определяет команды, которыми запускается веб-сервер, пользователя из под которого он работает. А также идентификатор /var/run/nginx.pid.

Если он перестал существовать — сервер не работает. Пакет при этом сформирует сообщение, которое уходит администратору.



HTTP проверяется за счет запроса к хосту и анализа ответа.


В примере это  example.com, при настройке имя нужно поменять на свое.

if failed host example.com port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout


Если Monit не смог получить ответ — он перезапускает службу. В случае разовых неполадок (большого количества накопившихся запросов) этого окажется достаточно.

При повторении ситуации во время следующей проверки Nginx снова перезапускается. Если 5 раз подряд сделать этого не удалось — попытки исправить ситуацию автоматически прекращаются.



Такая же логика задана и для PHP-FPM. Дополнительно проверяются логи Nginx. В /var/log/nginx/error.log ищутся вхождения вида «^timed out». Обнаруженные вхождения — даже если они единичны — требуют внимания, поэтому формируется alert.



Администратору при этом направляются уведомления на email.



Когда скрипт создан — файл требуется сохранить и перезапустить службу.

service monit restart



Читайте про базовую настройку Monit. При ней, в частности, указываются контактные данные администратора сервера, который будет получать уведомления.

Сказать спасибо