Monit — компактный демон, который следит за процессами, портами, файлами и файловыми системами и умеет перезапускать службы при сбое. Ему не нужна база данных, Java или отдельный агент на каждом узле: один бинарник и текстовый конфиг. Для домашнего сервера или небольшой конторы этого достаточно, а тяжёлые системы мониторинга можно не поднимать.
Чем Monit отличается от Zabbix и Prometheus
Monit проверяет состояние и реагирует: перезапускает процесс, отправляет письмо, выполняет команду. Он не хранит метрики годами и не строит графики. Zabbix и Prometheus собирают историю и анализируют тренды, но требуют базы, агентов и обслуживания. Если задача — поднять упавший nginx и сообщить администратору, Monit решает её за пять минут.
Инструмент работает как служба systemd и сам запускает проверки по расписанию. В примерах ниже цикл задан в 60 секунд; без директивы set daemon Monit выполнит проверки один раз и завершится.
Установка
Пакет есть во всех основных дистрибутивах. В Debian и Ubuntu конфигурация лежит в /etc/monit/monitrc, в Fedora и Arch — в /etc/monitrc.
sudo apt install monit
sudo dnf install monit
sudo pacman -S monit
monit -V
Служба включается через systemd. Перед запуском проверьте конфиг: синтаксическая ошибка не даст демону стартовать.
sudo monit -t
sudo systemctl enable --now monit
systemctl status monit
journalctl -u monit -n 20
Минимальный конфиг
Файл состоит из глобальных настроек и блоков проверок. Начните с интервала, журнала и доступа к веб-интерфейсу только с localhost.
set daemon 60
set log /var/log/monit.log
set httpd port 2812 and
use address 127.0.0.1
allow admin:ChangeMe123
Права на файл должны быть строгими: не шире 0700, обычно 600, владелец root. Monit отказывается работать с конфигом, который могут прочитать другие пользователи, потому что в нём могут быть пароли. На Debian дополнительные проверки удобно складывать в /etc/monit/conf.d/ и подключать через include.
Проверка процесса
Для службы под systemd удобно указывать pidfile и команды управления через systemctl. Monit не должен дублировать автозапуск: если служба уже управляется systemd, проверяйте её и перезапускайте той же командой.
check process nginx with pidfile /run/nginx.pid
start program = "/bin/systemctl start nginx"
stop program = "/bin/systemctl stop nginx"
if failed port 80 protocol http request "/" then restart
if 5 restarts within 5 cycles then unmonitor
Строка if 5 restarts ... then unmonitor защищает от бесконечного цикла: после пяти перезапусков Monit перестаёт вмешиваться и шлёт предупреждение. Без неё сломанный конфиг приложения будет перезапускаться каждую минуту.
Порты и HTTP-проверки
Проверка порта подтверждает, что приложение не просто занимает память, а отвечает. Для HTTP можно запросить конкретный путь и сравнить код ответа.
check host gateway with address 192.168.1.1
if failed icmp type echo count 3 with timeout 5 seconds then alert
check process api with pidfile /run/api.pid
if failed port 8080 protocol http
request "/health" with status 200
then restart
Не ставьте проверку на тяжёлый эндпоинт: Monit будет дёргать его каждую минуту. Отдельный /health, который проверяет соединение с базой, — разумный компромисс.
Файловые системы и файлы
Заполнение диска и inode — частая причина тихих отказов. Monit предупредит заранее, если задать пороги.
check filesystem rootfs with path /
if space usage > 85% then alert
if inode usage > 90% then alert
check file sshd_config with path /etc/ssh/sshd_config
if changed checksum then alert
Проверка контрольной суммы полезна для конфигов и скриптов: любое изменение вызовет письмо. Не включайте её для файлов, которые постоянно пишутся, иначе получите поток уведомлений.
Для произвольного скрипта есть check program: код возврата 0 считается успехом. Расписание задаётся cron-выражением: строка every "0 * * * *" запускает проверку раз в час.
check program backup with path "/usr/local/bin/backup.sh"
every "0 * * * *"
if status != 0 then alert
Оповещения
Почта настраивается глобально. Для внешнего SMTP нужны логин, пароль и TLS; локальный sendmail подойдёт, если он уже настроен.
set mailserver smtp.example.com port 587
username "monit@example.com" password "ChangeMe456"
using ssl with options { version: tlsv12 }
set alert admin@example.com
set alert admin@example.com not on { instance, action }
Вторая строка отключает уведомления о каждом служебном действии, оставляя только ошибки. Шаблон письма задаётся через set mail-format, если нужно добавить имя хоста или ссылку на панель.
Проверьте доставку отдельно: openssl s_client -connect smtp.example.com:587 -starttls smtp покажет, проходит ли рукопожатие. Ошибки аутентификации видны в журнале Monit.
Веб-интерфейс
Панель на порту 2812 показывает состояние проверок и позволяет запускать действия. Наружу её открывать не нужно: достаточно localhost и SSH-туннеля.
ssh -L 2812:127.0.0.1:2812 user@server
sudo monit status
sudo monit summary
sudo monit restart nginx
Команды monit status и monit summary работают из терминала и не требуют браузера. Для управления отдельной службой используйте monit restart, monit stop, monit unmonitor и monit monitor.
Если панель не открывается, проверьте, что демон слушает нужный адрес: ss -ltnp | grep 2812. Журнал удобно смотреть в отдельном терминале через journalctl -u monit -f. Для отладки конфига запустите демон на переднем плане с monit -I и наблюдайте за решениями по каждому сервису.
Типичные ошибки
- Monit не стартует. Проверьте
monit -tи права на конфиг: файл должен быть600. - Служба перезапускается по кругу. Добавьте ограничение
if N restarts within N cycles then unmonitorи разберитесь в причине. - Письма не приходят. Смотрите журнал, проверяйте TLS и аутентификацию SMTP.
- Дублирование с systemd. Не позволяйте Monit запускать то, что уже запускает systemd, иначе получите конфликт.
- Ложные срабатывания. Увеличьте число циклов в условии, например
for 3 cycles.
sudo monit -t
sudo monit reload
sudo monit status
tail -f /var/log/monit.log
Итог
Monit закрывает базовую задачу: заметить сбой, перезапустить службу и сообщить администратору. Он ставится одним пакетом, настраивается текстовым файлом и почти не потребляет ресурсов. Для истории метрик и графиков он не подходит — там нужны Prometheus, Zabbix или Netdata. Разумная схема: Monit отвечает за живучесть сервисов, а систему мониторинга второго уровня держите для анализа трендов.