如何用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
相关产品推荐
相关产品推荐

