Введение

Добро пожаловать в этот практический лабораторный практикум по основам PromQL. Prometheus — это мощный набор инструментов для мониторинга и оповещения с открытым исходным кодом, а его язык запросов, PromQL, является основой его мощности. PromQL позволяет выбирать и агрегировать временные ряды данных в реальном времени.

В этом лабораторном практикуме вы будете работать с предварительно настроенной средой, состоящей из сервера Prometheus, который активно собирает метрики от Node Exporter. Ваша цель — изучить базовый синтаксис PromQL для запроса этих данных, начиная с простых выборок метрик и переходя к более сложным запросам с использованием функций и фильтров.

Понимание предоставленной среды

На этом шаге вы ознакомитесь с лабораторной средой. Процесс настройки уже запустил для вас два Docker-контейнера. Вам не нужно выполнять никаких настроек.

Два контейнера:

  • node-exporter: Этот контейнер предназначен для предоставления широкого спектра метрик, связанных с оборудованием и ядром, с хост-машины, на которой он запущен.
  • prometheus: Это сам сервер Prometheus. Он настроен на "скрапинг" (сбор) метрик из node-exporter и их хранение в своей базе данных временных рядов.

Вы можете проверить, что оба контейнера запущены, выполнив команду docker ps в терминале.

docker ps

Вы должны увидеть вывод, аналогичный следующему, перечисляющий контейнеры prometheus и node-exporter со статусом "Up".

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS         PORTS                                       NAMES
486db39ca176   prom/prometheus      "/bin/prometheus --c…"   9 seconds ago    Up 8 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
3f02110c8fde   prom/node-exporter   "/bin/node_exporter"     11 seconds ago   Up 8 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter

Это подтверждает, что ваш стек мониторинга готов. На следующем шаге вы получите доступ к пользовательскому интерфейсу Prometheus, чтобы начать запрашивать эти метрики.

Доступ к Expression Browser в Prometheus UI

На этом шаге вы получите доступ к веб-интерфейсу Prometheus и найдете Expression Browser, который является основным инструментом для выполнения запросов PromQL.

Веб-сервер контейнера Prometheus работает на порту 9090, и лабораторная среда автоматически делает его доступным для вас.

  1. Нажмите кнопку + в интерфейсе LabEx и выберите Web Service.
  2. Введите 9090 для порта и откройте новую вкладку, которая появится.

Это действие откроет пользовательский интерфейс Prometheus на отдельной вкладке в вашей лабораторной среде. По умолчанию вы попадете на страницу Graph. На этой странице вы увидите текстовое поле с меткой Expression. Это Expression Browser, где вы будете вводить и выполнять все свои запросы PromQL для этого лабораторного практикума.

Prometheus Expression Browser

Теперь, когда вы знаете, где выполнять запросы, вы готовы написать свой первый.

Выполнение базового запроса, например node_cpu_seconds_total

На этом шаге вы выполните свой первый базовый запрос PromQL для выбора метрики. Простейший запрос в PromQL — это просто имя метрики. Это выберет все временные ряды, имеющие это имя метрики.

Перейдите в Expression Browser в пользовательском интерфейсе Prometheus, который вы открыли на предыдущем шаге.

  1. В поле ввода Expression введите следующее имя метрики:
node_cpu_seconds_total
  1. Нажмите кнопку Execute.

После выполнения посмотрите на результаты в представлении Table под графиком. Вы увидите список временных рядов.

node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="idle"}      3456.78
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="iowait"}    12.34
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="system"}    56.78
...

Разберем этот результат:

  • node_cpu_seconds_total: Это имя метрики. Оно представляет собой counter (счетчик), который отслеживает общее количество секунд, проведенных процессором в различных режимах.
  • {cpu="0", mode="idle", ...}: Это метки (labels). Метки — это пары ключ-значение, которые однозначно идентифицируют временной ряд. Здесь вы можете увидеть различные ряды для каждого ядра процессора (cpu="0") и каждого режима (mode="idle", mode="system" и т. д.).
  • 3456.78: Это последнее значение, записанное для данного конкретного временного ряда. Поскольку это счетчик, это значение будет только увеличиваться со временем.

Примечание: Если вы не видите последнее значение, нажмите на диалоговое окно Labby в правом углу страницы и временно закройте его.

Вы успешно выполнили запрос к Prometheus для всех временных рядов определенной метрики.

Применение функции rate и фильтров по меткам

На этом шаге вы уточните свой запрос, используя фильтры по меткам и функцию rate(), чтобы получить более осмысленные данные. Сырое значение счетчика часто не является полезным; нас обычно больше интересует скорость его изменения.

Сначала отфильтруем результаты, чтобы увидеть только время ЦП, затраченное в режиме idle. Вы можете сделать это, добавив селектор меток в фигурных скобках {} к вашему запросу.

  1. Введите следующий запрос в Expression Browser и выполните его:
node_cpu_seconds_total{mode="idle"}

Этот запрос теперь возвращает только временные ряды, где метка mode точно равна idle.

Далее рассчитаем скорость изменения этого счетчика в секунду. Для этого используем функцию rate(). Функция rate() должна знать, за какой период времени рассчитывать скорость. Мы указываем это с помощью селектора вектора диапазона (range vector selector), например [5m] для последних 5 минут.

  1. Теперь измените свой запрос, обернув его в функцию rate() и добавив селектор диапазона 5 минут. Выполните финальный запрос:
rate(node_cpu_seconds_total{mode="idle"}[5m])

Разберем этот расширенный запрос:

  • node_cpu_seconds_total{mode="idle"}: Это селектор мгновенного вектора (instant vector selector), который фильтрует нужную нам метрику и метку.
  • [5m]: Это селектор диапазона (range selector), который указывает Prometheus получить все точки данных за последние 5 минут для выбранных временных рядов.
  • rate(...): Это функция, которая берет 5-минутный диапазон данных и вычисляет среднюю скорость увеличения счетчика в секунду.

Результатом является уже не большое значение счетчика, а значение обычно от 0 до 1 (для одного ядра ЦП). Значение 0.95 будет означать, что за последние 5 минут процессор в среднем был на 95% свободен (idle). Это гораздо более полезная информация для мониторинга.

Резюме

Поздравляем с завершением этой лабораторной работы по основам PromQL! Вы успешно выполнили запрос к работающему экземпляру Prometheus и преобразовали необработанные данные в осмысленную информацию.

В этой лабораторной работе вы научились:

  • Навигироваться в пользовательском интерфейсе Prometheus к Expression Browser.
  • Выполнять базовые запросы для выбора всех временных рядов для метрики.
  • Понимать структуру временного ряда, включая его имя метрики и уникальный набор меток.
  • Фильтровать временные ряды с использованием селекторов меток ({...}).
  • Рассчитывать скорость изменения счетчика с помощью функции rate() и селектора вектора диапазона ([5m]).

Это фундаментальные строительные блоки для работы с Prometheus. Отсюда вы можете изучить множество других функций и операторов, которые предлагает PromQL, для создания мощных и информативных панелей мониторинга и оповещений.