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