Grafana Dashboards & Visualization

25 minLesson 2 of 7

Learning Objectives

  • Install and configure Grafana
  • Connect Prometheus as a data source
  • Build custom dashboards with panels
  • Import community dashboards

What is Grafana?

Grafana is an open-source visualization platform that turns metrics data into beautiful, actionable dashboards.

Grafana + Prometheus Stack

┌──────────┐     ┌────────────┐     ┌─────────┐
│  Targets │────▶│ Prometheus │────▶│ Grafana │
│(exporters)│    │  (collect) │     │(visualize)│
└──────────┘     └────────────┘     └─────────┘

Installing Grafana

With Docker

docker run -d \
  --name grafana \
  -p 3000:3000 \
  -v grafana_data:/var/lib/grafana \
  -e "GF_SECURITY_ADMIN_PASSWORD=admin123" \
  grafana/grafana:latest

Docker Compose (Full Stack)

version: "3.8"
services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
 
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus
 
  node-exporter:
    image: quay.io/prometheus/node-exporter:latest
    ports:
      - "9100:9100"
    pid: host
    volumes:
      - "/:/host:ro,rslave"
    command:
      - "--path.rootfs=/host"
 
volumes:
  prometheus_data:
  grafana_data:

Connecting Prometheus

  1. Open Grafana at http://localhost:3000
  2. Login with admin / admin123
  3. Navigate to Configuration → Data Sources
  4. Click Add data source → Prometheus
  5. Set URL: http://prometheus:9090
  6. Click Save & Test

Building Dashboards

Panel Types

PanelBest For
Time SeriesMetrics over time (CPU, memory, requests)
StatSingle value with thresholds
GaugeCurrent value with min/max
Bar ChartComparisons across categories
TableDetailed data with multiple columns
HeatmapDistribution patterns over time
LogsLog entries from Loki

Creating a Dashboard

  1. Click + → Dashboard → Add visualization
  2. Select Prometheus data source
  3. Enter PromQL query
  4. Configure visualization options
  5. Set title and description
  6. Save the dashboard

Example Panels

CPU Usage:

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

Memory Usage:

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

Disk I/O:

rate(node_disk_read_bytes_total[5m])
rate(node_disk_written_bytes_total[5m])

Network Traffic:

rate(node_network_receive_bytes_total{device="eth0"}[5m])
rate(node_network_transmit_bytes_total{device="eth0"}[5m])

HTTP Request Rate:

sum(rate(http_requests_total[5m])) by (status_code)

Error Rate:

sum(rate(http_requests_total{status_code=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100

Dashboard Variables

Variables make dashboards dynamic and reusable.

# Variable: instance
Type: Query
Query: label_values(node_cpu_seconds_total, instance)

# Use in panels:
node_memory_MemTotal_bytes{instance="$instance"}

Importing Community Dashboards

Grafana has thousands of pre-built dashboards:

  1. Go to Dashboards → Import
  2. Enter dashboard ID from grafana.com
  3. Select data source
  4. Click Import
IDDashboardPurpose
1860Node Exporter FullSystem metrics
3662Prometheus StatsPrometheus self-monitoring
12740Kubernetes ClusterK8s overview
14031Docker MonitoringContainer metrics

Alerting in Grafana

# Alert rule example
- alert: HighErrorRate
  condition: B
  data:
    - refId: A
      queryType: range
      expr: sum(rate(http_requests_total{status=~"5.."}[5m]))
    - refId: B
      queryType: classic_condition
      conditions:
        - evaluator:
            type: gt
            params: [0.05]
          reducer:
            type: last
  for: 5m
  annotations:
    summary: Error rate above 5%

Summary

You've learned:

  • Installing Grafana and connecting Prometheus
  • Building custom dashboards with various panel types
  • Writing PromQL queries for common metrics
  • Using variables for dynamic dashboards
  • Importing community dashboards
  • Setting up Grafana alerting

Next Steps

Next, we'll set up comprehensive alerting strategies and incident response workflows.