Операторы агрегации в PromQL накапливают значения метрик по измерению.В Prometheus размеры представлены именами и значениями меток;Все метрики с одинаковым значением на одной и той же метке имеют общее измерение.
Если вы не сохраните измерения, агрегирование будет выполнено по всем значениям без какой-либо метки.
Например, с учетом следующих метрик (содержимое моего холодильника):
fruit_number{name="apple",color="red",size="small"} 2
fruit_number{name="apple",color="green",size="big"} 1
fruit_number{name="banana",color="green",size="small"} 1
vegetable_number{name="salad",color="green",size="big"} 1
vegetable_number{name="mushroom",color="red",size="small"} 3
Сумма всех фруктов и овощей sum(fruit_number OR vegetable_number)
даст произведение одного скаляра:
{} 8
Но если вы хотите применить оператор только к некоторым измерениям, вы можете использовать предложение by
, чтобы указать, какие метки должны быть сохранены.
Повторение тех же метрик, если я хочу знатьколичество скоропортящихся пищевых продуктов на color
и size
, я буду запрашивать sum(fruit_number OR vegetable_number) by (color,size)
:
{color="red",size="small"} 5
{color="green",size="big"} 2
{color="green",size="small"} 1
. Агрегирует значения, для которых набор меток одинаков, и применяет оператор (sum
в данном случае):
{color="red",size="small"} -> red apple + mushroom
{color="green",size="big"} -> green apple + salad
{color="green",size="small"} -> banana