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

如何用Prometheus计算实例时段平均CPU使用率并生成Grafana表格

解决Prometheus计算指定时段实例平均CPU使用率并生成Grafana表格的问题

没问题,我来帮你搞定这个需求!先从核心的Prometheus查询语句入手,再一步步讲Grafana的配置,保证你能快速生成想要的表格。

一、Prometheus查询语句编写

假设你用的是node_exporter采集的CPU指标(如果是自定义 exporter,替换成你的对应指标即可),要计算指定时间段内每个实例的平均CPU使用率,可以用下面的查询:

avg_over_time(
  (1 - sum by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) / sum by (instance) (rate(node_cpu_seconds_total[1m]))) * 100
[$__range]
)

我拆解下这个查询的逻辑,方便你理解和调整:

  • rate(node_cpu_seconds_total{mode="idle"}[1m]):计算每个CPU核空闲时间的每秒增量,1m的窗口是为了平滑短时间波动,你可以根据自己的指标采集间隔调整(比如采集间隔15s的话,用30s窗口也可以)
  • sum by (instance):把同一个实例下所有CPU核的空闲速率汇总,得到整个实例的总空闲CPU占比
  • 除以sum by (instance) (rate(node_cpu_seconds_total[1m]))(整个实例的总CPU时间速率),得到空闲CPU的比例
  • 1 - 空闲比例再乘100,就得到该实例的瞬时CPU使用率
  • 最外层的avg_over_time(...)[$__range]:对Grafana当前选择的整个时间段内的瞬时使用率取平均,最终得到每个实例在这段时间的单一平均使用率值

这里的$__range是Grafana的内置变量,会自动匹配你在时间选择器里选的时间段(比如最近3小时),不用手动修改时间范围,非常灵活。

如果你的实例不是用instance标签区分的(比如K8s里用pod或hostname),只需要把sum by (instance)改成对应的标签即可,比如sum by (pod)。

二、Grafana表格配置步骤

有了查询语句,接下来在Grafana里配置表格:

  1. 新建一个Table面板(或者编辑现有面板)
  2. 切换到Query标签页,数据源选择你的Prometheus实例,把上面的查询语句粘贴进去
  3. (可选)给查询设置别名:比如在查询的Alias输入框里填$instance,这样表格里的实例列会直接显示实例名,更直观
  4. 切换到Panel options标签页,你可以调整表格的显示样式:
    • 在Column styles里,把数值列的格式改成Percent,或者保留数字并添加%后缀
    • 调整列的宽度、排序方式,比如按平均CPU使用率从高到低排序
  5. 最后在Grafana顶部的时间选择器里选你需要的时间段(比如最近3小时),表格就会自动加载每个实例的平均CPU使用率了

注意事项

  • 确保你的Prometheus已经正确采集到CPU指标,比如node_exporter是否正常运行,指标是否能在Prometheus UI里查询到
  • 如果查询结果出现空值,检查rate的窗口是否太小(比如窗口小于2倍的采集间隔,会导致rate无法计算),可以适当调大窗口时间
  • 如果需要排除某些实例,直接在查询的指标标签里添加过滤条件,比如node_cpu_seconds_total{mode="idle", instance!="xxx:9100"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:23:41