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

