Monitor Docker Containers with Grafana (Complete Step-by-Step Guide)

Monitoring Docker containers is critical for performance, uptime, and scalability. Without proper monitoring, you won’t know when containers crash, consume excessive resources, or slow down your applications.
That’s where Grafana + Prometheus + cAdvisor comes in.
In this guide, you’ll learn how to monitor Docker containers using Grafana, visualize metrics, and set alerts like a pro.
If you prefer skipping server setup and want managed infrastructure:
👉 Best Cloud Hosting Deals:

Why Monitoring Docker is Important
Docker makes deployments easy, but monitoring becomes harder because:
- Containers are ephemeral
- Logs rotate quickly
- Resource usage fluctuates
- Failures can go unnoticed
Key Benefits of Monitoring
- Track CPU, RAM, disk, and network
- Detect failures instantly
- Improve performance
- Reduce downtime
- Scale intelligently
Tools Overview
1. Grafana
- Visualization tool
- Beautiful dashboards
- Alerts and notifications
2. Prometheus
- Metrics collection
- Time-series database
- Query language (PromQL)
3. cAdvisor
- Container metrics exporter
- Tracks CPU, memory, filesystem
Architecture Overview
Docker Containers → cAdvisor → Prometheus → Grafana Dashboard
Prerequisites
- Ubuntu 24.04 server
- Docker installed
- 2GB+ RAM recommended
- Open ports: 3000, 9090
Step 1: Create Monitoring Directory
mkdir docker-monitoring && cd docker-monitoring
Step 2: Create Docker Compose File
nano docker-compose.yml
Paste:
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
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
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
Step 3: Create Prometheus Config
nano prometheus.yml
Paste:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
Step 4: Start Monitoring Stack
docker compose up -d
Step 5: Access Services
- Prometheus → http://YOUR_IP:9090
- Grafana → http://YOUR_IP:3000
Default Grafana login:
admin / admin
Step 6: Add Prometheus Data Source in Grafana
- Go to Settings → Data Sources
- Add Prometheus
- URL:
http://prometheus:9090 - Save & Test
Step 7: Import Docker Dashboard
In Grafana:
- Go to Dashboards → Import
- Use dashboard ID: 193 or 1860
Now you’ll see:
- CPU usage
- Memory usage
- Network traffic
- Container health
Key Metrics Explained
CPU Usage
container_cpu_usage_seconds_total
Tracks how much CPU a container uses.
Memory Usage
container_memory_usage_bytes
Helps detect memory leaks.
Network Traffic
container_network_receive_bytes_total
Tracks incoming/outgoing traffic.
Setting Alerts in Grafana
Example: High CPU Alert
- Condition: CPU > 80%
- Duration: 2 minutes
Grafana will notify via:
- Slack
- Webhooks
Advanced Monitoring Setup
Add Node Exporter
docker run -d -p 9100:9100 prom/node-exporter
Add Alertmanager
- Handles alerts from Prometheus
- Sends notifications
Best Practices
1. Use Persistent Storage
Store Grafana data:
volumes:
- grafana-storage:/var/lib/grafana
2. Secure Your Stack
- Use HTTPS
- Add authentication
- Restrict ports
3. Monitor Logs Too
Combine with logging tools like ELK stack.
Common Issues & Fixes
Grafana not loading
docker logs grafana
Prometheus not scraping
Check targets:
http://YOUR_IP:9090/targets
No data in dashboards
- Verify cAdvisor is running
- Check Prometheus config
When to Use Managed Monitoring
Setting this up manually takes time.
Instead, use:
👉 Cloud Hosting with built-in monitoring:

Conclusion
Monitoring Docker containers with Grafana gives you:
- Real-time visibility
- Better performance insights
- Faster troubleshooting
Once set up, it becomes your control center for containers.
👉 Start faster with managed platforms:

