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'.

Примеры использования параметров

  1. Наиболее распространенный вариант использования - вернуть 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'
  1. Вас также может интересовать среднее значение всех параметров node_disk_usage_bytes:
  • Pattern - node_disk_usage_bytes
  • Result processing - выберите 'avg'
  1. Хотя 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>