Перейти к содержимому

Архитектура

DumbMonit поставляется в одном контейнере. Внутри работает один процесс на Rust, который обслуживает веб-интерфейс и API, а также дочерний процесс (VictoriaMetrics), который процесс Rust запускает и контролирует. Конфигурация и состояние хранятся в SQLite.

КомпонентГдеРоль
Серверcrates/serverЕдиный бинарный файл на Rust: HTTP API (axum), аутентификация, планировщик, движок оповещений, каналы уведомлений, отчёты.
Веб-интерфейсweb/Одностраничное приложение SvelteKit (Svelte 5, Tailwind 4, uPlot). Собирается в статические файлы и встраивается в бинарный файл сервера с помощью rust_embed.
Временные рядыcrates/server/src/tsdb/Пакетный писатель и прокси запросов для VictoriaMetrics. embedded.rs запускает и контролирует встроенный дочерний процесс VictoriaMetrics (данные в /data/vm); DUMBMONIT_VM_URL вместо этого указывает на внешний экземпляр.
Конфигурация и состояниеcrates/server/src/db/SQLite с нумерованными миграциями: мониторы, учётные данные, пользователи, правила, состояние оповещений, периоды молчания, каналы.
Сборщикиcrates/collectors, crates/server/src/collectors/Одна реализация трейта Collector на каждый вид монитора или сервиса, зарегистрированная в Registry. Планировщик знает только трейт.
Общие типыcrates/protoSample, Target, Credential, трейт Collector и ProbeError, а также протокол агента.
Агентcrates/agentАгент для Linux, macOS, FreeBSD и Windows, передающий метрики хоста; он также может работать как ретранслятор, запускающий сборщики для удалённой площадки.
Оповещенияcrates/server/src/alerting/Правила, конечный автомат оповещений, подавление по родительскому монитору, периоды молчания, обучаемые базовые линии.
Уведомленияcrates/server/src/notify/Каналы (чат, push, дежурства, e-mail, вебхуки), описываемые для интерфейса в catalog.rs.
Секретыcrates/server/src/crypto.rsAES-256-GCM для учётных данных и токенов, хранящихся в SQLite; ключ берётся из /data/secret.key или DUMBMONIT_SECRET.
devices / services ──(SNMP, HTTP APIs, probes)──► collectors ┐
│ samples
agents ──(push, per-machine token)──► /api/ingest ───────────┤
relay agent (collectors run at a remote site) ───────────────┤
▼
tsdb writer (batched) ──► VictoriaMetrics
│
browser / scripts / assistants ◄─ /api/* ◄─ query proxy ◄─────────────────┘
│
└─► alerting engine ──► notify channels
SQLite (config, users, alert state, silences) is read and written by the
API, the scheduler and the alerting engine.
  1. Планировщик запускает каждый включённый монитор с его интервалом через реестр сборщиков. Агенты и ретрансляторы отправляют свои измерения в /api/ingest с токеном конкретной машины.
  2. Сборщики возвращают выборки с именами dumbmonit_<kind>_* и меткой target (идентификатор монитора). Писатель отправляет их в VictoriaMetrics пакетами.
  3. Движок оповещений проверяет правила по сохранённым рядам. phase — это состояние движка; effective_phase — то, что видят пользователи (suppressed, если родительский монитор недоступен). Недоступный монитор вызывает оповещение; ошибка конфигурации отображается, но уведомление не отправляется.
  4. Уведомления уходят через каналы, настроенные в политике уведомлений.
  5. Интерфейс и любые скрипты читают всё через /api/*; закрытой половины API не существует.
  • Новый вид монитора — это реализация Collector плюс один вызов Registry::register. Формы в интерфейсе генерируются из GET /api/collectors.
  • Новый канал уведомлений — это отправитель плюс запись в notify/catalog.rs; интерфейс строит форму по GET /api/notify/kinds.
  • Монитору SNMP, которому нужен только профиль, Rust не требуется: достаточно файла YAML в profiles/.

Инструкции по сборке см. в разделе Разработка, а границы доверия — в модели безопасности.