Monitoring Docker
Savoir que le container tourne ne suffit pas. En production, il faut des métriques sur l'utilisation des ressources, les health checks, les redémarrages, les erreurs. La stack cAdvisor + Prometheus + Grafana est le standard pour les environnements Docker standalone.
docker stats
# Vue temps réel de tous les containers
docker stats
# Format pour scripts
docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}},{{.NetIO}},{{.BlockIO}}"cAdvisor
cAdvisor (Container Advisor) expose les métriques de tous les containers en format Prometheus sur le port 8080.
# compose.yml
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8080:8080"
restart: unless-stoppedPrometheus + Grafana
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=15d'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
volumes:
- grafana-data:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD}
ports:
- "3000:3000"
restart: unless-stopped
volumes:
prometheus-data:
grafana-data:# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: cadvisor
static_configs:
- targets: ['cadvisor:8080']
- job_name: node
static_configs:
- targets: ['node-exporter:9100']Labels pour la découverte
services:
api:
labels:
- "prometheus.io/scrape=true"
- "prometheus.io/port=8080"
- "prometheus.io/path=/metrics"Prometheus peut utiliser ces labels pour la découverte automatique de cibles avec le docker_sd_config.
Alertes essentielles à configurer
- Container redémarré (OOMKilled ou crash)
- Mémoire > 80% de la limite
- CPU throttled > 25% du temps
- Healthcheck en état unhealthy
- Disque
/var/lib/docker> 80%