17. Проверки Prometheus
Обзор
Zabbix может опрашивать метрики, представленные в формате строки Prometheus.
Чтобы начать сбор данных Prometheus, необходимо выполнить два шага:
- настроить основной элемент данных HTTP, указывающий на соответствующую конечную точку данных, например,
https://<хост prometheus>/metrics - настроить зависимые элементы данных, использующие опцию предварительной обработки Prometheus для запроса необходимых данных из метрик, собранных основным элементом данных
Существует два варианта предварительной обработки данных Prometheus:
- Шаблон Prometheus — используется в обычных элементах данных для запроса метрик Prometheus
- Prometheus в JSON — используется в обычных элементах данных и для низкоуровневого обнаружения. В этом случае запрашиваемые данные Prometheus возвращаются в формате JSON.
Массовая обработка
Для зависимых метрик поддерживается массовая обработка. Чтобы включить кэширование и индексацию, первым шагом предварительной обработки должен быть Шаблон Prometheus. Когда Шаблон Prometheus является первым шагом предварительной обработки, тогда проанализированные данные Prometheus кэшируются и индексируются по первому условию <метка>==<значение> в шаге предварительной обработки Шаблон Prometheus. Этот кэш используется повторно при обработке остальных зависимых элементов данных в этом пакете. Для достижения оптимальной производительности первая метка должна быть одной из тех, у которых наиболее разные значения.
Если другие операции предварительной обработки необходимо выполнить до первого шага, то их необходимо переместить либо в основной элемент данных, либо в новый зависимый элемент данных, который затем можно использовать в качестве основного элемента данных для этих зависимых элементов данных.
Настройка
Если у вас настроен основной элемент данных HTTP, вам нужно создать зависимый элемент данных, который использует шаг предварительной обработки Prometheus:
- введите общие параметры зависимого элемента данных в диалоге настройки
- перейдите на вкладку Предобработка
- выберите шаг предобработки Prometheus (Шаблон Prometheus или Prometheus в JSON)

Следующие параметры специфичны для опции предобработки Шаблон Prometheus:
| Параметр | Описание | Примеры |
|---|---|---|
| Шаблон | Чтобы определить необходимый шаблон данных, вы можете использовать язык запросов, который похож на язык запросов Prometheus (см. таблицу сравнения), например: <имя метрики> — выбор по названию метрики {__name__="<имя метрики>"} — выбор по названию метрики {__name__=\~"<регулярное выражение>"} — выбор по названию метрики, соответствующему регулярному выражению {<имя метки>="<значение метки>",...} — выбор по имени метки {<имя метки>=\~"<регулярное выражение>",...} — выбор по имени метки, соответствующему регулярному выражению {__name__=\~".*"}==<значение> — выбор по значению метрики Или сочетание вышеперечисленного: <имя метрики>{<имя метки1>="<значение метки1>",<имя метки2>=\~"<регулярное выражение>",...}==<значение> Значением метки может быть любая последовательность символов UTF-8, однако символы обратной косой черты, двойных кавычек и перевода строки необходимо экранированы как \\, \" и \n соответственно; другие символы не требуется экранировать. |
wmi_os_physical_memory_free_bytes cpu_usage_system{cpu="cpu-total"} cpu_usage_system{cpu=\~".*"} cpu_usage_system{cpu="cpu-total",host=\~".*"} wmi_service_state{name="dhcp"}==1 wmi_os_timezone{timezone=\~".*"}==1 |
| Результат обработки | Укажите, следует ли вернуть значение, метку или применить соответствующую функцию (если шаблон соответствует нескольким строкам и результат необходимо агрегировать): значение — получение значения метрики (ошибка, если совпадут несколько строк) метка — получение значения метки, указанной в поле Метка (ошибка, если совпадут несколько метрик) сумма — получение суммы значений мин — получение минимального значения макс — получение максимального значения сред — получение среднего значения кол-во — получение количества значений Это поле доступно только для опции Шаблон Prometheus. |
Смотрите также примеры использования ниже. |
| Вывод | Задайте имя метки (опционально). В этом случае вернётся значение, соответствующее имени метки. Это поле доступно только для шага Шаблон Prometheus, если в поле Результат обработки выбрано «Метка». |
Примеры использования параметров
- Наиболее распространенный вариант использования — получение значения. Чтобы получить значение
/var/dbиз:
node_disk_usage_bytes{path="/var/cache"} 2.1766144e+09
node_disk_usage_bytes{path="/var/db"} 20480
node_disk_usage_bytes{path="/var/dpkg"} 8192
node_disk_usage_bytes{path="/var/empty"} 4096
используйте следующие параметры:
- Шаблон —
node_disk_usage_bytes{path="/var/db"} - Результат обработки — выберите «значение»
- Вас также может заинтересовать усреднённое значение по всем параметрам
node_disk_usage_bytes:
- Шаблон —
node_disk_usage_bytes - Результат обработки — выберите «сред»
- Хотя Prometheus поддерживает только числовые данные, часто используется обходное решение, которое также позволяет получить соответствующее текстовое значение. Это можно сделать при помощи фильтра и указания метки. Так, чтобы получить значение метки «color» из
elasticsearch_cluster_health_status{cluster="elasticsearch",color="green"} 1
elasticsearch_cluster_health_status{cluster="elasticsearch",color="red"} 0
elasticsearch_cluster_health_status{cluster="elasticsearch",color="yellow"} 0
используйте следующие параметры:
- Шаблон —
elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1 - Результат обработки — выберите «метка»
- Метка — укажите «color»
Фильтр (на основе числового значения «1») совпадёт с соответствующей строкой, а метка вернет описание состояния работоспособности (в настоящий момент «green»; но возможны также «red» или «yellow»).
Prometheus в JSON
Данные из Prometheus можно использовать для низкоуровневого обнаружения. В этом случае данные необходимы в формате JSON, и опция предобработки Prometheus в JSON вернёт их в нужном формате.
Для получения более подробных сведений смотрите Обнаружение с использованием данных Prometheus.
Сравнение языка запросов
В следующей таблице перечислены различия и сходства между PromQL и языком запросов предобработки Prometheus в Zabbix.
| Мгновенный векторный селектор PromQL [en] | Предобработка Prometheus в Zabbix | |
|---|---|---|
| Различия | ||
| Цель запроса | Сервер Prometheus | Простой текст в формате представления Prometheus |
| Возвращает | Мгновенный вектор | Значение метрики или метки (Шаблон Prometheus) Массив метрик для одиночного значения в JSON (Prometheus в JSON) |
| Операторы сопоставления меток | =, !=, =\~, !\~ | =, !=, =\~, !\~ |
| Регулярное выражение, используемое при сопоставлении метки или имени метрики | RE2 | PCRE |
| Операторы сравнения | Смотрите список [en] | Только == (равно) поддерживается для фильтрации значений |
| Сходства | ||
| Выбор по имени метрики, равному строке | <имя метрики> или {__name__="<имя метрики>"} | <имя метрики> или {__name__="<имя метрики>"} |
| Выбор по имени метрики, которое соответствует регулярному выражению | {__name__=\~"<регулярное выражение>"} | {__name__=\~"<регулярное выражение>"} |
| Выбор по значению <имя метки>, равному строке | {<имя метки>="<значение метки>",...} | {<имя метки>="<значение метки>",...} |
| Выбор по значению <имя метки>, которое соответствует регулярному выражению | {<имя метки>=\~"<регулярное выражение>",...} | {<имя метки>=\~"<регулярное выражение>",...} |
| Выбор по значению, равному строке | {__name__=\~".*"} == <значение> | {__name__=\~".*"} == <значение> |