Bash script to convert Grafana JSON dashboards to YAML format for kube-prometheus-stack.
- Convert Grafana JSON dashboards to YAML format
- Fix template variables from
[[var]]to$varformat - Fix datasource references
- Add custom prefix/suffix to dashboard UID
- Specify folder for dashboards (added as comment)
- Custom datasource naming
- Force specific UID
- Optional YAML formatting via
yq
jq- JSON processorpython3- for template variable fixesyq(optional) - for YAML formatting
# Ubuntu/Debian
sudo apt-get install jq python3
# macOS
brew install jq python3 yq
# CentOS/RHEL
sudo yum install jq python3./dashtoyaml.sh dashboard.json dashboards/dashboard.yaml./dashtoyaml.sh dashboard.json dashboards/dashboard.yaml \
--prefix prod_ \
--suffix _v1./dashtoyaml.sh dashboard.json dashboards/dashboard.yaml \
--folder "Production Dashboards"./dashtoyaml.sh dashboard.json dashboards/dashboard.yaml \
--datasource "MyPrometheus"./dashtoyaml.sh dashboard.json dashboards/my.yaml \
--prefix stage_ \
--suffix _2024 \
--folder "Stage Dashboards" \
--datasource "Prometheus"./dashtoyaml.sh dashboard.json dashboards/my.yaml \
--uid custom-uid| Option | Description |
|---|---|
--prefix TEXT |
Add prefix to dashboard UID |
--suffix TEXT |
Add suffix to dashboard UID |
--folder NAME |
Specify folder name (added as comment) |
--datasource NAME |
Datasource name (default: Prometheus) |
--uid NAME |
Force specific UID |
--help |
Show help message |
After conversion, deploy dashboards via ConfigMap:
kubectl create configmap grafana-dashboards \
--from-file=dashboards/ \
--dry-run=client \
-o yaml | kubectl apply -f -Or use Helm values:
grafana:
dashboards:
dashboard-provider:
folders:
- name: Production
path: /tmp/dashboards/production
- name: Stage
path: /tmp/dashboards/stage
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/defaultInput JSON (dashboard.json):
{
"title": "Kubernetes Cluster Monitoring",
"uid": "cluster-monitoring",
"panels": [...],
"templating": {
"list": [...]
}
}
Output YAML (dashboards/cluster.yaml):
# cluster.yaml
# Automated generated from dashboard.json
# 2026-05-25 10:30:00
# Directory: Production Dashboards
# Datasource: Prometheus
title: Kubernetes Cluster Monitoring
uid: prod_cluster-monitoring_v1
version: 1
tags:
- kubernetes
- monitoring
panels:
- ...
templating:
list:
- ...
MIT