Как рассчитать нормализованный% ЦП на процесс с помощью Prometheus wmi_exporter, используя wmi_process_cpu_time_total и wmi_cs_logical_processors

  1. Используя следующий запрос, мне удалось получить% CPU для каждого процесса:

    сумма по (process, process_id) (rate (wmi_process_cpu_time_total {instance = my_instance, process = my_process} [5m])) * 100 / (amount_of_cores)

Это возвращает правильный вектор, если amount_of_cores - это жестко запрограммированный скаляр (в моем случае - 32). К сожалению, я не могу использовать здесь жестко запрограммированные значения, потому что у меня много экземпляров с разным количеством ядер ...

  1. С другой стороны, следующий запрос возвращает правильное количество ядер в экземпляре:

    wmi_cs_logical_processors {instance = my_instance}

К сожалению, когда я использую этот запрос как разделитель - он ничего не возвращает. Насколько я понимаю, проблема в том, что первый запрос имеет несколько меток, а второй - только один экземпляр, поэтому прямое деление ничего не возвращает.

Что я могу здесь сделать?


person lyres    schedule 27.10.2020    source источник


Ответы (1)


Во время написания вопроса я нашел ответ. Итак, на случай, если кому-то интересно ... Чтобы разделить один вектор на другой с разными метками, вы должны использовать игнорирование (labels_not_existing_in_divider), group_left и некоторый агрегатор на делителе (я использовал сумму).

    ((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.*"})
person lyres    schedule 27.10.2020