Combining Grafana and cAdvisor (Container Advisor) is the standard open-source recipe for monitoring Docker and Kubernetes container metrics (like CPU, memory, network, and disk usage).
Because cAdvisor only keeps a tiny buffer of real-time data in memory, you need a time-series database (almost always Prometheus or Grafana Alloy) to scrape that data and hand it off to Grafana for visualization.
Here is a breakdown of how the architecture works, how to set it up, and how to get a dashboard running.
The Monitoring Pipeline
- cAdvisor: Sits on the host machine, hooks into the Linux kernel cgroups, and collects resource usage from all running containers. It exposes these raw numbers at a
/metricsendpoint. - Prometheus: Periodically “scrapes” (pulls) the data from cAdvisor’s
/metricsendpoint and stores it as historical time-series data. - Grafana: Queries Prometheus using PromQL and plots the data onto clean, interactive dashboards.
Quick Setup: Docker Compose Example
The easiest way to spin up cAdvisor, Prometheus, and Grafana all at once to monitor your local Docker containers is by using a docker-compose.yml file.
YAML
version: '3.8'services: cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro devices: - /dev/kmsg restart: unless-stopped prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml restart: unless-stopped grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" restart: unless-stopped
The Prometheus Config (prometheus.yml)
To tell Prometheus to scrape your cAdvisor container, create a prometheus.yml file in the same directory:
YAML
global: scrape_interval: 15sscrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080']
Run docker compose up -d, and your basic infrastructure is live!
Visualizing with Grafana Dashboards
Instead of building your container monitoring dashboards from scratch, you can import highly optimized community templates.
Recommended Pre-built Dashboards
- Log into your Grafana instance (usually
http://localhost:3000— default credentials areadmin/admin). - Add Prometheus as your data source (
Connections > Data sources > Add data source). - Go to Dashboards > New > Import.
- Paste one of these popular community Dashboard IDs:
19908(cAdvisor Docker Insights – clean, official-feeling modern dashboard)14282(Cadvisor Exporter – great for focused container-by-container metrics)19792(Advanced cAdvisor dashboard with support for Docker Compose projects)
Key cAdvisor Metrics to Know
When creating your own panels or alerts, look out for these fundamental metric names:
- CPU Usage:
container_cpu_usage_seconds_total(usually paired withrate()to calculate CPU percentage likesum(rate(container_cpu_usage_seconds_total[5m])) by (name)) - Memory Usage:
container_memory_usage_bytes(tells you the exact RAM consumption) - Network Traffic:
container_network_receive_bytes_totalandcontainer_network_transmit_bytes_total - Disk I/O:
container_fs_reads_bytes_totalandcontainer_fs_writes_bytes_total
