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

Kubernetes部署Grafana时仪表盘配置失败求助

问题排查与修复方案

核心错误分析

错误信息明确显示:

lvl=eror msg="Server shutdown" logger=server error="*provisioning.ProvisioningServiceImpl run error: Failed to create provisioner: Failed to read dashboards config: could not parse provisioning config file: dashboards.yaml error: read /etc/grafana/provisioning/dashboards/dashboards.yaml: is a directory"

问题本质是:Grafana尝试读取/etc/grafana/provisioning/dashboards/dashboards.yaml作为配置文件,但该路径实际是一个目录,导致配置解析失败,服务启动终止。


具体问题点及修复步骤

1. 解决挂载路径冲突

你的Deployment中,首先通过grafana-pv将PVC的provisioning子目录挂载到了/etc/grafana/provisioning,这意味着该目录下的dashboards子目录完全由PVC存储内容控制。后续你又尝试将grafana-dashboards ConfigMap中的dashboards.yml挂载到/etc/grafana/provisioning/dashboards/dashboards.yml,如果PVC的provisioning/dashboards目录下已存在名为dashboards.yaml的目录(Grafana会自动扫描该目录下的.yaml/.yml文件作为配置),就会触发这个错误。

修复后的Deployment挂载配置:
将PVC挂载到Grafana的数据存储目录(而非配置目录),避免覆盖配置目录的原有结构:

volumeMounts:
  # 将PVC挂载到Grafana数据目录,而非配置目录
  - mountPath: /var/lib/grafana
    name: grafana-pv
  - mountPath: '/etc/grafana/grafana.ini'
    name: grafana-ini
  - mountPath: '/etc/grafana/provisioning/dashboards/dashboards.yml'
    name: grafana-dashboards
    subPath: dashboards.yml
  - mountPath: '/etc/grafana/provisioning/dashboards/Home.json'
    name: grafana-home
    subPath: Home.json

2. 修正dashboards.yml的格式错误

你的grafana-dashboards ConfigMap中的配置文件错误使用了JSON风格的大括号{},且存在语法缺失(YAML格式不需要大括号,且键值对后需正确换行),这会导致Grafana解析失败。

修复后的dashboards.yml内容:

apiVersion: 1
providers:
  # Folders
  - name: 'test1Status'
    folder: 'test1Status'
    folderUid: 'test1'
    options:
      path: /etc/grafana/provisioning/dashboards/test1
  - name: 'test2Status'
    folder: 'test2Status'
    folderUid: 'test2'
    options:
      path: /etc/grafana/provisioning/dashboards/test2

  # Separate dashboards (General folder)
  - name: 'Versions info'
    options:
      path: /etc/grafana/provisioning/dashboards/Versions-info.json
  - name: 'Home'
    options:
      path: /etc/grafana/provisioning/dashboards/Home.json
  - name: 'Namespaces'
    options:
      path: /etc/grafana/provisioning/dashboards/Namespaces.json

3. 确保配置的目录存在

在dashboards.yml中配置的test1、test2目录需要在容器中存在,否则Grafana会触发目录不存在的错误。可以通过添加initContainer创建这些目录:

# 在Deployment的spec.template.spec下添加initContainer
initContainers:
  - name: create-dashboard-directories
    image: busybox:latest
    command: ['mkdir', '-p', '/etc/grafana/provisioning/dashboards/test1', '/etc/grafana/provisioning/dashboards/test2']
    volumeMounts:
      - mountPath: /etc/grafana/provisioning/dashboards
        name: dashboards-temp-dir

# 在volumes下添加临时卷
volumes:
  - name: dashboards-temp-dir
    emptyDir: {}

4. 统一配置文件后缀

Grafana会扫描provisioning/dashboards下的.yaml和.yml文件,确保你的配置文件后缀一致,避免出现同名的目录和文件(比如不要同时存在dashboards.yaml目录和dashboards.yml文件)。


验证修复

  1. 更新ConfigMap:
kubectl apply -f grafana-dashboards-configmap.yaml
  1. 更新Deployment:
kubectl apply -f grafana-deployment.yaml
  1. 查看Pod日志确认错误消失:
kubectl logs <grafana-pod-name>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:25:26