← Назад к вопросам

Что такое PromQL и как написать запрос для мониторинга CPU?

2.0 Middle🔥 252 комментариев
#Мониторинг и логирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое PromQL?

PromQL (Prometheus Query Language) — это гибкий язык запросов, предназначенный для выборки и агрегации временных рядов данных из Prometheus, системы мониторинга и оповещения с открытым исходным кодом. PromQL позволяет:

  • Извлекать данные в реальном времени и исторические данные.
  • Выполнять агрегации, фильтрацию и математические операции над временными рядами.
  • Использовать данные для построения графиков в Grafana, создания оповещений в Alertmanager и отладки проблем в инфраструктуре.

Ключевые концепции PromQL:

  • Метрики (Metrics) — именованные данные (например, node_cpu_seconds_total).
  • Метки (Labels) — пары ключ-значение для фильтрации и группировки метрик.
  • Типы данных — instant vector (мгновенный вектор), range vector (вектор диапазона), scalar (скаляр), string (строка).
  • Операторы и функции — арифметические, логические, агрегирующие функции (sum, rate, avg).

Запрос для мониторинга CPU

Мониторинг использования CPU в Prometheus обычно основывается на метрике node_cpu_seconds_total, которая предоставляется Node Exporter (агент для сбора системных метрик). Эта метрика содержит время CPU, разбитое по режимам (mode) и ядрам (cpu).

Примеры запросов PromQL для CPU

1. Общее использование CPU (в процентах)

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  • rate(node_cpu_seconds_total{mode="idle"}[5m]) — вычисляет скорость роста времени простоя CPU за 5 минут.
  • avg by (instance) — усредняет значение по инстансам (серверам).
  • 100 - ... * 100 — преобразует долю простоя в процент использования.

2. Использование CPU по режимам

rate(node_cpu_seconds_total[5m])

Этот запрос возвращает скорость использования CPU для всех режимов (user, system, idle, iowait и т.д.). Для фильтрации по конкретному режиму:

rate(node_cpu_seconds_total{mode="user"}[5m]) * 100

3. Агрегирование использования CPU по инстансам

sum by (instance, mode) (rate(node_cpu_seconds_total[5m])) * 100

Группирует данные по инстансам и режимам, суммируя значения по всем ядрам.

4. Средняя загрузка CPU по всем серверам

100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Агрегирует данные по всем инстансам без группировки.

Разбор запроса детально

Рассмотрим сложный запрос для мониторинга загрузки CPU в продакшене:

(
  1 - 
  sum by(instance) (rate(node_cpu_seconds_total{mode="idle", instance=~"prod-.+"}[2m]))
  /
  sum by(instance) (rate(node_cpu_seconds_total{instance=~"prod-.+"}[2m]))
) 
* 100

Компоненты:

  1. rate(node_cpu_seconds_total{mode="idle", instance=~"prod-.+"}[2m]) — скорость роста времени простоя CPU за 2 минуты для инстансов, имя которых начинается с prod-.
  2. sum by(instance) — суммирует значения по каждому инстансу (учитывая все ядра).
  3. Деление — вычисляет долю простоя от общего времени CPU.
  4. 1 - ... — преобразует в долю использования.
  5. * 100 — переводит в проценты.

Практическое использование в Grafana

В Grafana можно создать панель с таким запросом для визуализации загрузки CPU в реальном времени:

  1. Добавить график.
  2. Источник данных — Prometheus.
  3. Запрос — один из вышеуказанных вариантов.
  4. Легенда — использовать {{instance}} для подписей.

Пример для Grafana:

100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Здесь irate используется для более чувствительного расчета скорости на коротких интервалах.

Советы по оптимизации запросов

  • Интервалы ([5m], [2m]) — выбирайте в зависимости от частоты сбора метрик (scrape interval). Обычно используют интервал в 2-5 раз больше scrape interval.
  • Фильтрация по меткам — уменьшает объём обрабатываемых данных.
  • Агрегации (sum, avg) — снижают нагрузку на Prometheus при работе с большим количеством временных рядов.

PromQL — мощный инструмент для анализа производительности систем. Для эффективного мониторинга CPU важно понимать структуру метрик и правильно применять функции агрегации.

Что такое PromQL и как написать запрос для мониторинга CPU? | PrepBro