Функции PromQL
Тема дорожной карты · Prometheus
PromQL предоставляет богатый набор встроенных функций для преобразования и анализа данных временных рядов Prometheus. Эти функции охватывают математические операции, агрегацию во времени, прогнозирование и манипуляции с метками. Умение эффективно использовать функции PromQL необходимо для создания выразительных дашбордов, эффективных правил записи и точных выражений оповещений в Prometheus, что делает их ключевыми инструментами для мониторинга и анализа систем.
Как это работает
Функции PromQL используются для различных целей, включая вычисление скоростей изменения данных, прогнозирование и манипуляции метаданными. Например, функции rate() и irate() позволяют вычислять скорость изменения данных в секунду, что особенно полезно для счётчиков. Функция increase() используется для определения общего прироста счётчика за определённое временнное окно. Для работы с датчиками (gauge) используются функции delta() и deriv(), которые позволяют вычислить разницу между значениями и их производные соответственно.
Для математических преобразований данных используются функции abs(), ceil(), floor() и round(). Кроме того, функция predict_linear() позволяет провести линейную экстраполяцию значений, что полезно для прогнозирования будущих значений на основе текущих данных.
Функции, работающие с ранговыми векторами, такие как rate(), avg_over_time(), max_over_time() и stddev_over_time(), принимают селектор продолжительности времени вида [5m] и сводят окно образцов к единственному значению на ряд. Это позволяет агрегировать данные за определённый временной интервал и использовать их для анализа.
Функции манипуляции метками, такие как label_replace() и label_join(), позволяют реструктурировать наборы меток во время выполнения запроса без изменения хранящихся данных. Это особенно полезно для создания динамических меток и фильтрации данных на основе метаданных.
Когда применять
Функции PromQL применяются в различных сценариях. Например, выражение predict_linear(node_filesystem_free_bytes[4h], 4*3600) < 0 может использоваться для предсказания заполнения диска. Функция absent(up{job="my-service"}) может использоваться для определения сбоев при сборе данных. Функции *_over_time полезны для вычисления максимальных, минимальных и средних значений gauge за определённый временной интервал, что часто используется в расчётах SLO (Service Level Objectives).
Функция histogram_quantile всегда используется в сочетании с суммированием по репликам, чтобы получить общее значение квантиля для всего кластера.
Типичные ошибки
Когда используются функции PromQL, важно избегать типичных ловушек. Например, использование функции histogram_quantile без предварительного суммирования по репликам может привести к неверным результатам, так как квантиль для каждой реплики не будет эквивалентен квантилю для всего кластера. Функция irate() может быть слишком шумной при использовании в долгосрочных графиках, что затрудняет анализ данных. Функция absent() может срабатывать в легитимный период обслуживания и будить на-call команду, поэтому важно использовать силенсы (silences) для исключения таких ситуаций. Наконец, использование функции predict_linear на gauge, который не подходит под линейную модель, также может привести к неточным результатам.