Мониторинг процессов на сервере — ключевой элемент для безопасности и стабильности работы всей системы. Даже если на сервере всего несколько процессов, бывает очень критично вовремя узнавать об их сбоях и недоступности, чтобы своевременно восстановить доступ. Для автоматического отслеживания удобно использовать специализированный под эти задачи сервис, такой как Monit — лёгкий, но при этом мощный инструмент, позволяющий не только отслеживать работу процессов (например, nginx, apache, mysql, postgres, redis, node, java) и перезапускать их автоматически, но и направлять уведомления об этом (например, в Telegram).

Сервис абсолютно не требователен, и даже минимальная конфигурация VPS от UltraVDS за 119 рублей в месяц будет для него избыточной.

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

Обновляем пакеты на сервере и устанавливаем Monit с помощью следующих команд:

sudo apt update

sudo apt install monit -y

Чтобы убедиться в успешной установке, выполним команду:

monit -V

Если в ответ увидите сообщение, начинающиеся с «This is Monit version», значит, установка прошла успешно и можно приступать к дальнейшей настройке Monit. Откроем основной конфигурационный файл с помощью команды:

sudo nano /etc/monit/monitrc

В нём нам необходимо найти следующие строки

set httpd port 2812 and

    use address 127.0.0.1

    allow localhost

    allow admin:monit

По умолчанию эти строки закомментированы. Нам необходимо раскомментировать их, убрав # в начале каждой из указанных строк. 

admin:monit — это логин и пароль, через которые мы будем подключаться к веб-интерфейсу. Пароль можно указать на своё усмотрение, но необходимо взять его в кавычки (например: allow admin:”monit”).

Сохраняем изменения и выходим из файла сочетанием клавиш Ctrl + X. Далее выполним команду:

sudo monit -t

Если всё настроено правильно, мы увидим сообщение «Control file syntax OK». После этого перезапускаем Monit с помощью команды:

sudo systemctl restart monit

И проверяем, что после перезагрузки Monit запустился и работает, с помощью команды:

sudo systemctl status monit

Если всё хорошо, мы увидим зелёную надпись «active (running)».

Первый шаг сделан — Monit установлен, и мы уже можем проверить статус процессов, за которыми он следит. Сделать это можно с помощью команды

sudo monit status

Однако следить за статусами таким образом не очень удобно (особенно если учитывать, что таких статусов могут быть десятки или сотни), поэтому проще воспользоваться веб-интерфейсом Monit. Чтобы получить к нему доступ, нам необходимо пробросить SSH-туннель. Для этого откроем новое окно в терминале/командной строке на своём ПК и выполним команду, указав IP-адрес настраиваемого сервера:

ssh -L 2812:127.0.0.1:2812 root@IP_СЕРВЕРА

Эта команда создаёт туннель между вашим локальным компьютером и сервером по порту. Теперь, введя в адресной строке браузера адрес http://127.0.0.1:2812, мы получим доступ к веб-интерфейсу Monit. Для авторизации в нём используем логин и пароль, которые мы ранее указывали в файле конфигурации (admin:”monit”).

В качестве примера добавим в Monit процесс nginx. Для начала устанавливаем его с помощью команды:

sudo apt install nginx

Проверить версию установленного nginx можно с помощью команды nginx -v. Теперь создаём файл конфигурации для nginx с помощью команды:

sudo nano /etc/monit/conf-enabled/nginx

И добавляем в него следующие строки:

check process nginx with pidfile /run/nginx.pid

  start program = "/usr/sbin/service nginx start"

  stop program  = "/usr/sbin/service nginx stop"

  if failed port 80 protocol http then restart

  if 5 restarts within 5 cycles then timeout

Первая строка конфигурации говорит Monit следить за процессом nginx. Вторая и третья строки отвечают за запуск и остановку nginx. Четвёртая строка проверяет доступность Nginx по порту 80 и, если он недоступен, Monit пытается перезапустить процесс. Последняя строка защищает от бесконечной перезагрузки (Monit попробует перезапустить nginx 5 раз и после остановится). По этому же принципу можно настроить мониторинг для любого другого процесса.

Сохраняем конфигурацию и выходим с помощью сочетания клавиш Ctrl + X. Перезапускаем monit командой:

sudo systemctl restart monit

Переходим в веб-интерфейс и видим, что у нас появился новый процесс nginx.

Настройка уведомлений в Telegram

