Git Sync for development and production environments
Use separate Grafana instances for development and production. Each syncs with different Git locations to test dashboards before production.
Use it for
- Staged deployments: You need to test dashboard changes before production deployment.
- Change control: You require approvals before dashboards reach production.
- Quality assurance: You verify dashboard functionality in a non-production environment.
- Risk mitigation: You minimize the risk of breaking production dashboards.
Architecture
┌────────────────────────────────────────────────────────────┐
│ GitHub Repository │
│ Repository: your-org/grafana-manifests │
│ Branch: main │
│ │
│ grafana-manifests/ │
│ ├── dev/ │
│ │ ├── dashboard-new.json ← Development dashboards │
│ │ └── dashboard-test.json │
│ │ │
│ └── prod/ │
│ ├── dashboard-stable.json ← Production dashboards │
│ └── dashboard-approved.json │
└────────────────────────────────────────────────────────────┘
↕ ↕
Git Sync (dev/) Git Sync (prod/)
↕ ↕
┌─────────────────────┐ ┌─────────────────────┐
│ Dev Grafana │ │ Prod Grafana │
│ │ │ │
│ Repository: │ │ Repository: │
│ - path: dev/ │ │ - path: prod/ │
│ │ │ │
│ Creates folder: │ │ Creates folder: │
│ "grafana-manifests"│ │ "grafana-manifests"│
└─────────────────────┘ └─────────────────────┘Repository structure
In Git:
your-org/grafana-manifests
├── dev/
│ ├── dashboard-new.json
│ └── dashboard-test.json
└── prod/
├── dashboard-stable.json
└── dashboard-approved.jsonIn Grafana Dashboards view:
Dev instance:
Dashboards
└── 📁 grafana-manifests/
├── New Dashboard
└── Test DashboardProd instance:
Dashboards
└── 📁 grafana-manifests/
├── Stable Dashboard
└── Approved Dashboard- Both instances create a folder named “grafana-manifests” (from repository name)
- Each instance only shows dashboards from its configured path (
dev/orprod/) - Dashboards appear with their titles from the JSON files
Configuration parameters
Development:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
dev/
Production:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
prod/
How it works
- Developers create and modify dashboards in development.
- Git Sync commits changes to
dev/. - You review changes in Git.
- You promote approved dashboards from
dev/toprod/. - Production syncs from
prod/. - Production dashboards update.
Alternative: Use branches
Instead of using different paths, you can configure instances to use different branches:
Development instance:
- Repository:
your-org/grafana-manifests - Branch:
develop - Path:
grafana/
Production instance:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
grafana/
With this approach:
- Development changes go to the
developbranch - Use Git merge or pull request workflows to promote changes from
developtomain - Production automatically syncs from the
mainbranch
Alternative: Use separate repositories for stricter isolation
For stricter isolation, use completely separate repositories:
Development instance:
- Repository:
your-org/grafana-manifests-dev - Branch:
main - Path:
grafana/
Production instance:
- Repository:
your-org/grafana-manifests-prod - Branch:
main - Path:
grafana/



