如何从文件配置变量并用于PromQL,实现Grafana中Docker栈数据切换
实现Grafana面板的栈数据切换功能
1. 在Grafana仪表盘创建自定义变量
无需修改Prometheus或Docker配置,直接在Grafana内完成变量定义:
- 打开你的Docker容器/主机仪表盘,点击顶部齿轮图标进入设置→选择变量选项卡
- 点击添加变量,按以下配置:
- 名称:
stack_namespace(可自定义,便于识别即可) - 类型:选择「自定义」
- 自定义选项:输入两行内容:
All xyz_stack_1 - 默认值:设置为
All(默认显示全量容器数据) - 点击保存变量
- 名称:
2. 修改PromQL查询,动态引用变量
将原有两个查询合并为一个带变量的动态查询,实现切换逻辑:
简洁写法(推荐)
sum(rate(container_cpu_usage_seconds_total{ container_label_com_docker_stack_namespace=~"{{ stack_namespace | replace('All', '.+') }}" }[$interval])) by (name) * 100
逻辑清晰写法(适合新手理解)
sum(rate(container_cpu_usage_seconds_total{ {% if stack_namespace == "All" %} name=~".+" {% else %} container_label_com_docker_stack_namespace=~"{{ stack_namespace }}" {% endif %} }[$interval])) by (name) * 100
解释:当变量选All时,匹配所有容器;选xyz_stack_1时,仅匹配该栈下的容器。
3. 验证切换效果
返回仪表盘,顶部会出现stack_namespace下拉按钮,切换All和xyz_stack_1即可看到面板数据同步变化。
关于配置文件的说明
该需求无需修改docker-compose.yaml、prometheus.yml或grafana.ini——变量是Grafana仪表盘层面的配置,直接在Grafana内定义即可。如果需要固化配置,可导出仪表盘JSON文件(包含变量定义),导入到其他Grafana实例就能复用该功能。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

