Monit — установка из исходников и настройка

monit install settings

Monit — бесплатная утилита мониторинга с открытым исходным кодом, отличающаяся от программ-конкурентов низким потреблением системных ресурсов, а также простотой использования и настройки. Утилита способна вести наблюдение за системой уведомляя администратора о малейших отклонениях от заданных норм и правил.

При соответствующей настройке может останавливать потребляющие большое количество системных ресурсов процессы и перезапускать переставшие отвечать службы. Утилита обладает встроенным веб-интерфейсом, что позволяет отслеживать состояние сервера через браузер.

Monit понравился мне своей простотой и функциональностью, в связи с этим я решил написать эту статью.

Установка Monit из исходников

Я буду устанавливать последнюю версию Monit собирая ее из исходников. Для сборки нужно установить следующий набор утилит и библиотек.

Для самого Monit нужно установить библиотеки PAM, zlib и lib­ssl.

Скачиваем архив с исходниками.

Распаковываем архив и сразу переходим в распакованный каталог.

Собираем указав местонахождение конф. файла (--sysconfdir=/etc/monit).

Компилируем и устанавливаем. Я использую check­in­stall, который создает deb-пакет внутри каталога с исходниками и устанавливает его.

Создадим каталог для конфигурационных файлов.

Скопируем дефолтный конф. файл moni­trc из каталога с исходниками в /etc/monit.

Иногда Monit может ругаться на неправильные права доступа к файлу moni­trc.

Такое случается когда копируешь готовый конф. файл или создаешь его с нуля. Лучше всего сразу проверить разрешения и при необходимости установить в значение 0600.

Для добавления в автозагрузку и управления через sys­temd копируем monit.service из каталога с исходниками в /lib/systemd/system.

Добавим в автозагрузку и запустим.

Проверим.

Управление Monit

Управление Monit осуществляется с помощью набора команд, просмотреть который можно выполнив monit --help.

Основные настройки Monit

За настройки Monit отвечает конф. файл /etc/monit/monitrc. В файле содержится много примеров, все достаточно подробно описано, так что разобраться не составит труда.

Частота проверки сервисов

Устанавливаю частоту проверки в 120 секунд и задержку в 300 секунд. Monit начинает проверку сразу после загрузки, но поскольку не все службы успевают загрузиться одновременно, то первая проверка пойдет через пять минут после старта.

Задержка работает не только при старте, но и перезапуске Monit. Поэтому на время настройки этот параметр лучше всего закомментировать.

log, state, id — файлы

По умолчанию Monit отмечает все события в sys­log — это неудобно, поэтому я пишу логи в отдельный файл.

Чтобы лог-файл не разросся в размерах на весь диск, его нужно добавить в ротацию. В /etc/logrotate.d создадим файл monit и добавим в него следующее содержимое.

После сохранения настроек и перезагрузки Monit запускаем лог-файл в ротацию.

Изменим положение файлов monit.id и monit.state, которые по умолчанию создаются в домашнем каталоге пользователя после первого запуска.

Файл monit.id хранит уникальный идентификатор, а monit.state содержит информацию о состоянии мониторинга восстанавливая его после перезагрузки. Не забудьте удалить старые файлы после перезапуска.

Рассылка уведомлений

Для рассылки уведомлений можно использовать как локальный почтовый сервер, так и удаленный. Рассылку можно настроить даже через SMTP сервер Gmail. Меня вполне устраивает мой Post­fix и поэтому я устанавливаю значение local­host.

Если почтовый сервер недоступен, то все уведомления будут отключены. Чтобы этого не произошло и уведомления сохранялись для повторной доставки, следует включить очередь событий (even­tqueue).

Если очередь событий включена, то нужно указать каталог в котором будут храниться сообщения и установить максимальное количество сообщений для хранения.

Не забываем создать каталог /etc/monit/events.

Зададим адрес с которого будут приходить уведомления.

Напоследок я указываю два почтовых ящика. В документации рекомендуется указать именно два ящика, один для всех уведомлений, а второй только для критических, например когда упал один из сервисов (событие time­out).

HTTP/веб-интерфейс

Monit имеет HTTP-интерфейс, который можно использовать для просмотра состояния через браузер.

По умолчанию интерфейс настроен на local­host и 2812-й порт, и доступен по адресу:

Изменим настройки для возможности доступа с удаленных машин. Меняем "local­host" на ip-адрес своего сервера.

Чтобы разрешить доступ к интерфейсу с любых ip-адресов (без ограничений), меняем "local­host" на "0.0.0.0/0.0.0.0".

Доступ только с одного ip-адреса.

Соответственно для нескольких ip-адресов.

Для входа используется логин:пароль (admin:monit). Изменяем на свои значения.

После перезапуска HTTP-интерфейс будет доступен по адресу:

monit install from source

Подключение дополнительных конфигураций

Создадим каталог /etc/monit/conf.d — здесь будут находиться все остальные файлы с настройками.

Включаем содержимое каталога в общую конфигурацию.

В итоге у меня вышел вот такой файл с основными настройками.

Мониторинг общего состояния системы

Настроим проверку общих системных ресурсов, таких как: среднее значение загрузки системы, потребление процессора и памяти. Пример из конф. файла moni­trc.

Немного изменю настройки и сохраню в виде файла sys­tem в /etc/monit/conf.d.

Мониторинг файловой системы

За файловую систему отвечают следующие настройки (пример из файла moni­trc).

Переписываю настройки и сохраняю в виде файла filesys­tem в /etc/monit/conf.d.

Отдельное внимание стоит обратить на имя и расположение устройства за которым будет вестись наблюдение. У меня называется vg-lv_­root и находится в /dev/mapper/.

Список дисков можно просмотреть командой df -h.

Или по точке монтирования командой mount.

Проверка доступности отдельных служб

Примеры файлов можно найти в Wiki на странице Con­fig­u­ra­tion Exam­ples. Здесь есть готовые конфигурации практически на все случаи жизни, но это не значит что файлы можно слепо копировать и использовать. Иногда требуются правки.

SSH

Для ssh-сервера есть готовый файл, который пришлось немного поправить.

Скрипт в /etc/init.d у меня назывался ssh, а не sshd, поэтому я изменил файл.

Помимо проверки по pid-файлу, здесь еще есть проверка доступности ssh на 22-м порту.

Cron

Для мониторинга cron я использую такие настройки.

Также как и в случае с ssh мне пришлось исправить название pid-файла. В примере он назывался cron.pid, а у меня crond.pid.

Nginx

Для веб-сервера Nginx используется следующая конфигурация. Проверяем работу по наличию pid-файла, если сервер неактивен — перезапускаем скриптами из /etc/init.d/.

MariaDB

Для СУБД Mari­aDB используется похожая конфигурация. Проверяем по pid-файлу, если непорядок — перезапускаем.

PHP 7

Для php7-fpm — проверка по pid + дополнительная проверка sock-файла.

Прокси-серверы Tinyproxy и Dante

Для прокси-серверов Tinyproxy и Dante я использую такие настройки.

Выполним команду monit reload для применения настроек. Остановите все службы, которые были поставлены на проверку доступности, и если через некоторое время они будут запущены, то все настроено правильно.

Документация Monit.