如何在单个Grafana仪表盘展示所有命名空间下应用Pod的内存使用情况?
实现跨所有命名空间展示特定应用Pod内存使用情况
完全可以实现,只需要调整Prometheus查询语句并配合Grafana的面板配置即可,具体操作如下:
调整Prometheus查询语句
内存使用量查询(原语句A)
原语句限定了单个$namespace,要覆盖所有命名空间的数据,需移除该过滤条件,同时保留namespace标签用于分组;如果要筛选特定应用的Pod,可添加Pod名称的正则匹配:
sum(container_memory_working_set_bytes{cluster="$cluster", container!="", image!="", pod=~".*你的应用标识.*"}) by (namespace, pod)
- 移除
namespace="$namespace":让查询覆盖所有命名空间 - 添加
namespace到by()分组:保留Pod所属的命名空间信息,方便区分展示 pod=~".*你的应用标识.*":替换成你应用的Pod名称特征(比如应用名前缀),只查询目标应用的Pod
内存配额查询(原语句B)
原语句用scalar()只返回单个命名空间的配额值,要获取所有命名空间的配额,去掉scalar()和namespace="$namespace"过滤:
kube_resourcequota{cluster="$cluster", type="hard", resource="requests.memory"}
这样会返回每个命名空间对应的内存配额,自动带上namespace标签。
Grafana面板配置
- 分组展示:在折线图/柱状图的图例设置中,选择按
namespace和pod分组,图例会显示[namespace]/[pod]的组合,清晰区分不同命名空间下的Pod数据 - 双轴对比:如果要同时展示内存使用量和配额,可把两个查询放在同一个面板,设置双Y轴(左侧显示使用量,右侧显示配额)
- 灵活筛选:可以添加Grafana变量(比如
$app),通过PromQL查询动态获取应用标识;或者保留$namespace变量设为可选,让用户手动筛选特定命名空间查看数据
内容的提问来源于stack exchange,提问作者Rafa S
相关产品推荐
相关产品推荐

