Архитектура
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/proto | Sample, 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.rs | AES-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.- Планировщик запускает каждый включённый монитор с его интервалом через
реестр сборщиков. Агенты и ретрансляторы отправляют свои измерения в
/api/ingestс токеном конкретной машины. - Сборщики возвращают выборки с именами
dumbmonit_<kind>_*и меткойtarget(идентификатор монитора). Писатель отправляет их в VictoriaMetrics пакетами. - Движок оповещений проверяет правила по сохранённым рядам.
phase— это состояние движка;effective_phase— то, что видят пользователи (suppressed, если родительский монитор недоступен). Недоступный монитор вызывает оповещение; ошибка конфигурации отображается, но уведомление не отправляется. - Уведомления уходят через каналы, настроенные в политике уведомлений.
- Интерфейс и любые скрипты читают всё через
/api/*; закрытой половины API не существует.
Точки расширения
Заголовок раздела «Точки расширения»- Новый вид монитора — это реализация
Collectorплюс один вызовRegistry::register. Формы в интерфейсе генерируются изGET /api/collectors. - Новый канал уведомлений — это отправитель плюс запись в
notify/catalog.rs; интерфейс строит форму поGET /api/notify/kinds. - Монитору SNMP, которому нужен только профиль, Rust не требуется: достаточно
файла YAML в
profiles/.
Инструкции по сборке см. в разделе Разработка, а границы доверия — в модели безопасности.