如何用Prometheus的PromQL获取运行指定Pod的Kubernetes节点数
正确的PromQL查询方案:统计运行指定Pod的Kubernetes节点数量
原查询的问题
kube_pod_created是事件型指标,仅记录Pod创建的瞬间,无法反映Pod当前是否仍在运行,会把已销毁Pod对应的节点也纳入统计- 嵌套sum的逻辑冗余,且
by(time)会将结果按时间拆分成多个数据点,不符合Grafana数字展示的需求(我们需要单一数值结果)
两种场景的正确查询语句
1. 当前时刻运行指定Pod的节点数量
使用kube_pod_status_running指标(需确保kube-state-metrics已采集该指标),它仅标记处于Running状态的Pod:
count(count(kube_pod_status_running{pod=~"distributed-jmeter-slave.*", status="true"}) by (node))
逻辑:先按node分组,统计每个节点上符合条件的Running Pod数量,再对分组结果计数,得到节点总数。
2. 指定时间范围内曾运行过指定Pod的节点数量
如果要统计比如最近5分钟内,只要运行过该类Pod的节点都算(不管Pod当前是否存活),可以用kube_pod_info结合时间范围查询:
count(count_over_time(kube_pod_info{pod=~"distributed-jmeter-slave.*"}[5m]) by (node))
逻辑:kube_pod_info是描述Pod基本信息的指标,只要Pod存在就会被采集;count_over_time统计5分钟内每个节点上出现过的该类Pod样本数,再对节点分组结果计数,得到这段时间内涉及的节点总数。
Grafana展示设置
- 选择Stat类型的面板,将上述查询语句填入Metrics浏览器
- 调整时间范围到你需要的区间,面板会自动展示单一的数字结果
内容的提问来源于stack exchange,提问作者Udara Manupriya
相关产品推荐
相关产品推荐

