Skip to content
DevOps AI ToolKit
Newsletter
All guides
AI for Grafana By James Joyner IV · · 9 min read

Grafana Error Guide: Provisioning 'Dashboard Not Found' — Fix the Path & Provider

Fix Grafana provisioning 'dashboard not found' errors — correct the provider path, file permissions, JSON validity, folder mapping, and reload provisioning so dashboards load from disk.

  • #grafana
  • #troubleshooting
  • #errors
  • #provisioning

Overview

Grafana can load dashboards from disk at startup and on an interval using a dashboard provider defined under /etc/grafana/provisioning/dashboards/. The provider points options.path at a directory of JSON files. When that path is wrong, unreadable, empty, or the JSON is invalid, Grafana logs a provisioning error and the expected dashboards never appear — even though the app starts fine.

The literal errors you will see:

logger=provisioning.dashboard type=file name=default error="dashboard not found"
logger=provisioning.dashboard error="failed to search for dashboards: stat /var/lib/grafana/dashboards: no such file or directory"
logger=provisioning.dashboard level=error msg="failed to load dashboard from " file=/var/lib/grafana/dashboards/prod.json error="invalid character '}' looking for beginning of object key string"

It occurs at boot and on each provisioning reload. The Grafana UI comes up, but the provisioned folder is empty or missing.

Symptoms

  • Expected dashboards are absent from the folder after deploy.
  • Startup log shows provisioning.dashboard ... error.
  • /api/dashboards/uid/<uid> returns 404 Not Found for a UID you provisioned.
  • A container mounts the JSON but Grafana still shows nothing.
journalctl -u grafana-server --no-pager | grep -i "provisioning.dashboard" | tail
logger=provisioning.dashboard type=file name=default error="stat /var/lib/grafana/dashboards: no such file or directory"

Common Root Causes

1. Provider path doesn’t exist / isn’t mounted

The options.path directory is missing on the Grafana host or the volume mount didn’t land where the provider expects.

# /etc/grafana/provisioning/dashboards/default.yaml
apiVersion: 1
providers:
  - name: 'default'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 30
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards
      foldersFromFilesStructure: true
ls -la /var/lib/grafana/dashboards
ls: cannot access '/var/lib/grafana/dashboards': No such file or directory

2. File permissions block the grafana user

The JSON exists but is not readable by the grafana user (or Chrome/UID inside the container).

ls -la /var/lib/grafana/dashboards/*.json
-rw------- 1 root root 5123 prod.json   # grafana user can't read it

3. Invalid dashboard JSON

A trailing comma or a templated value that wasn’t rendered makes the file unparseable, so that dashboard is skipped.

jq empty /var/lib/grafana/dashboards/prod.json
parse error: Expected another key-value pair at line 42, column 3

4. Target folder / folderUid mismatch

foldersFromFilesStructure or an explicit folder/folderUid points at a folder that doesn’t resolve, so dashboards load into an unexpected place — or not at all.

5. Provider config not picked up

The provider YAML is in the wrong directory, has a bad apiVersion, or Grafana wasn’t restarted/reloaded after the change.

Diagnostic Workflow

Step 1: Read the provisioning log for the exact failure

journalctl -u grafana-server --no-pager | grep -iE "provisioning.dashboard|failed to load dashboard" | tail -20
# Container:
docker logs grafana 2>&1 | grep -i provisioning | tail -20

Step 2: Verify the provider config and path

cat /etc/grafana/provisioning/dashboards/*.yaml
ls -la /var/lib/grafana/dashboards

Confirm options.path matches where the files actually are.

Step 3: Check permissions and readability

sudo -u grafana test -r /var/lib/grafana/dashboards/prod.json && echo readable || echo "NOT readable"
stat -c '%U:%G %a %n' /var/lib/grafana/dashboards/*.json

Step 4: Validate every JSON file

for f in /var/lib/grafana/dashboards/*.json; do jq empty "$f" 2>&1 | sed "s|^|$f: |"; done

Step 5: Reload provisioning without a full restart

curl -s -X POST -H "Authorization: Bearer $ADMIN_TOKEN" \
  http://localhost:3000/api/admin/provisioning/dashboards/reload
{"message":"Dashboards config reloaded"}

Example Root Cause Analysis

A Helm-deployed Grafana starts cleanly but the “Platform” folder is empty. The log:

logger=provisioning.dashboard type=file name=platform error="stat /etc/grafana/dashboards: no such file or directory"

The provider expects /etc/grafana/dashboards, but the ConfigMap of JSON files was mounted at /var/lib/grafana/dashboards. The path in the provider YAML and the volumeMount disagree.

kubectl -n monitoring exec deploy/grafana -- ls /etc/grafana/dashboards 2>&1
kubectl -n monitoring exec deploy/grafana -- ls /var/lib/grafana/dashboards
ls: /etc/grafana/dashboards: No such file or directory
home.json  prod.json

Fix: align the provider options.path with the actual mount:

options:
  path: /var/lib/grafana/dashboards

Redeploy, then reload provisioning; the dashboards appear. Root cause: a path mismatch between the dashboard provider and the volume mount — Grafana was reading an empty directory.

Prevention Best Practices

  • Keep the provider options.path and the actual mount path identical; template both from one variable in Helm/compose.
  • Ensure files are readable by the grafana user/UID (chmod 0644, correct ownership); avoid root:root 600.
  • Validate dashboard JSON in CI with jq empty (or a schema check) before it ships.
  • Use foldersFromFilesStructure: true intentionally and confirm folders resolve as expected.
  • After changing provider config, hit /api/admin/provisioning/dashboards/reload rather than assuming a hot reload.
  • See more Grafana guides and the sibling cannot-delete-provisioned guide.

Quick Command Reference

# Exact provisioning error
journalctl -u grafana-server | grep -iE "provisioning.dashboard|failed to load" | tail
docker logs grafana 2>&1 | grep -i provisioning | tail

# Provider config + path
cat /etc/grafana/provisioning/dashboards/*.yaml
ls -la /var/lib/grafana/dashboards

# Permissions + JSON validity
sudo -u grafana test -r /var/lib/grafana/dashboards/prod.json && echo ok || echo NO
for f in /var/lib/grafana/dashboards/*.json; do jq empty "$f"; done

# Reload provisioning (no restart)
curl -s -X POST -H "Authorization: Bearer $ADMIN_TOKEN" \
  http://localhost:3000/api/admin/provisioning/dashboards/reload

Conclusion

A provisioning “dashboard not found” means the file provider couldn’t read valid dashboard JSON from the path you gave it. Grafana starts anyway, so the app being up doesn’t prove provisioning worked. Typical root causes:

  1. The provider options.path doesn’t exist or the volume mounted elsewhere.
  2. File permissions block the grafana user from reading the JSON.
  3. Invalid JSON (trailing commas, unrendered templates) skips a dashboard.
  4. A folder/folderUid mismatch loads dashboards into the wrong place or nowhere.
  5. Provider config in the wrong dir or not reloaded.

Read the provisioning.dashboard log line first — it names the failing path or file — then reconcile the provider path with where the files actually live.

Free download · 368-page PDF

Download the Free 500-Prompt DevOps AI Toolkit

500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.

  • 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
  • Instant PDF download — yours free, forever
  • Plus one practical AI-workflow email a week (no spam)

Single opt-in · unsubscribe anytime · no spam.