You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus无法执行两值除法:CPU使用率查询故障排查

解决Prometheus中CPU使用率查询组合失败的问题

这个问题的核心是Prometheus的向量匹配规则在搞鬼!当你把两个向量做除法运算时,Prometheus默认要求两边的时间序列拥有完全一致的标签集才能匹配,否则就会返回空结果或者无法正常计算。

问题拆解

  • 左边的rate(windows_cpu_time_total{mode!="idle"}[5m])返回的是多标签向量:每个时间序列包含instance、job、mode这些标签(对应不同的非空闲CPU模式)。
  • 右边的windows_cs_logical_processors返回的是少标签向量:一般只有instance和job标签,对应每台机器的逻辑核心数。

因为两边的标签集不一致(左边多了mode标签),默认的精确匹配找不到对应关系,所以组合查询就失效了。

解决方案:使用向量匹配修饰符

你需要用on()指定用来匹配的共同标签,再用group_left()告诉Prometheus:左边的多个序列(每个mode对应一个)都可以匹配右边对应标签的单个核心数值。

试试这个修正后的查询:

rate(windows_cpu_time_total{mode!="idle"}[5m]) / on(instance, job) group_left() windows_cs_logical_processors

如果你的环境中job标签不是必须的(比如所有采集都用同一个job),也可以简化为:

rate(windows_cpu_time_total{mode!="idle"}[5m]) / on(instance) group_left() windows_cs_logical_processors

验证思路

  1. 先分别执行两个子查询,查看它们的标签结构:
    • 执行rate(windows_cpu_time_total{mode!="idle"}[5m]),确认返回的序列包含哪些标签(比如instance、job、mode)。
    • 执行windows_cs_logical_processors,确认返回的序列包含哪些标签(比如instance、job)。
  2. 确保on()里指定的是两边都有的共同标签,这样就能正确匹配每台机器的核心数到对应的CPU时间序列上。

这样修改后,查询应该就能正常计算出每个非空闲CPU模式的使用率(除以核心数后的值)了。

内容的提问来源于stack exchange,提问作者Stas BZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:27:57