如何通过Prometheus API获取实例汇总CPU使用率?
Prometheus API查询CPU使用率返回400错误的解决方法
问题背景
- 可在Prometheus GUI正常运行的CPU使用率查询语句:
(100 * avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[1m]))) - 需求:通过Prometheus API的curl请求获取相同结果
- 尝试的请求及问题:
- 单指标请求:
curl -g 'http://localhost:9090/api/v1/query?query=node_cpu_seconds_total'
返回单个CPU的使用率数据,不符合汇总需求 - 带聚合逻辑的请求:
curl -g 'http://localhost:9090/api/v1/query?query=(100 * avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[1m])))'
返回400 Bad Request错误
- 单指标请求:
解决思路及修正请求
错误原因是查询语句中的特殊字符(如!、"、[、])未正确URL编码,即使使用-g参数也无法完全避免解析失败。推荐两种修正方式:
方式1:手动URL编码查询语句
对特殊字符编码后,请求如下:
curl 'http://localhost:9090/api/v1/query?query=(100%20*%20avg%20by%20(instance)%20(rate(node_cpu_seconds_total%7Bmode!%3D%22idle%22%7D%5B1m%5D)))'
方式2:使用curl自动编码(推荐)
借助-G和--data-urlencode参数,让curl自动处理编码,无需手动转换:
curl -G 'http://localhost:9090/api/v1/query' --data-urlencode 'query=(100 * avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[1m])))'
-G:将--data-urlencode的内容转换为GET请求的查询参数--data-urlencode:自动对查询语句中的特殊字符进行URL编码,确保API能正确解析
内容的提问来源于stack exchange,提问作者Nil2a
相关产品推荐
相关产品推荐

