通过动态变量env实现三环境切换,使同一看板自动适配不同prometheus数据源或environment标签,无需复制;配置custom变量、修改promql、联动标题与权限控制即可完成。

用动态变量实现三环境切换,核心是让同一套看板能根据选择自动适配不同Prometheus数据源或不同标签维度的数据,无需复制多个看板。关键不在于物理隔离本身(那是网络/部署层的事),而在于Grafana如何“识别并路由”到对应环境的数据。
一、前提:三环境已具备可区分的监控数据
确保开发、测试、生产三套环境的指标已分别上报至Prometheus,并满足以下任一条件:
- 独立Prometheus实例:每个环境有专属Prometheus服务(如 dev-prom:9090、test-prom:9090、prod-prom:9090)
-
统一Prometheus + 环境标签:所有指标都带统一标签,例如
environment="dev"、environment="test"、environment="prod"(推荐,更易维护)
二、创建全局环境变量
进入目标看板 → 右上角 Dashboard settings(齿轮图标)→ Variables → Add variable:
一款AI开发辅助工具,主要用于使用 OpenCLI 工具,可从各类网站及桌面应用中提取数据、下载媒体内容、控制外部 CLI 工具。支持 Bilibili、知乎、小红书、Twitter/X、Reddit、YouTube、Boss直聘、即刻、微博等 30+ 个平台,以及 Cursor、Codex、ChatGPT、Notion 等桌面应用。当用户需要:从社...,适合需要提升相关任务效率的用户。
-
Name:
env(后续PromQL和面板中引用用) -
Label:
Environment(界面上显示的文字) -
Type:
Custom -
Options: 输入三行:
dev、test、prod(每行一个,顺序即下拉菜单顺序) -
Default values: 勾选
dev(首次打开默认进开发环境) - Multi-value 和 Include All option 按需开启(如需同时比对两个环境则开)
三、按数据源类型配置PromQL查询
在每个面板的查询编辑区,修改PromQL使其感知 $env 变量:
-
场景1:统一Prometheus + environment标签
原查询:100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
改为:100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle", environment=~"$env"}[5m])) * 100) -
场景2:三个独立Prometheus数据源
需先在Grafana中添加三个数据源(如Prom-Dev、Prom-Test、Prom-Prod)
然后在面板Query设置里,将 Data source 改为Variable类型,值设为$env;再定义变量映射:
—dev→Prom-Dev
—test→Prom-Test
—prod→Prom-Prod
四、让图表标题和说明也随环境变化
避免看板顶部还写着“生产环境CPU”,实际却切到了测试环境——这种误导很危险。
- 编辑面板 → Panel title 字段支持模板变量,写成:
CPU Usage ($env) - 添加一个 Text 面板,内容用Markdown:
## 当前环境:**$env** | 数据更新于 `now` - 若需强调环境风险(如生产环境加红标),可用CSS类+自定义样式插件,或直接在Text面板中写:
<font color="red">⚠️ 生产环境,请谨慎操作</font>并配合变量条件显示(需启用Transform → Filter data by query)
五、进阶:环境联动与权限控制
仅靠变量还不够健壮,建议补充两层防护:
-
URL参数固化:分享链接时带上
?var-env=prod,确保他人打开即锁定生产视角,避免误切 - 组织级隔离:在Grafana中为dev/test/prod分别建三个Organization,把对应用户加入对应Org,并限制其只能看到本Org内的数据源和看板(需企业版或配置LDAP组同步)
-
告警静默策略:使用
$env变量配置告警规则,例如只对environment="prod"触发短信通知,dev/test仅站内提示










