Skip to content

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.

Kupe ships a small set of shared tenant dashboards that cover the most common investigation paths.

FolderDashboardsWhat they are for
OverviewCluster Overview, Namespace Overview, Network OverviewStart here for broad health and cluster-level triage
WorkloadsDeployments, Pods, LogsInvestigate rollout issues, pod behavior, and workload log volume
StoragePersistent VolumesWatch 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.

Use the Grafana UI when you want to iterate quickly.

  1. Open Grafana through SSO.
  2. Go to Dashboards and create a new dashboard.
  3. Add panels against the metrics or logs datasource.
  4. 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.

Use ConfigMaps when you want dashboards versioned in Git and deployed through Argo CD or Helm.

LabelRequiredPurpose
kupe.cloud/grafana-dashboardsYes, set to "true"Marks the ConfigMap as dashboard content for Kupe
kupe.cloud/grafana-folderNoChooses 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.

apiVersion: v1
kind: ConfigMap
metadata:
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": []
}
  • 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

The folder comes from kupe.cloud/grafana-folder, not from the filename. Create separate ConfigMaps when you want to place dashboards in different folders.

If you manage dashboards through Helm, render them into a labeled ConfigMap:

templates/configmap-dashboard.yaml
{{- if .Values.dashboard.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
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 }}
  • 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
  • Metrics: write and test PromQL queries
  • Logs: add log panels or investigate issues in Explore