Агрегации
Тема дорожной карты · Prometheus
Операторы агрегации в PromQL играют ключевую роль в объединении нескольких временных рядов в единую метрику путём применения статистической операции. Важность понимания этих операторов неоценима для создания эффективных дашбордов и оповещений в Prometheus. Операторы агрегации включают sum, avg, min, max, count, stddev, и topk, каждый из которых позволяет свести множество метрик к скалярному значению или меньшему набору временных рядов.
Управление метками в выходных данных осуществляется с помощью ключевых слов by и without. Например, команда sum(http_requests_total) by (job) агрегирует все значения HTTP-запросов, сгруппированные по метке job. Это позволяет упростить анализ данных, сосредоточившись на конкретных метках.
Как это работает
Агрегации в Prometheus используются для объединения данных из различных источников в единое значение. Селекторы в PromQL, такие как metric_name{label="value"}, возвращают мгновенные значения метрик. Range-vectors, такие как metric_name[5m], представляют собой выборку значений за определённый временной интервал. Операторы агрегации, такие как sum, avg, max, min, count, stddev, и topk, применяются к этим выборкам для получения статистических данных.
Ключевые слова by и without позволяют управлять метками, которые сохраняются в результате агрегации. Например, by (label) группирует данные по указанной метке, в то время как without (label) исключает эту метку из результатов.
Когда применять
Операторы агрегации особенно полезны при создании дашбордов и оповещений. Например, rate(counter[5m]) используется для вычисления средней скорости изменения метрики за 5 минут. Другой пример — histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m]))), который вычисляет 95-й процентиль времени ответа HTTP-запроса.
Типичные ошибки
Типичные ошибки при использовании агрегаций включают применение слишком короткого временного окна для вычисления скорости изменения метрики, что может привести к шуму или неправильным значениям. Например, rate(counter[1m]) может быть некорректным, если временной интервал сбора данных больше 1 минуты. Также ошибкой является потеря меток при использовании sum(rate(...)), что можно предотвратить с помощью ключевого слова by.