Range vector

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

Ранговый вектор в PromQL — это набор временных рядов, где каждый ряд содержит несколько значений образцов за определённое временное окно, задаваемое добавлением к селектору метрики продолжительности в квадратных скобках — например, http_requests_total[5m] выбирает все образцы за последние пять минут. Ранговые векторы используются в первую очередь как входные данные для функций, которым требуется окно образцов для вычисления результата: rate(), irate(), increase(), avg_over_time() и delta(). В отличие от мгновенных векторов, возвращающих одно значение на ряд в заданный момент времени, ранговые векторы нельзя непосредственно строить в виде графиков или сравнивать с помощью операторов; их сначала необходимо передать в функцию, сводящую их к мгновенному вектору. Продолжительность диапазона должна быть не менее чем в два раза больше интервала опроса, чтобы обеспечить достаточно точек данных для точного вычисления; общепринятой рекомендацией является использование диапазона в четыре-пять раз больше интервала опроса. Выбор правильной продолжительности диапазона для ранговых векторов важен для обеспечения баланса между скоростью отклика запроса и плавностью и точностью вычисляемых скоростей в дашбордах Prometheus.

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

Range vector — язык запросов 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 до помещения в дашборды / алерты.

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

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

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

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