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

Следующие параметры относятся только к варианту предварительной обработки Prometheus pattern:
| Parameter | Description | Examples |
|---|---|---|
| Pattern | Для определения требуемого шаблона данных можно использовать язык запросов, похожий на язык запросов Prometheus (см. comparison table), например: <metric name> - выбор по имени метрики {__name__="<metric name>"} - выбор по имени метрики {__name__=\~"<regex>"} - выбор по имени метрики, соответствующему регулярному выражению {<label name>="<label value>",...} - выбор по имени метки {<label name>=\~"<regex>",...} - выбор по имени метки, соответствующему регулярному выражению {__name__=\~".*"}==<value> - выбор по значению метрики Или комбинацию перечисленного выше: <metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value> Значение метки может быть любой последовательностью символов 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 |
| Result processing | Укажите, нужно ли вернуть значение, метку или применить соответствующую функцию (если шаблон совпадает с несколькими строками и результат нужно агрегировать): value - вернуть значение метрики (ошибка, если совпало несколько строк) label - вернуть значение метки, указанной в поле Label (ошибка, если совпало несколько метрик) sum - вернуть сумму значений min - вернуть минимальное значение max - вернуть максимальное значение avg - вернуть среднее значение count - вернуть количество значений Это поле доступно только для варианта Prometheus pattern. |
См. также примеры использования параметров ниже. |
| Output | Определите имя метки (необязательно). В этом случае возвращается значение, соответствующее имени метки. Это поле доступно только для варианта Prometheus pattern, если в поле Result processing выбрано 'Label'. |
Примеры использования параметров
- Наиболее распространенный вариант использования - вернуть value. Чтобы вернуть
значение
/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
используйте следующие параметры:
- Pattern -
node_disk_usage_bytes{path="/var/db"} - Result processing - выберите 'value'
- Вас также может интересовать среднее значение всех параметров
node_disk_usage_bytes:
- Pattern -
node_disk_usage_bytes - Result processing - выберите 'avg'
- Хотя 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
используйте следующие параметры:
- Pattern -
elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1 - Result processing - выберите 'label'
- Label - укажите 'color'
Фильтр (на основе числового значения '1') сопоставит нужную строку, а метка вернет описание состояния здоровья (в настоящее время 'green'; но потенциально также 'red' или 'yellow').
Prometheus в JSON
Данные из Prometheus можно использовать для низкоуровневого обнаружения. В этом случае требуются данные в формате JSON, и опция предварительной обработки Prometheus to JSON вернет именно их.
Подробнее см. Обнаружение с использованием данных Prometheus.
Сравнение языков запросов
В следующей таблице перечислены различия и сходства между PromQL и языком запросов предварительной обработки Zabbix для Prometheus.
| Селектор мгновенного вектора PromQL | Предварительная обработка Zabbix для Prometheus | |
|---|---|---|
| Различия | ||
| Цель запроса | сервер Prometheus | обычный текст в формате экспозиции Prometheus |
| Возвращает | мгновенный вектор | значение метрики или метки (шаблон Prometheus) массив метрик для одного значения в JSON (Prometheus to JSON) |
| Операторы сопоставления меток | =, !=, =\~, !\~ | =, !=, =\~, !\~ |
| Регулярное выражение, используемое при сопоставлении имени метки или метрики | RE2 | PCRE |
| Операторы сравнения | См. список | Для фильтрации значений поддерживается только == (равно) |
| Сходства | ||
| Выбор по имени метрики, равному строке | <metric name> или {__name__="<metric name>"} | <metric name> или {__name__="<metric name>"} |
| Выбор по имени метрики, соответствующему регулярному выражению | {__name__=\~"<regex>"} | {__name__=\~"<regex>"} |
| Выбор по значению <label name>, равному строке | {<label name>="<label value>",...} | {<label name>="<label value>",...} |
| Выбор по значению <label name>, соответствующему регулярному выражению | {<label name>=\~"<regex>",...} | {<label name>=\~"<regex>",...} |
| Выбор по значению, равному строке | {__name__=\~".*"} == <value> | {__name__=\~".*"} == <value> |