Основы PromQL: селекторы и rate
Урок вводит язык запросов PromQL: как выбрать нужные ряды и посчитать скорость роста счётчика.
PromQL — язык запросов Prometheus, на котором вы выбираете временные ряды, фильтруете их по лейблам и применяете функции.
Дашборды и алерты — это, по сути, PromQL-запросы. Освоив язык, вы перестаёте зависеть от готовых панелей и можете спросить у системы что угодно.
Селекторы и лейблы
Простейший запрос — имя метрики: оно вернёт мгновенный вектор (instant vector) — по одному текущему значению на каждый ряд. Фильтр по лейблам пишут в фигурных скобках.
http_requests_total{job="web", status="200"}Поддерживаются операторы сопоставления лейблов: = (равно), != (не равно), =~ (регулярка), !~ (не подходит под регулярку).
# все ряды, где статус начинается на 5 (5xx-ошибки)
http_requests_total{status=~"5.."}Диапазоны и rate
Чтобы посчитать скорость роста counter, нужен range-vector — данные за интервал в квадратных скобках, например [5m]. Функция rate() делит прирост счётчика на время и устойчива к рестартам.
# запросов в секунду, усреднённо за 5 минут
rate(http_requests_total[5m])Есть похожая irate() — мгновенная скорость по двум последним точкам, она «нервнее» и хороша для коротких всплесков.
Сравнения и фильтрация
PromQL умеет фильтровать ряды по значению. Сравнение возвращает только подходящие ряды — это удобно для поиска проблемных целей.
# цели, где скорость ошибок больше 0.5 в секунду
rate(errors_total[5m]) > 0.5Как работает под капотом
Любой запрос PromQL возвращает один из типов: instant vector (по точке на ряд), range vector (серия точек за интервал), скаляр или строка. Функции вроде rate() принимают range vector и отдают instant vector. Поэтому нельзя написать rate(metric) без диапазона — функции нужны точки за интервал, чтобы посчитать наклон.
metric -> instant vector (текущее значение)
metric[5m] -> range vector (точки за 5 минут)
rate(metric[5m]) -> instant vector (скорость роста)Частые ошибки
- Применять
rate()без диапазона. Без[5m]запрос невалиден — нужен range vector. - Брать слишком короткий интервал.
rate(metric[15s])при scrape_interval 15s часто даёт пропуски — берите минимум 4 scrape-интервала. - Считать
rate()от gauge. Имеет смысл только для counter.
Итог
- Голое имя метрики даёт instant vector; фильтр по лейблам — в фигурных скобках.
rate(counter[5m])считает скорость роста счётчика устойчиво к рестартам.- Сравнение через
>/<фильтрует ряды по значению.