如何使用普罗米修斯wmi\u导出器使用wmi\u进程\u CPU\u时间\u总数和wmi\u cs\u逻辑处理器计算每个进程的标准化CPU百分比

如何使用普罗米修斯wmi\u导出器使用wmi\u进程\u CPU\u时间\u总数和wmi\u cs\u逻辑处理器计算每个进程的标准化CPU百分比,wmi,promql,Wmi,Promql,使用以下promql,我成功地获得了每个进程%CPU: 求和依据(进程、进程id)(速率(wmi进程cpu时间总计{instance=“my\u instance”,process=“my\u process”}[5m])*100/(内核数量) 如果内核的数量为硬编码标量(在我的例子中为-32),则返回正确的向量。不幸的是,我不能在这里使用硬编码值,因为我有许多具有不同数量内核的实例 另一方面,以下查询返回实例上正确数量的内核: wmi_cs_逻辑_处理器{instance=“my_insta

使用以下promql,我成功地获得了每个进程%CPU:

求和依据(进程、进程id)(速率(wmi进程cpu时间总计{instance=“my\u instance”,process=“my\u process”}[5m])*100/(内核数量

如果内核的数量为硬编码标量(在我的例子中为-32),则返回正确的向量。不幸的是,我不能在这里使用硬编码值,因为我有许多具有不同数量内核的实例

  • 另一方面,以下查询返回实例上正确数量的内核:

    wmi_cs_逻辑_处理器{instance=“my_instance”}

  • 不幸的是,当我使用这个查询作为分隔符时,它什么也不返回。据我所知,问题在于第一个查询有几个标签,而第二个查询只有一个“实例”,所以直接除法不会返回任何结果


    我能在这里做什么?

    在写问题的过程中,我找到了答案。所以,如果有人感兴趣。。。 若要使用不同的标签将一个向量划分到另一个向量,您应该使用忽略(标签在分割器中不存在)、左分组和分割器上的某个聚合器(我使用总和)

        ((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.*"})