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 отвечает за живучесть сервисов, а систему мониторинга второго уровня держите для анализа трендов.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте