Коротко о проекте
Мы разработали собственного бота для российского мессенджера MAX, который объединил уведомления Zabbix, сведения о состоянии серверов и сайтов, показания датчиков серверной и отдельный мониторинг файлов резервного копирования. Инженер получает информацию в одном интерфейсе, а часть типовых действий выполняет непосредственно из сообщения — без постоянного перехода в веб-панель мониторинга.
Решение выросло из практической задачи: резервные копии хранились в разных каталогах и на сетевых ресурсах, а контроль фактического появления файлов оставался ручным. Позже бот превратился в более универсальный инструмент для дежурных администраторов.
Исходная задача
В инфраструктуре используются физические и виртуальные серверы, а резервное копирование организовано несколькими способами. Нам нужно было видеть не только статус задания в программе резервного копирования, но и фактическое состояние файлов на хранилище: существует ли свежая копия, не слишком ли она мала, доступна ли папка и продолжает ли сам агент передавать отчёты.
Отдельной задачей стали уведомления о проблемах Zabbix: важно доставлять их ответственным сотрудникам, предоставлять им подходящие права и не превращать чат в бесконечный поток повторов.
Что реализовали
- Бот MAX с меню, кнопками, сценариями управления и разделением прав.
- Приём событий Zabbix через защищаемый секретом вебхук, фильтрация адресатов по ролям, хостам и тегам.
- Просмотр проблем Zabbix, статуса сайтов, перечня хостов и температуры в серверной.
- Действия с событиями Zabbix из MAX: подтверждение и, когда это разрешено настройками Zabbix, закрытие проблемы.
- Отдельный контур контроля файлов резервного копирования с параметрами для каждой папки.
- История проверок, ежедневная сводка, сообщения об ошибках и восстановлении нормального состояния.
- Очередь повторной доставки уведомлений Zabbix при временных сбоях связи с MAX.
Архитектура
На центральном Linux-сервере работает приложение Python/FastAPI. Оно принимает вебхуки MAX и Zabbix, обращается к Zabbix API, хранит конфигурацию и рабочие данные в SQLite и выполняет фоновые задания через APScheduler.
Источник | Назначение |
Zabbix → вебхук → бот → MAX | События мониторинга, маршрутизация уведомлений, действия по событиям через Zabbix API. |
Windows-агент → JSON-отчёт → бот → MAX | Проверка возраста и размера файлов, доступности папок и актуальности отчёта; отдельный от Zabbix канал данных. |
SQLite | Настройки папок и пользователей, текущее состояние, история проверок, журнал отправки, очередь недоставленных событий. |
APScheduler | Периодические проверки отчётов, ежедневная сводка, повторные попытки доставки событий. |
В используемой схеме агентский контур и подсистема Zabbix логически независимы: сервер Zabbix не выступает транспортом JSON-отчётов о резервных копиях. Их объединяет центральное приложение и единый пользовательский интерфейс в MAX.
Контроль резервных копий: не просто «задание завершено»
Для каждой папки задаются понятное имя, путь, максимально допустимый возраст последней копии и минимальный размер файла. Полученные от агента данные бот сопоставляет с индивидуальными порогами. Он различает нормальное состояние, устаревшую или слишком маленькую копию, ошибки доступа, некорректные данные, отсутствие папки в отчёте и недоступность самого источника отчётов.
Если проблема возникла, адресат получает уведомление с названием сервера и каталога и деталями проверки. После нормализации состояния бот может отправить отдельное сообщение о восстановлении. Повторные предупреждения ограничиваются интервалом; факт доставки учитывается отдельно для каждого получателя.
История проверок сохраняется в SQLite и помогает анализировать ситуацию задним числом. Ежедневный отчёт формируется по расписанию, которое можно менять из интерфейса бота. По умолчанию в коде предусмотрено время 18:00, но это параметр настройки.
Управление мониторингом через чат
Администратор может добавлять серверы и отслеживаемые папки, изменять пороги, отключать папки от контроля и запускать отчёт вручную. Для конфигураций агентов сервер формирует JSON-файлы на основании данных SQLite. Изменения становятся доступными агенту при очередном получении его конфигурации.
Такой подход снижает число ручных операций: повседневная настройка выполняется через меню, а не редактированием файлов приложения на сервере.
Zabbix в MAX: уведомления и действия
Бот не ограничивается резервным копированием. Он получает события Zabbix и позволяет ответственным сотрудникам оперативно реагировать на них. В интерфейсе доступны данные о проблемах мониторинга, состоянии веб-сайтов, хостах и температуре серверной, получаемой через интеграцию с Zabbix.
Для разных команд предусмотрено разграничение доступа: административные функции, управление резервными копиями, режим наблюдателя, а также подписки и ограничения по отдельным хостам и тегам Zabbix. Это позволяет направлять события тому, кто действительно отвечает за конкретную часть инфраструктуры.
Что обеспечивает устойчивость уведомлений
В версии RC5 для событий Zabbix реализован отдельный механизм надёжной доставки. Бот резервирует сообщение в SQLite, пытается передать его в MAX и при сбое использует очередь повторных попыток. Успешно доставленные сообщения не должны отправляться повторно только потому, что для другого получателя возникла ошибка. Повторный идентичный вебхук также обрабатывается с защитой от дублей.
Планировщик проверяет очередь раз в минуту; интервалы последующих попыток увеличиваются, а число попыток ограничено. Для мониторинга бэкапов отдельно реализованы защита от параллельных проверок и учёт уведомлений о проблеме и восстановлении для каждого адресата.
Технический стек
Компонент | Технология |
Серверная логика | Python, FastAPI, Uvicorn |
Интеграция с мониторингом | Zabbix webhook + Zabbix API |
Сообщения и управление | MAX Bot API |
Хранение и журналирование | SQLite, в том числе очередь доставки событий |
Фоновые задачи | APScheduler |
Агентская схема резервного копирования | PowerShell, JSON-отчёты, обмен конфигурациями |
