Grafana Provisioning: Automate Dashboards & Data Sources
Learn how to automate Grafana dashboard and data source management using provisioning. This guide covers best practices, YAML examples, and tips to streamline observability with configuration as code.
Introduction
Grafana provisioning transforms dashboard and data source management by enabling configuration as code. For DevOps engineers and SREs, this approach delivers reliable, reproducible, and scalable observability environments—ideal for fast-moving teams and modern CI/CD workflows.
What Is Grafana Provisioning?
Provisioning in Grafana is the process of defining dashboards, data sources, alerting rules, and other resources through configuration files, typically YAML. These files are version-controlled and automatically applied when Grafana starts, or updated continuously as files change. This eliminates manual configuration, reduces errors, and enables portability across environments.
Why Provision Grafana?
- Consistency: Guarantee identical dashboards and data sources across dev, staging, and production.
- Version Control: Store configurations in Git for auditability and collaboration.
- Automation: Integrate with CI/CD pipelines for zero-touch deployments.
- Scalability: Manage large, distributed Grafana deployments efficiently.
How Grafana Provisioning Works
Grafana actively scans defined provisioning directories for configuration files. When changes are detected, it creates or updates dashboards, data sources, and more, according to the file definitions. Supported resources include:
- Dashboards
- Data sources
- Alerting resources (from v9+)
- Folders
Directory Structure
The provisioning directory typically lives in /etc/grafana/provisioning/ or <install_dir>/conf/provisioning/. The structure is:
provisioning/
datasources/
datasource.yaml
dashboards/
dashboards.yaml
alerting/
alerting.yaml
Step-by-Step: Provisioning Dashboards
1. Configure Provisioning Paths
Edit grafana.ini to allow provisioning from desired directories. For example:
[feature_toggles]
provisioning = true
kubernetesDashboards = true
[paths]
permitted_provisioning_paths = /etc/grafana/provisioning/ | /var/lib/grafana/dashboards/
Restart Grafana after updating grafana.ini to apply changes.
Paths ensure only trusted directories are used for provisioning [1].
2. Create a Dashboard Provider
In provisioning/dashboards/, create a YAML file (e.g., default.yaml):
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: 'Production Monitoring'
type: file
disableDeletion: false
updateIntervalSeconds: 10
allowUiUpdates: false
options:
path: /var/lib/grafana/dashboards
foldersFromFilesStructure: true
This configuration tells Grafana to scan /var/lib/grafana/dashboards every 10 seconds for JSON dashboard definitions, placing them in the Production Monitoring folder [4].
3. Add Dashboard JSON Files
Place exported dashboard JSON files in the /var/lib/grafana/dashboards directory. Example:
/var/lib/grafana/dashboards/
node_exporter_overview.json
application_latency.json
On Grafana startup—or when files change—these dashboards are created or updated automatically.
Step-by-Step: Provisioning Data Sources
1. Create a Data Source YAML
In provisioning/datasources/, create datasource.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false
This defines a Prometheus data source, set as default and not editable from the UI [2][4].
Best Practices for Grafana Provisioning
- Version Control: Store all YAML and dashboard JSON files in a Git repository.
- CI/CD Integration: Use pipeline steps to deploy updated provisioning files as part of your release process [3].
- Use Folders: Organize dashboards with folders for multi-team or multi-environment setups.
- Secure Paths: Limit
permitted_provisioning_pathsto trusted directories only. - Test in Staging: Validate provisioning in a non-production environment before rolling out changes globally.
Advanced: Provisioning with CI/CD
Automate provisioning updates with a CI/CD pipeline. For example, using GitHub Actions:
name: Provision Grafana Dashboards
on:
push:
paths:
- provisioning/**
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Copy provisioning files
run: |
scp -r provisioning/ user@grafana-server:/etc/grafana/provisioning/
- name: Restart Grafana
run: ssh user@grafana-server 'sudo systemctl restart grafana-server'
This ensures any dashboard or data source change in your repository is automatically applied to your Grafana server [3].
Troubleshooting Common Issues
- Incorrect Paths: Ensure dashboard/data source files are in the correct directory, and that
grafana.inipermits those paths. - File Permissions: The Grafana process must have read access to all provisioned files.
- YAML Syntax: Watch out for indentation and formatting errors in YAML files.
- Dashboard Visibility: If dashboards don't appear, check the provider configuration and ensure JSON files are valid.
Conclusion
Grafana provisioning is essential for scalable, reliable observability. By leveraging configuration as code, DevOps teams can streamline dashboard management, ensure consistency, and accelerate delivery. Start provisioning today to bring your observability workflows into the modern era.