Grafana Dashboards
Platform / cross-cutting Grafana dashboards, managed as GrafanaDashboard CRs (grafana-operator). This is the single home for dashboards not owned by a specific app.
Convention
- One mechanism only:
GrafanaDashboardCRs. Do not use sidecar-style ConfigMaps labeledgrafana_dashboard: "true"โ the operator-managed Grafana has no sidecar and will not load them. - Placement:
- Platform / cross-cutting dashboards (Kubernetes, node-exporter, Prometheus, volumes, exporters without their own app) live here, grouped by category:
kubernetes.yamlโ Kubernetes views/system + volumesinfrastructure.yamlโ node-exporter, Prometheusexporters.yamlโ opnsense, nut, speedtestpod-resources-max.yamlโ custom in-repo dashboard
- App-specific dashboards live with their app:
apps/<namespace>/<app>/app/grafanadashboard.yaml.
- Platform / cross-cutting dashboards (Kubernetes, node-exporter, Prometheus, volumes, exporters without their own app) live here, grouped by category:
- Standard CR fields:
instanceSelector.matchLabels.dashboards: grafanadatasources: [{ datasourceName: prometheus, inputName: DS_PROMETHEUS }](use the dashboardโs actual input name โ e.g. opnsense usesDS_PROMETHEUS-K0)- pin grafana.com dashboards via
url: https://grafana.com/api/dashboards/<id>/revisions/<rev>/download
- No vendoring: reference upstream (grafana.com revision or upstream raw URL). The only in-repo JSON is
pod-resources-max.json(a custom dashboard), loaded by itsGrafanaDashboardvia a raw GitHub URL.
Add a dashboard
- Add a
GrafanaDashboardentry to the appropriate category file (or a new file). - If itโs a new file, add it to
kustomization.yaml.