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

Пакеты интеграции

Пакет интеграции добавляет тип монитора в DumbMonit без нового релиза. Это единый файл YAML, который указывает, где читать (HTTP API или страница Prometheus /metrics на устройстве), что извлекать, и какие правила оповещений идут с ним. После установки тип пакета появляется в Add monitor рядом со встроенными, и его мониторы опрашиваются, строятся на графиках и оповещаются так же, как любые другие.

Пакет декларативен: без кода, без скриптов. DumbMonit сам выполняет каждый запрос, по правилам, которые пакет не может изменить.

Пакет можетПакет не может
Вызывать пути GET или POST на собственном адресе монитораВызывать любой другой хост, следовать перенаправлению на другой хост, или использовать абсолютный URL
Читать JSON (JSONPath), обычный текст (регулярные выражения) или текстовый формат PrometheusЗапускать код, команды shell или шаблоны за пределами {{option.x}} и {{credential.x}}
Отправлять учётные данные монитора в заголовке или как basic/bearer аутентификациюПомещать учётные данные в URL или тело запроса
Объявлять опции, показываемые в форме монитора (канал переключателя, порог)Записывать метрики за пределами собственного префикса dumbmonit_<pack>_
Поставлять правила оповещений по своим метрикамМенять встроенный тип монитора или встроенное правило
Приносить профили SNMP, в формате встроенныхЧитать более 4 МиБ на ответ, выполнять более 16 запросов за опрос, или производить более 5000 рядов за опрос

Адреса loopback и link-local (127.0.0.1, 169.254.x.x) отклоняются, если не включена опция монитора Allow loopback and link-local targets, точно как для проверок HTTP. Приватные адреса LAN всегда разрешены.

Репозиторий поставляется с тремя пакетами в packs/, каждый со своими фикстурами и ожидаемым выводом:

ПакетЧитаетПравила
node-exporterотобранное подмножество Prometheus node_exporter (CPU, память, файловые системы, диски, сеть)файловая система почти заполнена, память почти исчерпана
shelly-plugрозетки и реле Shelly Gen2+, /rpc/Switch.GetStatusперегрев
speedtest-trackerпоследний результат API v1 Speedtest Trackerинтернет ниже ожидаемого, тест скорости не проходит

В интерфейсе, как администратор: Settings → Integration packs. Вставьте YAML пакета или загрузите его pack.yaml, затем Install the pack. Пакет, не прошедший проверки, отклоняется со списком того, что нужно исправить; прошедший сохраняется со своими примечаниями, если они есть. Та же страница включает и отключает пакеты и удаляет их. Установленные типы появляются в Community packs при добавлении монитора, помеченные Pack.

Через HTTP API вам нужна сессия администратора или токен API с областью write (Settings → API & assistants).

Окно терминала
# Установить, или обновить до более новой версии того же пакета
curl -H 'Authorization: Bearer dmt_…' -H 'Content-Type: application/yaml' \
--data-binary @packs/shelly-plug/pack.yaml https://localhost:8080/api/packs
# Перечислить установленное
curl -H 'Authorization: Bearer dmt_…' https://localhost:8080/api/packs

Ответ сообщает, что произошло (created, updated или unchanged), метрики, которые производит пакет, и сколько правил оповещений было добавлено. Пакет, не прошедший проверку, отклоняется с полным списком проблем, по одной на строку.

ВызовДелает
GET /api/packsустановленные пакеты: версия, тип, метрики, правила, мониторы, использующие его
GET /api/packs/{id}один пакет
POST /api/packsустановить или обновить; тело: YAML (application/yaml), или {"yaml": "…"} в JSON
PUT /api/packs/{id}/disableостановить опрос мониторов пакета, оставить всё остальное
PUT /api/packs/{id}/enableснова опрашивать их
DELETE /api/packs/{id}удалить, со своими правилами; отклоняется (409), пока мониторы всё ещё его используют

С cookie сессии вместо токена добавляйте X-Requested-With: DumbMonit к каждому POST, PUT и DELETE, как для остального API.

Установка действует немедленно: новый тип доступен в форме монитора без перезапуска. Единственное исключение — пакет, приносящий профили SNMP; ответ тогда говорит "restart_required": true, потому что каталог SNMP читается при запуске.

Обновление пакета (тот же id, новое содержимое) заменяет его извлечение и описание. Его правила оповещений только добавляются: правило, которое вы изменили, отключили или удалили, никогда не перезаписывается обновлением.

Отключение пакета забирает его тип монитора и оставляет всё остальное: мониторы, историю, правила. Его мониторы больше не опрашиваются (каждый показывает ошибку конфигурации) и, как любой монитор, переставший отвечать, вызывают Monitor unreachable через три минуты: также приостановите их, если отключаете пакет на время.

Установленные пакеты попадают в резервные копии со своим YAML и восстанавливаются раньше мониторов, которые их используют.

Бинарный файл сервера проверяет и тестирует пакеты оффлайн:

Окно терминала
# Проверки схемы и согласованности, без сервера или базы данных
docker run --rm -v "$PWD/packs:/packs:ro" ghcr.io/selfhostr/dumbmonit:latest \
pack lint /packs/shelly-plug
# Воспроизвести fixtures/ через реальное извлечение и сравнить с expected.prom
docker run --rm -v "$PWD/packs:/packs:ro" ghcr.io/selfhostr/dumbmonit:latest \
pack test /packs/shelly-plug

pack test --update перезаписывает expected.prom из фикстур (монтируйте каталог с правом записи и запускайте с --user "$(id -u)", чтобы файл остался вашим).

Далее: напишите свой первый пакет за примерно десять минут, либо прочитайте справочник формата.