Мониторинг сайтов через Telegram и MAX
Данный плагин позволит отслеживать доступность ваших сайтов в панели ispmanager 6 через уведомления в Telegram и/или MAX.
Принцип работы
Принцип определения доступности сайта основан на отправке стандартного HTTP-запроса к серверу и анализу его ответа.
Процесс устроен следующим образом:
- Инициализация запроса. Скрипт формирует сетевой запрос к проверяемому домену по протоколу HTTP, при этом в заголовках передается уникальный заголовок User-Agent: ispmanager-SiteMonitor/1.0, чтобы эти запросы можно было легко идентифицировать в логах веб-сервера.
- Замер времени (Response Time). Перед самой отправкой фиксируется точное время старта, после получения ответа время фиксируется повторно, разница между ними переводится в миллисекунды; данные отображаются в столбце Response Time.
- Анализ HTTP кода ответа (Status). Сайт считается доступным (статус "up"), если удаленный веб-сервер вернул один из следующих кодов:
- 200 OK - Сайт доступен.
- 301 и 302 - Присутствует перенаправление (на HTTPS или другую страницу), но сам веб-сервер отвечает.
- 401 Unauthorized и 403 Forbidden - Доступ к странице ограничен (паролем или настройками сервера), но сам веб-сервер и сайт доступны.
- 404 Not Found - Искомая страница не найдена, но сам веб-сервер и сайт доступны.
- Фиксация недоступности. Сайт признается недоступным (статус "down"), если:
- Произошла сетевая ошибка: домен не разрешается в сети (не привязан к IP-адресу) или нет связи с веб-сервером.
- Истекло время ожидания проверки доступности: например, если веб-сервер не прислал ответ за 10 секунд, скрипт разрывает соединение.
- Сервер вернул критическую ошибку: 500 Internal Server Error, 502 Bad Gateway или 504 Gateway Timeout.
Установка
Для отправки уведомлений в MAX необходимо установить на сервере сертификат Минцифры.
Для установки потребуется скачать и разместить файлы плагина:
- Скачайте файл ispmgr_mod_sitemonitor.xml и поместите его в каталог
/usr/local/mgr5/etc/xml/ - Скачайте файлы handler.py и sitemonitor_cron.py и поместите их в каталог
/usr/local/mgr5/addon/ - Для файлов handler.py и sitemonitor_cron.py выставьте права
755в атрибутах файлов или выполнив команду:
chmod 755 /usr/local/mgr5/addon/handler.py /usr/local/mgr5/addon/sitemonitor_cron.py
Чтобы проверка сайтов выполнялась автоматически, создайте задание в планировщике CRON:
(crontab -l 2>/dev/null; echo "* * * * * /usr/local/mgr5/addon/sitemonitor_cron.py >/dev/null 2>&1") | crontab -
После перезапустите ядро панели, выполнив команду:
pkill core
Статусы сайтов будут хранится в автоматически создаваемом файле state.json, а настройки плагина в аналогичном файле config.json. Оба файла будут созданы в том же каталоге, что и sitemonitor_cron.py.
После установки, настройки плагина будут доступны в разделе Управление сайтами - Site Monitor.

Для актуальности статусов, задание должно выполняться достаточно часто, например каждые 5 минут.
Настройка
Для включения сайтов в мониторинг, выберите сайты из списка и нажмите на кнопку с изображением лампочки с галочкой.

В столбце Monitoring State будет отображен статус мониторинга сайта.
Настройки проверки доступности и настройки уведомлений в мессенджеры Telegram и MAX доступна по кнопке с изображением шестеренки.

Настройки проверки доступности включают в себя:
- Check interval (sec) - интервал между проверками доступности в секундах;
- Timeout (sec) - длительность ожидания ответа от сайта в секундах, после которого будет считаться, что сайт недоступен;
- Retry count - количество попыток проверки доступности, если достигнут таймаут.
Настройки для мессенджеров одинаковы и содержат обязательные поля:
- Bot Token - токен бота, который будет отправлять уведомления;
- Chat ID - ID вашего с ботом чата, в который будет отправляться уведомления.
Пример уведомлений о недоступности двух сайтов и восстановления доступа к ним.
