Recording rules
Тема дорожной карты · Prometheus
Правила записи в Prometheus представляют собой мощный механизм для предварительного вычисления часто используемых или вычислительно затратных выражений PromQL и сохранения их результатов как новых временных рядов. Это значительно повышает производительность запросов дашбордов и оповещений, обеспечивая быстрый доступ к данным. Правила записи особенно ценны для агрегации метрик с высокой кардинальностью в сводки с меньшей кардинальностью, а также для обеспечения согласованных результатов запросов в панелях Grafana и правилах Alertmanager при развёртывании Prometheus.
Правила записи определяются в файлах правил, на которые ссылается раздел rule_files файла конфигурации prometheus.yml. Для каждого правила используется ключ record, который указывает новое имя метрики, а ключ expr задаёт вычисляемое выражение PromQL. Сервер Prometheus вычисляет правила записи с интервалом, заданным параметром evaluation_interval (обычно каждые 15–60 секунд), и сохраняет результаты с дополнительными метками, указанными в блоке labels. По соглашению имена метрик правил записи следуют шаблону level:metric:operation, например job:http_requests_total:rate5m.
Как это работает
Recording rules позволяют вычислять различные функции PromQL и сохранять результаты в виде новых временных рядов. В частности, они могут использовать следующие функции:
rate(): вычисляет скорость изменения метрики на основе временных меток.irate(): вычисляет мгновенную скорость изменения метрики, используя последние две точки данных.increase(): вычисляет общее изменение метрики за указанный диапазон времени.delta(): вычисляет разницу между последними двумя значениями метрики.deriv(): вычисляет производную метрики, которая является её мгновенной скоростью изменения.predict_linear(): позволяет предсказать будущее значение метрики на основе линейной модели.histogram_quantile(): вычисляет квантиль из гистограммы.quantile_over_time(): вычисляет квантиль метрики за указанный диапазон времени.avg_over_time(): вычисляет среднее значение метрики за указанный диапазон времени.max_over_time(): вычисляет максимальное значение метрики за указанный диапазон времени.min_over_time(): вычисляет минимальное значение метрики за указанный диапазон времени.absent(): генерирует метрику, если данные отсутствуют.
Когда применять
Правила записи особенно полезны в следующих случаях:
- Для предсказания заполнения диска:
predict_linear(node_filesystem_free_bytes[4h], 4*3600) < 0. - Для определения сбоев scrape:
absent(up{job="my-service"}). - Для вычисления максимального, среднего или минимального значения gauge за определённый период времени:
*_over_time.
Типичные ошибки
При использовании правил записи важно избегать типичных ошибок:
- Использование
histogram_quantileбез предварительного суммирования по репликам (per-replica quantile != fleet quantile). - Использование
irateв долгосрочных графиках (слишком шумно). - Использование
absent()во время легитимного maintenance (используйте silences для предотвращения ложных срабатываний). - Использование
predict_linearна gauge, который не подходит под линейную модель (шум).