Grafana Dashboards
Every tenant gets a dedicated Grafana org with baseline dashboards already provisioned. You can use those dashboards as your starting point, build new ones directly in Grafana, or manage dashboards in Git through ConfigMaps.
Built-in dashboards
Section titled “Built-in dashboards”Kupe ships a small set of shared tenant dashboards that cover the most common investigation paths.
| Folder | Dashboards | What they are for |
|---|---|---|
| Overview | Cluster Overview, Namespace Overview, Network Overview | Start here for broad health and cluster-level triage |
| Workloads | Deployments, Pods, Logs | Investigate rollout issues, pod behavior, and workload log volume |
| Storage | Persistent Volumes | Watch stateful workloads and capacity trends |
The platform keeps these dashboards in sync as the default set evolves. If you want a tenant-specific version that you control, create your own dashboard rather than relying on the built-in copy to stay unchanged.
Create dashboards in the Grafana UI
Section titled “Create dashboards in the Grafana UI”Use the Grafana UI when you want to iterate quickly.
- Open Grafana through SSO.
- Go to Dashboards and create a new dashboard.
- Add panels against the metrics or logs datasource.
- Save the dashboard into an existing folder or create a new one.
This is the simplest path for ad-hoc dashboards, team-specific views, and anything you expect to change frequently.
Manage dashboards with GitOps
Section titled “Manage dashboards with GitOps”Use ConfigMaps when you want dashboards versioned in Git and deployed through Argo CD or Helm.
Required labels
Section titled “Required labels”| Label | Required | Purpose |
|---|---|---|
kupe.cloud/grafana-dashboards | Yes, set to "true" | Marks the ConfigMap as dashboard content for Kupe |
kupe.cloud/grafana-folder | No | Chooses the target Grafana folder. Defaults to General |
Create the ConfigMap in your managed cluster. Kupe picks it up automatically and pushes the dashboard JSON into your Grafana org.
Example ConfigMap
Section titled “Example ConfigMap”apiVersion: v1kind: ConfigMapmetadata: name: my-app-dashboards namespace: backend labels: kupe.cloud/grafana-dashboards: "true" kupe.cloud/grafana-folder: "Workloads"data: my-app-overview.json: |- { "title": "My App Overview", "uid": "my-app-overview", "version": 1, "schemaVersion": 39, "panels": [] }Constraints
Section titled “Constraints”- ConfigMap keys must end in
.json - each dashboard JSON must include a stable
uid - a single ConfigMap can contain multiple dashboards
- invalid JSON is skipped and will not appear in Grafana
- removing a dashboard key or deleting the ConfigMap removes the synced dashboard on the next update
Folder routing
Section titled “Folder routing”The folder comes from kupe.cloud/grafana-folder, not from the filename. Create separate ConfigMaps when you want to place dashboards in different folders.
Helm example
Section titled “Helm example”If you manage dashboards through Helm, render them into a labeled ConfigMap:
{{- if .Values.dashboard.enabled }}apiVersion: v1kind: ConfigMapmetadata: name: {{ .Values.dashboard.configMapName | default "my-app-dashboards" }} labels: kupe.cloud/grafana-dashboards: "true" kupe.cloud/grafana-folder: {{ .Values.dashboard.folder | default "Workloads" | quote }}data:{{ (.Files.Glob "dashboards/*.json").AsConfig | indent 2 }}{{- end }}Dashboard design tips
Section titled “Dashboard design tips”- use variables for
cluster,namespace, and workload identity - prefer one useful dashboard per audience instead of one oversized dashboard for everything
- show both rate and error signals where possible
- keep default time ranges realistic for the type of investigation
- use datasource variables rather than hardcoded datasource UIDs when exporting dashboard JSON