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.ini for correct permitted_provisioning_paths and 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.