PromQL
Тема дорожной карты · Prometheus
PromQL (Prometheus Query Language) — мощный язык запросов, специально разработанный для выборки, агрегации и преобразования данных временных рядов, хранящихся в Prometheus. Выражения PromQL возвращают один из четырёх типов результатов: мгновенные векторы (набор временных рядов с одним образцом каждый), ранговые векторы (набор временных рядов с несколькими образцами за временное окно), скаляры (единственное числовое значение) или строки. Запросы могут быть простыми — например, имя метрики up, возвращающее текущий статус опроса всех целей, — или сложными: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) для вычисления 99-го перцентиля задержки запросов по всем экземплярам. PromQL используется повсюду в экосистеме Prometheus — в веб-интерфейсе для ad hoc-исследования, в панелях Grafana для дашбордов, в правилах оповещений для оценки пороговых значений и в правилах записи для предварительного вычисления ресурсоёмких запросов. Официальная документация PromQL и CLI promtool предоставляют инструменты для валидации и тестирования выражений PromQL перед развёртыванием в рабочей среде.
Как это работает
PromQL — язык запросов Prometheus. Селекторы: metric_name{label="value"} возвращает мгновенные значения. Range-vectors: metric_name[5m] — последние 5 минут samples. Агрегации: sum, avg, max, min, count, topk, bottomk. by (label) группирует; without (label) исключает из группировки. Распространённое: rate(counter[5m]) (per-second rate за 5 мин — самая используемая функция). Subqueries: <query>[5m:1m].
Когда применять
rate(counter[5m]) (не irate — rate усредняет по окну, менее шумно). histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m]))) — p95 latency. sum by (instance) не sum by (job), когда хотите per-host. Тестируйте запросы в Prometheus UI graph view до помещения в дашборды / алерты.
Типичные ошибки
Ловушки PromQL: rate(counter[1m]) (окно слишком короткое для обычного scrape interval — NaN или шум); sum(rate(...)) теряет labels, которые нужны (используйте by); путаница instant vector и range vector (функциям нужны конкретные типы — rate() принимает range vector); неверная агрегация histograms (всегда сначала sum by le).
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…