18 Prometheus проверки

Обзор

Zabbix может запрашивать метрики, которые представлены в формате строк Prometheus.

Чтобы начать сбор данных Prometheus, необходимо выполнить два шага:

  • Основной HTTP элемент данных, указывающий на соответствующую конечную точку, например, https://<хост_prometheus>/метрики
  • зависимые элементы данных, которые используют опцию Prometheus предобработки, для запроса данных с метрик, полученных основным элементом данных

Имеется две опции предобработки Prometheus данных:

  • Prometheus шаблон - используется в обычных элементах данных для запроса Prometheus данных
  • Prometheus в JSON - используется в обычных и элементах данных и для низкоуровневого обнаружения. В этом случае запрошенные Prometheus данные возвращаются в JSON формате.

Настройка

При условии, что у вас уже есть настроенный основной элемент данных HTTP, вам необходимо создать зависимый элемент данных, который будет использовать шаг Prometheus предобработки:

  • введите общие параметры зависмому элементу данных в диалоге настройки
  • перейдите на вкладку Предобработка
  • выберите опцию Prometheus предобработки (Prometheus шаблон или Prometheus в JSON)

Параметр Описание Примеры
Шаблон Чтобы задать требуемый шаблон данных вы можете использовать язык запросов, походий на Prometheus язык запросов (смотрите таблицу сравнения), e.g.:
<имя метрики> - выбор по имени метрики
{__имя__="<имя метрики>"} - выбор по имени метрики
{__имя__=~"<рег. выражение>"} - выбор по имени метрики соответствующей регулярному выражению
{<имя метки>="<значение метки>",...} - выбор по имени метки
{<имя метки>=~"<рег. выражение>",...} - выбор по имени метки соответствующей регулярному выражению
{__имя__=~".*"}==<значение> - выбор по значению метрики
Или комбинация всего выше обозначенного:
<имя метрики>{<имя метки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 в JSON

Данные с Prometheus можно использовать для низкоуровневого обнаружения. В этом случае требуются данные в JSON формате и, как раз, в этом формате данных возвращает опция предобработки Prometheus в JSON.

Для получения более подробных сведений смотрите Обнаружение с использованием Prometheus данных.

Сравнение языков запросов

Следующая таблица перечисляет различия и сходства между языками запросов PromQL и Zabbix Prometheus предобработкой.

PromQL instant vector selector Zabbix Prometheus предобработка
Различия
Цель запроса Prometheus сервер Простой текст в формате толкования Prometheus
Возвращает Instant vector Метрика или значение метки (Prometheus шаблон)
Массив метрик для одного значения в JSON (Prometheus в JSON)
Операторы соответствия меткам =, !=, =~, !~ =, =~
Регулярные выражения используемые поиске соответствия в метках или именах метрик RE2 PCRE
Операторы сравнения Смотрите список Для фильтрации значений поддерживается только == (равно)
Сходства
Выбор по имени метрики, которое равно строке <имя метрики> или {__имя__="<имя метрики>"} <имя метрики> или {__имя__="<имя метрики>"}
Выбор по имени метрики, которое соответствует регулярному выражению {__имя__=~"<рег. выражение>"} {__имя__=~"<рег. выражение>"}
Выбор значения по <имени метки>, которое равно строке {<имя метки>="<значение метки>",...} {<имя метки>="<значение метки>",...}
Выбор значения по <имени метки>, которое соответствует регулярному выражению {<имя метки>=~"<рег. выражение>",...} {<имя метки>=~"<рег. выражение>",...}
Выбор по значению, которое равно строке {__имя__=~".*"} == <значение> {__имя__=~".*"} == <значение>