The kube-state-metrics Grafana dashboard ecosystem is rich — Grafana.com hosts dozens of community dashboards built on KSM metrics. This guide covers the best dashboard IDs for 2025, how to import them, and how to wire them to your kube-state-metrics data source.

Top kube-state-metrics Dashboard IDs

6417 Nodes · Pods · Overview
Kubernetes Cluster Overview
Node count, pod phase, resource requests vs limits. The go-to starting dashboard for any K8s cluster.
8588 Deployments · Rollouts
Kubernetes Deployments
Deployment replica health, rollout status, and availability ratio across all namespaces.
13646 Storage · PVCs
Kubernetes PersistentVolumes
PVC binding status, volume capacity, phase breakdowns and storage class overview.
10257 HPA · Autoscaling
Kubernetes HPA
HorizontalPodAutoscaler current vs desired vs maximum replicas, and scaling event history.
11074 Nodes · Conditions
Kubernetes Nodes
Node conditions (Ready, DiskPressure, MemoryPressure), taints, and capacity breakdown.
15759 v2 · Full Stack
Kubernetes System (kube-state-metrics v2)
Purpose-built for kube-state-metrics v2 — covers all major resource types with PromQL v2 metric names.

How to Import a kube-state-metrics Grafana Dashboard

  1. Open your Grafana instance (http://<grafana-host>:3000)
  2. Navigate to Dashboards → Import
  3. Enter the Dashboard ID (e.g., 6417) in the "Import via grafana.com" field
  4. Click Load
  5. Select your Prometheus data source from the dropdown
  6. Click Import

Or import programmatically using the Grafana API:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"dashboard":{"id":6417},"overwrite":true,"inputs":[{"name":"DS_PROMETHEUS","type":"datasource","pluginId":"prometheus","value":"Prometheus"}]}' \
  http://admin:admin@localhost:3000/api/dashboards/import

Grafana Alloy with kube-state-metrics

If you're using Grafana Alloy (the OpenTelemetry collector that replaced Grafana Agent), configure it to scrape kube-state-metrics with the prometheus.scrape component:

prometheus.scrape "kube_state_metrics" {
  targets = [{
    __address__ = "kube-state-metrics.monitoring.svc.cluster.local:8080",
  }]
  honor_labels     = true
  forward_to       = [prometheus.remote_write.default.receiver]
  scrape_interval  = "30s"
}

prometheus.remote_write "default" {
  endpoint {
    url = "http://mimir:9009/api/v1/push"
  }
}
💡
With Grafana Alloy + kube-state-metrics, set honor_labels = true to preserve the Kubernetes labels (namespace, pod, node) that KSM attaches to each metric. Without this, Alloy overwrites them with scrape job labels.

Using kube-prometheus-stack for Built-in Grafana Dashboards

The simplest path to a complete kube-state-metrics Grafana dashboard setup is the kube-prometheus-stack Helm chart, which pre-installs Grafana with 30+ Kubernetes dashboards:

helm install kube-prometheus-stack \
  prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set grafana.enabled=true \
  --set grafana.adminPassword=YourSecurePassword

After installation, port-forward to Grafana and navigate to the pre-built "Kubernetes / Compute Resources / Cluster" dashboard. These dashboards use kube-state-metrics v2 metric names.

Customising Dashboard Variables

All kube-state-metrics Grafana dashboards use datasource, cluster, and namespace template variables. To add a custom variable that filters by application label (assuming you've enabled metricLabelsAllowlist):

  1. Open Dashboard Settings → Variables → New
  2. Type: Query
  3. Query: label_values(kube_pod_labels{namespace="$namespace"}, label_app)
  4. Name: app

kube-state-metrics Grafana Dashboard ID for v2

Dashboard 15759 is specifically designed for kube-state-metrics v2 metric names (which changed from v1 in several areas). If you're on KSM v2.x, prefer this dashboard over older ones that may reference deprecated metric names like kube_deployment_labels (now replaced by kube_deployment_info).