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

如何用PromQL获取特定时间点CPU使用率及设置step参数

当前使用的PromQL查询语句

CPU总和

curl -s -G "http://10.192.248.10:30000/api/v1/query" --data-urlencode "query=sum_over_time(container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}[10m])" | jq

CPU平均值

curl -s -G "http://10.192.248.10:30000/api/v1/query" --data-urlencode "query=avg_over_time(container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}[10m])" | jq

CPU数据点

curl -s -G "http://10.192.248.10:30000/api/v1/query" --data-urlencode "query=container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}[10m]" | jq
技术问题解答

1. 为「CPU数据点」查询传入step参数,指定返回数据点数量

你当前用的/api/v1/query是即时查询接口,不支持step参数。要控制时间窗口内的数据点采样间隔,需改用**/api/v1/query_range**(范围查询接口),它支持step参数,同时需要指定查询的时间范围(start和end)。

示例命令(10分钟窗口,每1分钟采样1个点,共返回10个数据点):

curl -s -G "http://10.192.248.10:30000/api/v1/query_range" \
  --data-urlencode "query=container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}" \
  --data-urlencode "start=$(date -d '-10 minutes' +%s)" \
  --data-urlencode "end=$(date +%s)" \
  --data-urlencode "step=1m" | jq
  • 数据点数量计算逻辑:数据点数量 = 时间窗口长度 / step,比如要在10分钟窗口返回20个点,step设为30s即可(10m=600s,600/20=30s)。
  • step支持的时间单位:s(秒)、m(分钟)、h(小时),例如5s、2m。

2. 获取特定时间点的CPU使用率(基于container_cpu_usage_seconds_total)

完全可行。container_cpu_usage_seconds_total是累计型counter指标,CPU使用率需要通过计算其增长率得到,结合PromQL的rate()或irate()函数,再通过time参数指定查询的时间点即可。

方式1:用rate()计算平滑使用率(适合趋势分析)

rate()基于指定窗口内的所有数据点计算平均增长率,结果更平滑:

curl -s -G "http://10.192.248.10:30000/api/v1/query" \
  --data-urlencode "query=rate(container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}[1m])" \
  --data-urlencode "time=1699999200" | jq
  • time参数填入目标时间点的Unix时间戳,比如1699999200对应2023-11-14 10:00:00。
  • 结果单位为核数(每秒使用的CPU秒数,即占用的CPU核心数),若需百分比,可乘以100并结合节点CPU核心数计算(例如rate(...) * 100 / count(node_cpu_seconds_total{mode='idle'}) by (instance))。

方式2:用irate()计算瞬时使用率(适合快速响应)

irate()基于最近两个数据点计算增长率,响应更快但波动较大,适合需要瞬时值的场景:

curl -s -G "http://10.192.248.10:30000/api/v1/query" \
  --data-urlencode "query=irate(container_cpu_usage_seconds_total{pod='f5ingress-f5ingress-55ff78b955-vqxch', namespace='arka-ingress'}[1m])" \
  --data-urlencode "time=1699999200" | jq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:35:21