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

直接通过Deployment部署Grafana时,如何正确加载Dashboard?

解决Grafana Dashboard挂载后为Base64编码的问题及优化方案

一、获取明文文件的直接解决方法

方法1:修改ConfigMap存储明文JSON(推荐)

你之前的Base64编码是多余操作,ConfigMap支持直接存储明文JSON内容,只需用YAML多行文本语法保留格式即可:

kind: ConfigMap
metadata:
  name: grafana-dashboard
  namespace: monitoring
data:
  dashboard.json: |
    {
      "title": "你的仪表盘标题",
      "uid": "unique-id",
      // 剩余仪表盘JSON内容
    }

重新创建ConfigMap后,原挂载配置无需修改,挂载后/var/lib/grafana/dashboards/dashboard.json会直接是明文JSON文件,Grafana可正常识别。

方法2:通过InitContainer解码现有Base64内容(临时方案)

如果暂时不想修改ConfigMap,可在Deployment中添加InitContainer,在Pod启动前完成解码:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
spec:
  template:
    spec:
      initContainers:
      - name: decode-dashboard
        image: busybox:latest
        command: ['sh', '-c', 'base64 -d /tmp/dashboards/default > /var/lib/grafana/dashboards/dashboard.json']
        volumeMounts:
        - name: grafana-dashboard
          mountPath: /tmp/dashboards
        - name: dashboard-dir
          mountPath: /var/lib/grafana/dashboards
      containers:
      - name: grafana
        image: grafana/grafana:latest
        volumeMounts:
        - name: dashboard-dir
          mountPath: /var/lib/grafana/dashboards
        # 其他容器配置(端口、环境变量等)
      volumes:
      - name: grafana-dashboard
        configMap:
          name: grafana-dashboard
      - name: dashboard-dir
        emptyDir: {}

InitContainer会先将ConfigMap中的Base64内容解码到临时目录,主容器再读取解码后的明文文件。

二、更优的Dashboard导入方案

方案1:使用Grafana Provisioning自动导入(推荐)

Grafana支持通过配置文件自动扫描并导入仪表盘,比直接挂载文件更稳定,步骤如下:

  1. 创建包含provisioning配置和仪表盘JSON的ConfigMap:
kind: ConfigMap
metadata:
  name: grafana-provisioning
  namespace: monitoring
data:
  dashboards.yaml: |
    apiVersion: 1
    providers:
    - name: "default"
      orgId: 1
      folder: ""
      type: file
      disableDeletion: false
      updateIntervalSeconds: 10
      options:
        path: /var/lib/grafana/dashboards
  dashboard.json: |
    {
      "title": "你的仪表盘标题",
      "uid": "unique-id",
      // 剩余仪表盘JSON内容
    }
  1. 修改Deployment挂载ConfigMap到对应目录:
volumeMounts:
- name: grafana-provisioning
  mountPath: /etc/grafana/provisioning/dashboards/dashboards.yaml
  subPath: dashboards.yaml
- name: grafana-provisioning
  mountPath: /var/lib/grafana/dashboards
volumes:
- name: grafana-provisioning
  configMap:
    name: grafana-provisioning

Grafana启动后会自动读取provisioning配置,扫描指定目录的JSON文件并导入仪表盘,无需手动操作。

方案2:批量导入多个仪表盘

如果需要导入多个仪表盘,只需在ConfigMap中为每个JSON文件添加一个key:

data:
  dashboards.yaml: |
    # 同上provisioning配置
  dashboard1.json: |
    // 仪表盘1的JSON内容
  dashboard2.json: |
    // 仪表盘2的JSON内容

挂载/var/lib/grafana/dashboards目录后,Grafana会自动扫描所有.json文件并导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:00:24