Grafana Provisioning: Automate Dashboards & Data Sources
Learn how to automate Grafana configuration with provisioning—set up version-controlled dashboards, data sources, and folders using code. Boost collaboration, repeatability, and reliability in observability workflows.
Introduction
Grafana provisioning enables DevOps engineers and SREs to automate the configuration of dashboards, data sources, and folders using code. By managing settings in version-controlled files, teams ensure repeatable deployments, streamline collaboration, and eliminate error-prone manual processes. This post covers the essentials of provisioning in Grafana, with practical examples and configuration snippets for modern observability workflows.
Why Provision Grafana?
Manual dashboard creation is tedious and susceptible to inconsistencies, especially at scale. Provisioning solves these challenges by allowing you to:
- Store configurations as code for version control and auditing
- Reuse dashboards and data sources across multiple environments
- Automate updates and rollbacks with CI/CD pipelines
- Reduce onboarding time for new teams and services
Key Concepts in Grafana Provisioning
- Configuration as Code: Manage Grafana resources in YAML or JSON files
- Provisioning Directory: Dedicated folder for config files (e.g.,
conf/provisioning/) - Providers: Define sources for dashboards, data sources, folders, and RBAC policies
- Polling & Updates: Grafana automatically scans for changes at a set interval
Setting Up File-Based Provisioning
1. Configure Permitted Provisioning Paths
Enable provisioning in your grafana.ini or custom.ini configuration file. Set the feature toggles and permitted paths:
[feature_toggles]
provisioning = true
kubernetesDashboards = true
[paths]
permitted_provisioning_paths = grafana/ | /etc/grafana/provisioning/
These settings allow Grafana to read config files from specified directories.
Tip: Separate multiple paths with a pipe (|), and avoid trailing pipes or empty paths.
Restart Grafana after saving changes.
2. Organize the Provisioning Directory
Create a provisioning directory with subfolders for each resource type:
provisioning/
datasources/
dashboards/
folders/
Place all YAML configuration files in their respective folders.
3. Provisioning Dashboards: Example YAML
Define a dashboard provider in provisioning/dashboards/default.yaml:
apiVersion: 1
providers:
- name: 'Default'
folder: 'Services' # Folder in Grafana UI
type: file
options:
path: /var/lib/grafana/dashboards # Location of dashboard JSON files
foldersFromFilesStructure: true
disableDeletion: false
updateIntervalSeconds: 10
allowUiUpdates: false
Grafana scans the options.path for new or updated dashboard definitions (JSON files) and syncs them every updateIntervalSeconds seconds.
For folder management, set foldersFromFilesStructure: true to sync your filesystem structure into Grafana folders.
4. Provisioning Data Sources: Example YAML
In provisioning/datasources/datasource.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus-server:9090
access: proxy
isDefault: true
editable: true
This config provisions a Prometheus data source automatically on Grafana startup.
5. Folder Provisioning (Optional)
To provision folders, place YAML files in provisioning/folders/ that define folder names and UIDs. This is especially useful for organizing large numbers of dashboards.
Automating Provisioning with GitOps
Integrate Git Sync with your provisioning workflow for a fully automated, version-controlled setup. Store all provisioning files (dashboards, datasources, folders) in a Git repository, and configure Grafana to synchronize changes automatically. This ensures:
- Rollback capability for dashboard updates
- Consistent state across environments (dev, staging, prod)
- Collaboration and peer review via pull requests
Common Use Cases for Grafana Provisioning
- Onboarding new services: Provision default dashboards and data sources
- Multi-team environments: Share reusable dashboard templates
- Disaster recovery: Restore Grafana state from version-controlled configs
- Compliance: Audit all configuration changes and resource definitions
Best Practices and Tips
- Always use version control (Git) for provisioning files
- Leverage folder provisioning for large-scale dashboard management
- Split resources into logical subfolders for maintainability
- Test provisioning configs in a staging environment before production rollout
- Document your provisioning structure for team onboarding
Troubleshooting Provisioning
If provisioning fails:
- Check
grafana.inifor correctpermitted_provisioning_pathsand feature toggles - Review file and folder permissions
- Validate YAML syntax
- Examine Grafana logs for error details
Grafana will display error messages in the UI if a local path is not permitted or a config file is malformed.
Conclusion
Grafana provisioning is essential for scalable observability-as-code workflows. By embracing configuration as code, teams minimize manual effort, enforce consistency, and enable robust automation for dashboards, data sources, and folders. Start provisioning today to unlock efficient, collaborative, and reliable Grafana operations.