Docker Monitoring
Monitoring Docker containers to ensure system health and performance.
Docker Stats
# Real-time stats
docker stats
# Stats for specific containers
docker stats api database
# Export stats
docker stats --no-stream --format \
"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
cAdvisor
# Run cAdvisor
docker run -d \
--name cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-p 8080:8080 \
gcr.io/cadvisor/cadvisor
# Access: http://localhost:8080
Prometheus + Grafana
version: '3.8'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
cadvisor:
image: gcr.io/cadvisor/cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
volumes:
prometheus-data:
grafana-data:
Use Case: Application Monitoring
version: '3.8'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
cadvisor:
image: gcr.io/cadvisor/cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
volumes:
grafana-data:
Everyday Use Case
Case: An admin needs to monitor resources.
# Check the stats
docker stats --no-stream
# Check the logs
docker logs api --tail 100
# Check the health
docker inspect --format='{{.State.Health.Status}}' api
Best Practices
- Use cAdvisor: For container monitoring
- Prometheus + Grafana: For visual dashboards
- Alerting: Set up alerts for specific conditions
- Log aggregation: Collect logs into one place
Conclusion
Monitoring is essential for keeping the system healthy. Use cAdvisor and Prometheus + Grafana to monitor Docker containers.