使用PromQL结合node-exporter查询多服务器近1分钟峰值CPU使用率报错
解决PromQL获取多服务器1分钟峰值CPU使用率的问题
错误原因分析
- 第一个查询报错:
max_over_time函数要求输入范围向量,但sum(1-rate(node_cpu_seconds_total{mode="idle", instance!="epgp003:9401"}[1m])) by(instance)返回的是瞬时向量,类型不匹配导致解析失败。 - 第二个查询报错:语法结构错误,
by(instance)属于sum()函数的分组逻辑,必须放在sum()的括号内部,而非max_over_time参数的外部。 - 第三个查询问题:返回的是每个实例各自的1分钟CPU峰值,而非所有实例中的单一最大值。
正确PromQL查询语句
max(max_over_time((1 - rate(node_cpu_seconds_total{mode="idle", instance!="epgp003:9401"}[1m])) by (instance)[1m:]))
语句拆解说明
- 计算单实例CPU使用率:
1 - rate(node_cpu_seconds_total{mode="idle", instance!="epgp003:9401"}[1m])
通过rate计算空闲CPU的每秒速率,用1减去该值得到当前实例的CPU使用率。 - 按实例分组:
(...) by (instance)
将计算结果按服务器实例分组,得到每个实例的CPU使用率瞬时向量。 - 转换为范围向量:
[1m:]
将瞬时向量转换为最近1分钟的范围向量,满足max_over_time的参数要求。 - 取单实例1分钟峰值:
max_over_time(...)
计算每个实例在最近1分钟内的CPU使用率峰值。 - 取全局最大值:
max(...)
对所有实例的峰值结果取最大值,得到多台服务器中最近1分钟的CPU使用率峰值。
内容的提问来源于stack exchange,提问作者user1876484
相关产品推荐
相关产品推荐

