Справочник по формату пака
Пак — это один YAML-файл pack.yaml в формате версии 1. Неизвестные ключи —
это ошибки, а не игнорируемые настройки: опечатка вроде treshold будет
показана.
my-pack/ pack.yaml the pack itself: the only file the server needs fixtures/ one captured response per source, named after its id status.json expected.prom what the extraction must produce from the fixturesЗаголовок
Заголовок раздела «Заголовок»| Ключ | Обязателен | Значение |
|---|---|---|
schema | да | Всегда 1. |
id | да | Строчные буквы, цифры и одиночные дефисы, начинается с буквы, до 40 символов: shelly-plug. Тип монитора становится pack.<id>, префикс метрик — dumbmonit_<id with underscores>_. |
version | да | Семантическая версия пака: 1.2.0. |
requires | нет | Версии DumbMonit, с которыми работает пак, в виде требования semver: ">=0.2". Сервер вне этого диапазона отклоняет пак. |
label | да | Название, показываемое в списке типов мониторов. |
summary | нет | Одно предложение: что отслеживает пак. |
examples | нет | Продукты, к которым он применим, показываются как подсказки. |
address_hint | нет | Плейсхолдер поля адреса: 192.168.1.50. |
default_port | нет | Порт, используемый, если в адресе он не указан. |
scheme | нет | http (по умолчанию) или https; монитор может переопределить его. |
setup | нет | Уведомление, показываемое рядом с формой монитора: title, steps (список; то, что идёт после перевода строки в шаге, показывается как копируемая команда), warning, doc_url. |
credentials | нет | Допустимые типы учётных данных в порядке предпочтения: none, api_token, username_password. По умолчанию: [none]. Элементом может быть {kind, label, help}, чтобы изменить формулировки формы. |
options | нет | Настройки, показываемые в форме монитора (ниже). |
Опции сохраняются в мониторе и читаются через {{option.<key>}} в путях,
заголовках и телах запросов, а также в порогах правил.
options: - key: switch_id # lowercase, digits, underscores label: Switch channel help: 0 for a plug; 0, 1, 2… for each channel of a relay. input: number # text (default), number, boolean or select default: 0 required: false placeholder: "" choices: [] # the values of a selectКаждый пак, который опрашивает монитор, также получает пять опций
соединения, которые нельзя переобъявить: scheme, port, insecure_tls,
request_timeout_seconds (от 1 до 120, по умолчанию 10) и
allow_private_targets.
Источники
Заголовок раздела «Источники»Источник — это один запрос за опрос, всегда отправляемый на собственный адрес монитора.
sources: - id: status # lowercase, digits, underscores type: http # http or prometheus path: /rpc/Switch.GetStatus?id={{option.switch_id}} method: GET # GET (default) or POST format: json # http only: json (default) or text headers: Accept: application/json body: '{"id": {{option.switch_id}}}' # POST only auth: auto # auto (default), none, bearer or basicpathдолжен начинаться с одного/. URL запроса — это адрес монитора, за которым следует путь; после подстановки он должен сохранить ту же схему, хост и порт, иначе запрос отклоняется. Значения опций кодируются в путях с помощью процентного кодирования, поэтому значение не может добавить сегмент или изменить хост.auth: autoотправляет учётные данныеapi_tokenкакAuthorization: Bearer …, а учётные данныеusername_password— как базовую аутентификацию.noneничего не отправляет неявно, поэтому учётные данные можно передать в заголовке:X-Api-Key: "{{credential.token}}".{{credential.token}},{{credential.username}}и{{credential.password}}допускаются только в заголовках: никогда в пути или теле, которые попадают в логи.- Редиректы выполняются только на ту же схему, хост и порт, не более трёх.
401и403сообщаются как ошибки аутентификации, другие статусы не 2xx — как ошибки протокола. - За один опрос выполняется не более 16 запросов, и читается не более 4 MiB на ответ.
Источники Prometheus
Заголовок раздела «Источники Prometheus»sources: - id: metrics type: prometheus path: /metrics keep: [node_load1, node_memory_MemAvailable_bytes] rename: node_memory_MemAvailable_bytes: memory_available_bytes drop: fstype: ^(tmpfs|overlay)$keepперечисляет семейства, импортируемые как есть, со всеми их метками. Имя семейства также охватывает его серии histogram и summary (_bucket,_sum,_count). Счётчики (counters), гистограммы и суммы summary остаются счётчиками; всё остальное — gauge.renameзадаёт сохранённому семейству имя в DumbMonit. Имя, не состоящее из строчных букв, цифр и подчёркиваний, необходимо переименовать.dropотбрасывает каждый сэмпл, чья метка соответствует регулярному выражению.- Метки, которые DumbMonit задаёт сам (
target,host,instance,job,tag_*…), сохраняются какexported_<name>.
Метрики
Заголовок раздела «Метрики»У каждой метрики имя без префикса: power_watts в паке shelly-plug
записывается как dumbmonit_shelly_plug_power_watts. Имена состоят из
строчных букв, цифр и подчёркиваний и уникальны в пределах пака.
metrics: - name: power_watts help: Active power drawn by the load. source: status kind: gauge # gauge (default) or counter json: $.apower # exactly one of json, regex or prom scale: 1 # multiplier, e.g. 0.001 for ms → s map: {on: 1, off: 0} # text value → number labels: {}| Экстрактор | Источник | Значение | labels |
|---|---|---|---|
json: <JSONPath> | http, формат json | Каждый узел, подходящий под путь (RFC 9535 JSONPath, включая подстановочные знаки и фильтры), даёт одну серию. | метка → JSONPath, вычисляемый на объекте, который содержит значение: $.sensors[*].value с sensor: $.name помечает каждое значение соседним полем name. |
regex: <expression> | http, формат text | Каждое совпадение даёт одну серию; значение — это группа с именем value, иначе первая группа. | метка → имя группы захвата. |
prom: <sample name> | prometheus | Каждый сэмпл с точно таким именем. | метка → метка источника. Пусто: сохраняются все метки источника. |
Значения: числа берутся как есть; true/false становятся 1/0; текст
ищется в map или разбирается как число, если map нет. Значение, которое
отсутствует, равно null или не входит в map, не даёт в этом опросе ничего.
Discover
Заголовок раздела «Discover»discover превращает каждый элемент списка в набор серий с общими метками:
одна строка на диск, датчик или очередь.
discover: - name: disks source: list rows: $.disks[*] # JSONPath: one row per match max_rows: 100 # default 100, at most 1,000 labels: # JSONPath evaluated on each row disk: $.name model: $.info.model metrics: - name: disk_used_bytes json: $.used # JSONPath evaluated on each row - name: disk_healthy json: $.state map: {ok: 1, degraded: 0}Метрики строк принимают name, help, kind, json, scale и map.
Строки сверх max_rows игнорируются.
Правила
Заголовок раздела «Правила»Правила устанавливаются вместе с паком как обычные правила оповещений с uid
pack:<id>:<name>. После этого они принадлежат вам: обновление пака добавляет
правила, которых ещё нет, и никогда не перезаписывает правило, которое вы
изменили или удалили.
rules: - name: overheating # lowercase, digits, underscores title: Shelly plug overheating description: The internal temperature stayed above the limit for five minutes. expr: dumbmonit_shelly_plug_temperature_celsius op: ">" # >, >=, < or <= threshold: "{{option.max_temperature}}" # or a number for: 5m # 30s, 5m, 1h, 1d severity: warning # info, warning (default) or critical unit: °Cexpr— это MetricsQL, и он должен использовать хотя бы одну метрику пака по её полному имени. Любое другое имяdumbmonit_*, которое он упоминает, тоже должно создаваться паком (кромеdumbmonit_up): пак не может оповещать по сериям другого типа.thresholdвида{{option.x}}устанавливает значение опции по умолчанию, а собственное значение этой опции у каждого монитора становится его порогом для этого правила (переопределение для монитора, перезаписываемое при каждом сохранении монитора).
Профили SNMP
Заголовок раздела «Профили SNMP»Пак может содержать профили SNMP, написанные точно так же, как встроенные в
profiles/. Они
присоединяются к каталогу SNMP и применяются по sysObjectID, как и остальные;
собственный тип монитора они не создают.
snmp_profiles: - id: acme-ups # the pack id, or starting with "<pack id>-" name: ACME UPS match: sysobjectid: [1.3.6.1.4.1.99999] include: [system] metrics: - name: acme_ups_battery_percent # must start with the pack prefix oid: 1.3.6.1.4.1.99999.1.1.0 kind: gauge label: Заряд батареи # необязательно, показывается на странице устройства unit: "%" # необязательно: %, s, B, °C, bool… view: timeseries # необязательно: stat, timeseries, topn или heatmap view_title: Батарея # метрики с одним видом и заголовком делят один графикКаталог SNMP читается при запуске: перезапустите DumbMonit после установки или обновления пака с профилями SNMP.
| Лимит | Значение |
|---|---|
| Размер пака | 256 KiB |
| Источники (запросы за опрос, включая редиректы) | 16 |
| Размер ответа | 4 MiB |
| Серий за опрос | 5 000 (остальные отбрасываются и записываются в лог) |
| Объявленных метрик | 256 |
| Правил | 64 |
Строк на один discover | 1 000 |
| Длина значения метки | 200 байт |
Фикстуры и ожидаемый вывод
Заголовок раздела «Фикстуры и ожидаемый вывод»dumbmonit pack test <dir> читает fixtures/<source id>.json, .txt или
.prom, выполняет то же извлечение, что и сервер, и сравнивает результат с
expected.prom: текстовый формат Prometheus, отсортированный, без временных
меток и без меток монитора (target, host, tag_*), которые добавляет
сервер. --update записывает expected.prom из фикстур; просмотрите diff
перед коммитом.