Skip to main content

Система мониторинга: компоненты и поток данных

Эта статья разбирает архитектуру системы мониторинга — из чего она состоит и как через неё проходят данные. Настройка локаций, интервалы опроса, правила интерпретации SNMP-параметров и конструктор отчётов.

Роль в системе

Мониторинг — ядро Printum. В отличие от ПринтМенеджера, его задача не обработка заданий, а сбор, обработка и хранение данных: об устройствах печати, о пользователях, статистике, событиях в системе. Мониторинг всегда существует в инфраструктуре в единственном экземпляре, даже если ПринтМенеджеров несколько (см. статьи про балансировку и филиальную сеть).

Логические блоки

Архитектурный блок «Система мониторинга» связан со следующими логическими блоками:

  • Сервер с системой мониторинга и личный кабинет — центральный компонент, разбирается ниже подробно.
  • Сетевой агент — обычно устанавливается в одном экземпляре вместе с основными компонентами мониторинга на том же сервере, но при необходимости дополнительные агенты выносятся на отдельные серверы.
  • АРМы сотрудников — на них устанавливается локальный агент мониторинга (при необходимости). Связан частично, поскольку сам АРМ не входит в состав системы мониторинга, но локальный агент входит.
  • Блок внешних интеграций — с доменом (LDAP-каталогом), почтовым сервером, SIEM-системой и пр.

Компоненты сервера мониторинга

Компонент Тип Роль
PostgreSQL БД Структурированные обработанные данные: пользователи, настройки системы, статистика (результат интерпретации “сырых” SNMP-данных).
ClickHouse БД Сырые данные, поступившие от сетевого агента (SNMP-опрос МФУ). Выбран вместо PostgreSQL, потому что может быстро сохранять большие объемы данных.
Redis БД (используется как брокер) Не хранит бизнес-данные — используется как брокер сообщений между Django, Celery и планировщиком, а также используется как кэш данных.
Django Python-приложение Бэкенд: принимает запросы через nginx, формирует ответы для личного кабинета и панели администратора, сетевого и локального агентов, кладёт данные в PostgreSQL/ClickHouse.
Celery Python-приложение (фоновые задачи) Обработка операций, которые занимают от 1 секунды: разбор “сырых” SNMP-данных после опроса, синхронизация с доменом, формирование тяжёлых отчётов.
Планировщик (scheduler) Python-приложение (планировка фоновых задач) Планирует периодические задачи: синхронизация с доменом, опрос устройств, отправка отчётов и уведомлений на почту. В нужный момент кладёт задачу в Redis, а тот передаёт её Celery.
nginx Реверс-прокси Маршрутизирует запросы от браузера и других компонентов, направляет их в Django.

Пример потока данных: опрос МФУ → личный кабинет

Это базовый сценарий, на котором стоит тренироваться читать схему.

  1. Сетевой агент получает две периодические задачи: сканирование сети и опрос принтеров.
  2. Агент отправляет SNMP-запрос МФУ (порт 161/UDP) с запросом на нужные OID.
  3. МФУ отвечает сетевому агенту (порт 162/UDP) значениями запрошенных OID.
  4. Сетевой агент передаёт полученные сырые данные через nginx в Django.
  5. Django видит, что пришли сырые данные, и кладёт их в ClickHouse.
  6. Scheduler по расписанию запускает задачу разбора сырых данных, ставя задачу в Redis. Celery забирает задачу из Redis.
  7. Celery забирает сырые данные из ClickHouse, интерпретирует их и кладёт уже структурированные, готовые к отображению данные в PostgreSQL.
  8. Пользователь через браузер запрашивает страницу устройств.
  9. Запрос проходит через nginx в Django; Django идёт в PostgreSQL за данными.
  10. Django готовит ответ, nginx собирает его вместе с шаблоном личного кабинета и отдаёт в браузер.

Если что-то в отчёте выглядит неактуальным или неполным — эта цепочка подсказывает, где искать: не дошли ли сырые данные до ClickHouse, выполнилась ли задача Celery, попали ли обработанные данные в PostgreSQL, или проблема на уровне отображения (nginx/Django).

Локальный агент мониторинга (данные с АРМ)

Отдельный поток — сбор статистики о заданиях печати, отправленных с АРМ на локальный (не сетевой) принтер:

  1. Локальный агент на АРМ фиксирует данные о задании.
  2. Агент отправляет накопленные данные через nginx в Django.
  3. Django обрабатывает данные и кладёт их в PostgreSQL.
  4. Администратор через личный кабинет запрашивает эти данные обратно тем же путём, что и в примере выше.

Внешние системы

  • LDAP-каталог (домен) — планировщик инициирует задачу выгрузки данных о пользователях, Celery запрашивает домен через Django/nginx, ответ обрабатывается и попадает в PostgreSQL. Подробности логики синхронизации пользователей и групп — в статье модуля «Управление пользователями».
  • Почтовый сервер (SMTP) — используется для отправки уведомлений и подписки на отчёты. Django формирует письмо (например, с PIN-кодом или отчётом), nginx отправляет его на SMTP-сервер.
  • SIEM-система (Syslog) — планировщик инициирует выгрузку накопленных в PostgreSQL событий, Celery готовит пакет, Django/nginx отправляют его во внешнюю систему по протоколу Syslog.

Синхронизация с ПринтМенеджером

ПринтМенеджер и мониторинг обмениваются данными в обе стороны.

Каждая из систем выступает инициатором соединения для получения данных, которые нужны именно ей:

  • Мониторинг запрашивает данные по напечатанным заданиям через nginx → Django ПринтМенеджер → PostgreSQL — именно поэтому статистика по заданиям печати видна в мониторинге отдельно от статистики по устройствам.
  • В обратную сторону, тем же каналом, ПринтМенеджер запрашивает, а мониторинг передаёт данные о пользователях и устройствах.