πŸ“šBook Signing at KubeCon EU 2026Meet us at Booking.com HQ (Mon 18:30-21:00) & vCluster booth #521 (Tue 24 Mar, 12:30-1:30pm) β€” free book giveaway!RSVP Booking.com Event
Observability beginner ⏱ 10 minutes K8s 1.28+

Grafana Dashboard 6417: Node Exporter Setup

Import Grafana Dashboard 6417 for Kubernetes pod monitoring. Node Exporter Full setup with Prometheus, CPU, memory, disk, and network metrics.

By Luca Berton β€’ β€’ πŸ“– 5 min read

πŸ’‘ Quick Answer: Grafana Dashboard 6417 (β€œNode Exporter Full”) is the most popular Grafana dashboard for Linux/Kubernetes node monitoring. Import it via Grafana UI (Dashboards β†’ Import β†’ ID `6417`), select your Prometheus data source, and get instant visibility into CPU, memory, disk I/O, network, and system metrics from `node_exporter`.

The Problem

You need comprehensive node-level monitoring for your Kubernetes cluster. While Kubernetes provides pod metrics, you need visibility into the underlying nodes: CPU saturation, memory pressure, disk I/O bottlenecks, and network throughput. Dashboard 6417 is the community standard for this β€” but you need Prometheus + node_exporter set up correctly.

flowchart LR
    NE["node_exporter<br/>(DaemonSet)"] -->|"Scrape :9100"| PROM["Prometheus"]
    PROM -->|"PromQL queries"| GF["Grafana"]
    GF -->|"Dashboard 6417"| DASH["πŸ“Š Node Exporter Full<br/>CPU / Memory / Disk / Net"]

The Solution

Prerequisites

Ensure Prometheus and node_exporter are running:

# Install kube-prometheus-stack (includes everything)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  --set prometheus.prometheusSpec.retention=30d

# Verify node_exporter is running on all nodes
kubectl get pods -n monitoring -l app.kubernetes.io/name=prometheus-node-exporter
# NAME                                    READY   STATUS    NODE
# monitoring-prometheus-node-exporter-abc  1/1     Running   worker-01
# monitoring-prometheus-node-exporter-def  1/1     Running   worker-02
# monitoring-prometheus-node-exporter-ghi  1/1     Running   worker-03

Import Dashboard 6417

Method 1: Grafana UI

  1. Open Grafana β†’ Dashboards β†’ New β†’ Import
  2. Enter dashboard ID: 6417
  3. Click Load
  4. Select your Prometheus data source
  5. Click Import

Method 2: Helm Values (Automatic)

# values.yaml for kube-prometheus-stack
grafana:
  dashboardProviders:
    dashboardproviders.yaml:
      apiVersion: 1
      providers:
        - name: default
          orgId: 1
          folder: "Node Monitoring"
          type: file
          disableDeletion: false
          editable: true
          options:
            path: /var/lib/grafana/dashboards/default
  dashboards:
    default:
      node-exporter-full:
        gnetId: 6417
        revision: 38             # Latest revision
        datasource: Prometheus

Method 3: ConfigMap (GitOps)

# Download dashboard JSON
curl -o dashboard-6417.json \
  "https://grafana.com/api/dashboards/6417/revisions/38/download"

# Create ConfigMap
kubectl create configmap grafana-dashboard-6417 \
  --from-file=node-exporter-full.json=dashboard-6417.json \
  -n monitoring

# Label it for auto-discovery by Grafana sidecar
kubectl label configmap grafana-dashboard-6417 \
  grafana_dashboard=1 \
  -n monitoring

Dashboard Panels

Dashboard 6417 includes these panels:

SectionMetricsWhat to Watch
CPUUsage, iowait, steal, system/userSustained >80% = add nodes
MemoryUsed, cached, buffers, swapSwap usage > 0 = OOM risk
DiskSpace used %, inode usage, I/O throughput>85% full = urgent
NetworkBandwidth in/out, errors, dropsDrops > 0 = investigate
SystemLoad average, context switches, interruptsLoad > CPU cores = overloaded
File DescriptorsOpen FDs, max FDsNear max = app leaking FDs

Key PromQL Queries Used

# CPU Usage (%)
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# Memory Usage (%)
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100

# Disk Usage (%)
100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100)

# Network Receive (bytes/sec)
rate(node_network_receive_bytes_total{device!~"lo|veth.*|docker.*|flannel.*|cali.*"}[5m])

Customize for Kubernetes

Add node labels to filter by node pool:

# In Prometheus scrape config or ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: prometheus-node-exporter
  endpoints:
    - port: http-metrics
      relabelings:
        - sourceLabels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
          targetLabel: instance_type
        - sourceLabels: [__meta_kubernetes_node_label_topology_kubernetes_io_zone]
          targetLabel: zone
Dashboard IDNameFocus
6417Node Exporter FullComprehensive node metrics
1860Node Exporter Full (alternative)Similar, different layout
15759K8s Views - GlobalCluster-wide overview
15760K8s Views - NamespacesNamespace resource usage
15757K8s Views - PodsPod-level metrics

Common Issues

IssueCauseFix
Dashboard shows β€œNo data”Prometheus data source not configuredSettings β†’ Data Sources β†’ Add Prometheus URL
Missing nodesnode_exporter not running on all nodesCheck DaemonSet: `kubectl get ds -n monitoring`
Metrics are empty after importWrong data source selected during importEdit dashboard β†’ Settings β†’ Variables β†’ update `datasource`
Old dashboard revisionUsing outdated revisionRe-import with latest revision number
Network panels emptyInterface filter doesn’t matchEdit panel β†’ change `device` regex to match your interfaces

Best Practices

  • Import via Helm values β€” ensures dashboard survives Grafana restarts
  • Pin dashboard revision β€” avoid unexpected changes from auto-updates
  • Add alerting rules β€” dashboard is monitoring, add Prometheus alerts for notification
  • Filter by node pool β€” use template variables to separate GPU/CPU/storage nodes
  • Set refresh interval to 30s β€” balances freshness vs Prometheus load

Key Takeaways

  • Dashboard 6417 is the community-standard node monitoring dashboard (10M+ downloads)
  • Requires Prometheus + node_exporter (included in kube-prometheus-stack)
  • Import via UI (ID: 6417), Helm values, or ConfigMap with sidecar label
  • Covers CPU, memory, disk, network, and system metrics per node
  • Combine with pod-level dashboards (15757) for full-stack visibility
  • For GitOps: store dashboard JSON in ConfigMap with `grafana_dashboard=1` label
#grafana #dashboard-6417 #node-exporter #prometheus #monitoring
Luca Berton
Written by Luca Berton

Principal Solutions Architect specializing in Kubernetes, AI/GPU infrastructure, and cloud-native platforms. Author of Kubernetes Recipes and creator of CopyPasteLearn courses.

Kubernetes Recipes book cover

Want More Kubernetes Recipes?

This recipe is from Kubernetes Recipes, our 750-page practical guide with hundreds of production-ready patterns.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens