Введение
Добро пожаловать в этот практический лабораторный практикум по основам 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, и лабораторная среда автоматически делает его доступным для вас.
- Нажмите кнопку
+в интерфейсе LabEx и выберите Web Service. - Введите
9090для порта и откройте новую вкладку, которая появится.
Это действие откроет пользовательский интерфейс Prometheus на отдельной вкладке в вашей лабораторной среде. По умолчанию вы попадете на страницу Graph. На этой странице вы увидите текстовое поле с меткой Expression. Это Expression Browser, где вы будете вводить и выполнять все свои запросы PromQL для этого лабораторного практикума.

Теперь, когда вы знаете, где выполнять запросы, вы готовы написать свой первый.
Выполнение базового запроса, например node_cpu_seconds_total
На этом шаге вы выполните свой первый базовый запрос PromQL для выбора метрики. Простейший запрос в PromQL — это просто имя метрики. Это выберет все временные ряды, имеющие это имя метрики.
Перейдите в Expression Browser в пользовательском интерфейсе Prometheus, который вы открыли на предыдущем шаге.
- В поле ввода Expression введите следующее имя метрики:
node_cpu_seconds_total
- Нажмите кнопку 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. Вы можете сделать это, добавив селектор меток в фигурных скобках {} к вашему запросу.
- Введите следующий запрос в Expression Browser и выполните его:
node_cpu_seconds_total{mode="idle"}
Этот запрос теперь возвращает только временные ряды, где метка mode точно равна idle.
Далее рассчитаем скорость изменения этого счетчика в секунду. Для этого используем функцию rate(). Функция rate() должна знать, за какой период времени рассчитывать скорость. Мы указываем это с помощью селектора вектора диапазона (range vector selector), например [5m] для последних 5 минут.
- Теперь измените свой запрос, обернув его в функцию
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, для создания мощных и информативных панелей мониторинга и оповещений.