Теперь можно перейти к настройке уведомлений о недоступности в Telegram. Для этого нам понадобится Telegram-бот (когда будет происходить сбой, он будет направлять нам уведомление). Находим в поиске Telegram @BotFather и отправляем ему команду на создание нового бота:

/newbot

Придумываем имя и username для бота (например, MonitTestbot и MonitTestUltrabot) и получаем API-токен, по которому Monit будет связываться с нашим ботом. Сохраняем его.

Также нам необходимо узнать свой chat_ID. Он необходим для настройки скрипта отправки сообщений. Чтобы его получить, находим нашего бота через поиск, запускаем его командой /start и пишем любое сообщение.

Затем открываем браузер и в адресную строку вводим:

https://api.telegram.org/bot<ТОКЕН>/getUpdates

Где <ТОКЕН> заменяем на API-токен, который мы получили и сохранили при создании бота. Переходим по ссылке и получаем примерно следующую информацию.

Значение id — это и есть необходимый нам chat_id. Сохраняем его и закрываем окно браузера. Вновь возвращаемся к нашему серверу и создаём скрипт для отправки сообщений. Для этого вводим команду:

sudo nano /usr/local/bin/monit-telegram.sh

И в открывшемся окне вставляем скрипт:

#!/bin/bash

TOKEN="ВАШ Telegram токен"

CHAT_ID="ваш chat_id"

TEXT="$1"

curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \

  -d chat_id="$CHAT_ID" \

  -d text="$TEXT"

В TOKEN указываем свой Telegram-токен, а в CHAT_ID свой id. Сохраняем и делаем файл исполняемым с помощью команды:

sudo chmod +x /usr/local/bin/monit-telegram.sh 

Скрипт настроен. Чтобы проверить, что он работает корректно, можно запустить его вручную с помощью команды:

/usr/local/bin/monit-telegram.sh "Привет из Monit!"

В кавычках указываем любое сообщение. Если всё настроено правильно, бот в Telegram пришлёт нам это сообщение.

Отлично, скрипт работает. Теперь осталось только настроить автоматическую отправку сообщения во время сбоя. Для этого вновь открываем файл конфигурации nginx командой:

sudo nano /etc/monit/conf-enabled/nginx

И в самом низу добавляем строку:

if not exist for 2 cycles then exec "/usr/local/bin/monit-telegram.sh 'NGINX не работает!!!'"

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

Сохраняем и перезапускаем Monit:

sudo systemctl restart monit

Теперь в случае, если nginx перестанет работать, мы автоматически получим об этом уведомление. Чтобы это проверить, можно вручную остановить nginx с помощью команды:

sudo systemctl stop nginx

После этого в течение 1-2 минут в Telegram придёт сообщение, которое мы указывали в файле с конфигурацией.

Вывод

Как мы могли убедиться, Monit — довольно удобный и эффективный инструмент для мониторинга процессов на сервере. По примеру с настройкой уведомления для nginx, можно легко настроить уведомления и для других процессов, указав для каждого свой текст и другие параметры. Благодаря наличию веб-интерфейса, вы можете быстро проверить статус всех отслеживаемых процессов, а в случае сбоя получить уведомление о нём в Telegram.

Комментарии (0)


  1. igrblkv
    30.10.2025 10:47

    Те-же самые скрипты, вид сбоку, но с веб-интерфейсом?

    PS: Может про Куму вторую написать, у Вас нету, вроде?


  1. Sleuthhound
    30.10.2025 10:47

    monit - это скорее для тех у кого 1-2 сервера и не хочется заморачитьсясь с монстрами типа zabbix

    Для тех у кого 10+ серверов одного monit будет мало, нужно будет общий сбор и управление инстансами и придется покупать платный M/Monit

    Когда-то давно использовал и monit и платный M/Monit - для небольшой компании нормально.

    С другой стороны для 1-2 серверов можно использовать Netdata, возможностей у нее гораздо больше чем у monit


    1. igrblkv
      30.10.2025 10:47

      monit - это скорее для тех у кого 1-2 сервера и не хочется заморачитьсясь с монстрами типа zabbix

      Мой случай, 1-2-3 сервера на Линуксе.
      Но проблема в том, что надо знать Линукс. А когда его знаешь - проще всё в Заббикс, там не только Линукс можно.

      С другой стороны для 1-2 серверов можно использовать Netdata, возможностей у нее гораздо больше чем у monit

      Погляжу, спасибо.