- PVSM.RU - https://www.pvsm.ru -

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 1

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 2

Установка и настройка 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 [3]

    allow admin:monit

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 3

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

sudo monit -t

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

sudo systemctl restart monit

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

sudo systemctl status monit

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 4

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

sudo monit status

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

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 5

В качестве примера добавим в 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 [5]

  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-уведомления с Monit - 6

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

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

/newbot

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 7

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

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 8

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

sudo nano /usr/local/bin/monit-telegram.sh [7]

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

#!/bin/bash

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

CHAT_ID="ваш chat_id"

TEXT="$1"

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

  -d chat_id="$CHAT_ID"

  -d text="$TEXT"

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

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

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

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 9

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

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

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

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

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 10

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

sudo systemctl restart monit

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

sudo systemctl stop nginx

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

Спокойствие админа: автоматический мониторинг и Telegram-уведомления с Monit - 11

Вывод

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

Автор: ultra_vds

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/administrirovanie/435155

Ссылки в тексте:

[1] Monit: https://mmonit.com/monit/

[2] VPS от UltraVDS: https://ultravds.com/

[3] localhost: http://localhost

[4] http://127.0.0.1:2812: http://127.0.0.1:2812

[5] nginx.pid: http://nginx.pid

[6] https://api.telegram.org/bot<ТОКЕН>/getUpdates: https://api.telegram.org/bot<%D0%A2%D0%9E%D0%9A%D0%95%D0%9D>/getUpdates

[7] monit-telegram.sh: http://monit-telegram.sh

[8] https://api.telegram.org/bot$TOKEN/sendMessage: https://api.telegram.org/bot%24TOKEN/sendMessage

[9] Источник: https://habr.com/ru/companies/ultravds/articles/960846/?utm_source=habrahabr&utm_medium=rss&utm_campaign=960846