histogram_quantile()
Тема дорожной карты · Prometheus
Функция histogram_quantile() в PromQL используется для вычисления оценочного значения квантиля из данных корзин метрики-гистограммы. Это позволяет анализировать перцентили задержки, такие как p50, p95 или p99 длительности запросов. Функция принимает два аргумента: желаемый квантиль в виде числа с плавающей точкой от 0 до 1 и ранговый вектор временных рядов _bucket — например, histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])). Поскольку histogram_quantile() выполняет линейную интерполяцию внутри корзины, содержащей квантиль, точность результатов зависит от наличия правильно настроенных границ корзин, соответствующих наблюдаемому распределению данных. Предварительное применение rate() к рядам _bucket гарантирует, что квантиль вычисляется в скользящем окне, а не по кумулятивным счётчикам. Функция histogram_quantile() — одна из наиболее широко используемых функций PromQL для оповещений на основе SLO и мониторинга производительности в Prometheus.
Как это работает
histogram_quantile() вычисляет квантиль из данных корзин метрики-гистограммы. Этот процесс включает в себя линейную интерполяцию внутри корзины, которая содержит квантиль. Точность результатов зависит от правильной настройки границ корзин, которые должны соответствовать наблюдаемому распределению данных. Обычно для получения актуальных значений квантиля используется функция rate(), которая вычисляет среднюю скорость изменения метрики за определённый интервал времени. Это позволяет избежать использования кумулятивных счётчиков и обеспечивает более точные результаты.
Когда применять
histogram_quantile() особенно полезна для мониторинга производительности и определения SLO (Service Level Objectives). Например, можно использовать её для определения перцентилей задержки запросов, таких как p50, p95 или p99. Функция также может быть полезна для предсказания поведения системы на основе исторических данных. Например, predict_linear(node_filesystem_free_bytes[4h], 4*3600) < 0 используется для предсказания заполнения диска, а absent(up{job="my-service"}) — для алерта на сбой scrape. Функции *_over_time часто используются для вычисления максимального, среднего или минимального значения gauge за определённый период времени, что полезно для SLO-расчётов.
Типичные ошибки
Типичные ошибки при использовании histogram_quantile() включают неправильное суммирование по репликам перед вычислением квантиля, что может привести к неверным результатам. Также использование irate() в долгосрочных графиках может привести к излишнему шуму в данных. Неправильное использование функций absent() и predict_linear() также может привести к ложным срабатываниям алертов. Например, absent() может сработать во время легитимного maintenance, что может вызвать беспокойство у команды on-call.