#wmi #promql
#wmi #promql
Вопрос:
-
Используя следующий promql, мне удалось получить% CPU для каждого процесса:
sum by (process, process_id) (rate(wmi_process_cpu_time_total{instance=»my_instance», process=»my_process»}[5m]))* 100/(amount_of_cores)
Это возвращает правильный вектор, если amount_of_cores является жестко заданным скалярным (в моем случае — 32). К сожалению, я не могу использовать здесь жестко заданные значения, потому что у меня много экземпляров с разным количеством ядер…
-
С другой стороны, следующий запрос возвращает правильное количество ядер в экземпляре:
wmi_cs_logical_processors{экземпляр=»my_instance»}
К сожалению, когда я использую этот запрос в качестве разделителя, он ничего не возвращает. Насколько я понимаю, проблема в том, что первый запрос имеет несколько меток, а второй — только один «экземпляр», поэтому прямое деление ничего не возвращает.
Что я могу здесь сделать?
Ответ №1:
Во время написания вопроса я нашел ответ. Итак, на случай, если кому-то интересно… Чтобы разделить один вектор на другой с разными метками, вы должны использовать игнорирование (labels_not_existing_in_divider), group_left и некоторый агрегатор на делителе (я использовал sum).
((sum by (process, process_id) (rate(wmi_process_cpu_time_total{instance=~"$hostname.*"}[5m]))*100))
/
ignoring(process, process_id) group_left sum (wmi_cs_logical_processors{instance=~"$hostname.*"})