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

PromQL技术咨询:如何查询实例7天最大CPU使用率及识别低利用率实例

你的PromQL问题解析与正确实现

先直接说结论:你给出的两个查询都有问题,核心问题是没对非idle的CPU mode求和,而且第一个查询的rate窗口用错了。

先分析你两个查询的问题

  1. 第一个查询:

    max(rate(node_cpu_seconds_total{service="x",mode!="idle"}[7d]) *100 ) by (instance)
    
    • rate(node_cpu_seconds_total[7d])完全错误:rate是计算短时间窗口内的平均速率,用7天窗口会把整个7天的CPU使用拉成一个平均值,根本反映不了峰值。
    • 没有对mode!="idle"的指标求和:node_cpu_seconds_total按mode拆分(比如user、system、nice等),你现在取的是单个mode的最大值,不是实例的总CPU使用率。
  2. 第二个查询:

    max( max_over_time(rate(node_cpu_seconds_total{service="x",mode!="idle"}[5m])[7d:])*100) by (instance)
    
    • 同样没对非idle mode求和:结果是单个mode的峰值,不是总CPU使用率。
    • 外层的max by (instance)多余:max_over_time已经是针对每个时间序列(每个instance+mode)取7天内的最大值,你需要的是把同一实例的所有非idle mode加总后再取峰值。

正确的查询实现

要实现“每个实例过去7天的最大CPU使用率,再过滤出峰值从未超过20%的实例”,正确的查询应该是:

max_over_time(
  sum by (instance) (
    rate(node_cpu_seconds_total{service="x", mode!="idle"}[5m])
  )[7d:]
) * 100 <= 20

拆解说明

  • sum by (instance):把user、system、iowait等所有非idle的CPU时间指标加总,得到该实例的总CPU使用率(0到1之间的数值)。
  • rate(node_cpu_seconds_total[5m]):计算5分钟窗口内的平均CPU使用速率,这个窗口长度可以根据你的监控采集间隔调整(比如1m或10m),避免瞬时噪声影响结果。
  • max_over_time([7d:]):取过去7天内,每个5分钟窗口计算出的CPU使用率的最大值,也就是该实例7天内的峰值CPU使用率。
  • *100:把0-1的数值转成百分比,方便和20%做比较。
  • <=20:过滤出过去7天内峰值CPU使用率从未超过20%的低利用率实例。

可选优化

如果想先看到所有实例的7天峰值CPU使用率,再手动筛选,可以去掉最后的<=20:

max_over_time(
  sum by (instance) (
    rate(node_cpu_seconds_total{service="x", mode!="idle"}[5m])
  )[7d:]
) * 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:31