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

如何查询Kubernetes全集群所有节点及命名空间的内存使用率占比?

如何用PromQL查询K8s集群所有节点的内存使用率

问题描述

我使用以下PromQL查询语句:

100 * (1 - ((avg_over_time(node_memory_MemFree_bytes[10m]) + avg_over_time(node_memory_Cached_bytes[10m]) + avg_over_time(node_memory_Buffers_bytes[10m])) / avg_over_time(node_memory_MemTotal_bytes[10m])))

但该查询仅返回Prometheus所在的monitoring命名空间的结果:

{instance="10.240.0.11:9100", job="kubernetes-service-endpoints", kubernetes_name="node-exporter", kubernetes_namespace="monitoring"}
5.58905365516873
{instance="10.240.0.11:9100", job="node-exporter"}
5.588556605118522
{instance="10.240.0.42:9100", job="kubernetes-service-endpoints", kubernetes_name="node-exporter", kubernetes_namespace="monitoring"}
5.093870850709847
{instance="10.240.0.42:9100", job="node-exporter"}
5.09401539556571
{instance="10.240.0.90:9100", job="kubernetes-service-endpoints", kubernetes_name="node-exporter", kubernetes_namespace="monitoring"}
5.103046564234582
{instance="10.240.0.90:9100", job="node-exporter"}

请问是否可以实现查询整个集群所有节点及命名空间的类似查询?若可以,该如何操作?

解决方案

可以实现,按以下步骤操作:

1. 确认Node Exporter的采集范围

首先要保证Prometheus能采集到所有节点的Node Exporter指标:

  • 用DaemonSet部署Node Exporter,确保集群每个节点上都运行了实例。
  • 检查Prometheus的scrape_configs配置,针对Node Exporter的部分不要添加kubernetes_namespace: monitoring这类过滤条件,让服务发现能覆盖所有节点的端点。
  • 验证Prometheus的RBAC权限,确保它有权限访问所有命名空间的Service和Pod元数据。

2. 调整PromQL查询,避免标签干扰

你的查询逻辑本身没问题,可通过以下方式优化,确保返回所有节点数据:

  • 若想按节点实例聚合结果,避免多标签重复返回,用by (instance)关键字:
    100 * (1 - (
      (avg_over_time(node_memory_MemFree_bytes[10m]) by (instance) + avg_over_time(node_memory_Cached_bytes[10m]) by (instance) + avg_over_time(node_memory_Buffers_bytes[10m]) by (instance)) 
      / avg_over_time(node_memory_MemTotal_bytes[10m]) by (instance)
    ))
    
  • 若想去掉冗余标签(比如命名空间、job),用without关键字简化结果:
    100 * (1 - ((avg_over_time(node_memory_MemFree_bytes[10m]) + avg_over_time(node_memory_Cached_bytes[10m]) + avg_over_time(node_memory_Buffers_bytes[10m])) / avg_over_time(node_memory_MemTotal_bytes[10m])))
    without (kubernetes_namespace, job)
    

3. 验证指标采集状态

在Prometheus UI中单独查询node_memory_MemTotal_bytes,查看返回的instance标签是否包含集群所有节点的IP。如果只有monitoring命名空间的实例,说明采集配置存在问题,需先调整采集范围再重新执行查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:48