Операторы

Тема дорожной карты · Prometheus

PromQL поддерживает арифметические, сравнительные и логические операторы для объединения и сравнения временных рядов в запросах Prometheus. Арифметические операторы +, -, *, /, % и ^ могут применяться между двумя мгновенными векторами, между вектором и скаляром или между двумя скалярами; правила сопоставления векторов определяют выравнивание наборов меток. Операторы сравнения (==, !=, >, <, >=, <=) фильтруют или сравнивают значения временных рядов; при использовании с модификатором bool они возвращают 0 или 1 вместо фильтрации. Логические/множественные операторы and, or и unless объединяют два мгновенных вектора на основе их наборов меток, позволяя выполнять операции вида «вернуть ряды только при наличии другой метрики». При использовании бинарных операторов на двух мгновенных векторах Prometheus применяет клаузулы on() или ignoring() для управления тем, какие метки используются при сопоставлении, и group_left() или group_right() для объединений «многие к одному». Понимание операторов PromQL является основой написания сложных многометричных запросов Prometheus для дашбордов и оповещений.

Как это работает

Операторы — язык запросов 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]) (не iraterate усредняет по окну, менее шумно). 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 до помещения в дашборды / алерты.

Типичные ошибки

Ловушки Операторы: rate(counter[1m]) (окно слишком короткое для обычного scrape interval — NaN или шум); sum(rate(...)) теряет labels, которые нужны (используйте by); путаница instant vector и range vector (функциям нужны конкретные типы — rate() принимает range vector); неверная агрегация histograms (всегда сначала sum by le).

Связанные понятия

Полезные ресурсы