Что такое PromQL и как написать запрос для мониторинга CPU?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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
Компоненты:
rate(node_cpu_seconds_total{mode="idle", instance=~"prod-.+"}[2m])— скорость роста времени простоя CPU за 2 минуты для инстансов, имя которых начинается сprod-.sum by(instance)— суммирует значения по каждому инстансу (учитывая все ядра).- Деление — вычисляет долю простоя от общего времени CPU.
1 - ...— преобразует в долю использования.* 100— переводит в проценты.
Практическое использование в Grafana
В Grafana можно создать панель с таким запросом для визуализации загрузки CPU в реальном времени:
- Добавить график.
- Источник данных — Prometheus.
- Запрос — один из вышеуказанных вариантов.
- Легенда — использовать
{{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 важно понимать структуру метрик и правильно применять функции агрегации.