Les conteneurs Docker peuvent échouer silencieusement. Un conteneur peut être en cours d'exécution mais ne pas servir de requêtes. Voici comment configurer un monitoring de santé approprié pour votre infrastructure Docker.
Health Checks Natifs Docker
Ajouter HEALTHCHECK au Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
# Configuration du health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
CMD ["npm", "start"]
Paramètres du Health Check
| Paramètre | Description | Défaut |
|---|---|---|
--interval | Temps entre les vérifications | 30s |
--timeout | Temps max pour la vérification | 30s |
--start-period | Période de grâce au démarrage | 0s |
--retries | Échecs avant unhealthy | 3 |
Vérifier le Statut de Santé
# Voir le statut de santé
docker inspect --format='{{.State.Health.Status}}' container_name
# Observer les health checks en temps réel
docker events --filter event=health_status
# Lister tous les conteneurs avec statut de santé
docker ps --format "table {{.Names}}\t{{.Status}}"
Endpoints de Health Check
Health Check HTTP Simple
// Express.js
app.get('/health', (req, res) => {
res.status(200).json({ status: 'healthy' });
});
Health Check Complet
app.get('/health', async (req, res) => {
const health = {
status: 'healthy',
timestamp: new Date().toISOString(),
checks: {}
};
// Vérifier la base de données
try {
await db.query('SELECT 1');
health.checks.database = 'ok';
} catch (err) {
health.checks.database = 'fail';
health.status = 'unhealthy';
}
// Vérifier Redis
try {
await redis.ping();
health.checks.redis = 'ok';
} catch (err) {
health.checks.redis = 'fail';
health.status = 'unhealthy';
}
const statusCode = health.status === 'healthy' ? 200 : 503;
res.status(statusCode).json(health);
});
Health Checks Docker Compose
version: '3.8'
services:
web:
build: .
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
depends_on:
db:
condition: service_healthy
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
Monitoring des Ressources
Monitorer les Ressources des Conteneurs
# Stats en temps réel
docker stats
# Stats pour des conteneurs spécifiques
docker stats web db redis
# Snapshot unique
docker stats --no-stream
Métriques Clés à Suivre
| Métrique | Seuil Avertissement | Seuil Critique |
|---|---|---|
| Utilisation CPU | >70% | >90% |
| Utilisation Mémoire | >80% | >95% |
| I/O Réseau | Variable | Pics soudains |
| I/O Disque | Variable | Haute soutenue |
Configuration Monitoring Externe
Monitorer les Endpoints des Conteneurs
Configurez le monitoring HTTP pour vos endpoints de conteneurs :
- Endpoint santé -
https://app.example.com/health - Endpoints API - Endpoints métier critiques
- Proxies base de données - Si exposés
Alertes de Redémarrage Conteneur
Créez un script pour détecter les redémarrages :
#!/bin/bash
# container-watch.sh
CONTAINER="my-app"
LAST_STARTED=""
while true; do
STARTED=$(docker inspect --format='{{.State.StartedAt}}' $CONTAINER)
if [ "$LAST_STARTED" != "" ] && [ "$STARTED" != "$LAST_STARTED" ]; then
# Conteneur redémarré - envoyer alerte
curl -X POST "https://your-webhook-url" \
-d "{\"text\": \"Conteneur $CONTAINER redémarré\"}"
fi
LAST_STARTED=$STARTED
sleep 60
done
Logging et Alerting
Centraliser les Logs des Conteneurs
# docker-compose.yml
services:
web:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Alertes Basées sur les Logs
Monitorez les logs pour les patterns d'erreurs :
# Observer les erreurs en temps réel
docker logs -f container_name 2>&1 | grep -i error
Checklist Monitoring Conteneurs
- HEALTHCHECK ajouté aux Dockerfiles
- Endpoints de santé implémentés
- Healthchecks Docker Compose configurés
- Monitoring externe configuré
- Alertes ressources configurées
- Agrégation des logs activée
- Alertes de redémarrage en place
- Dépendances vérifiées
- Canaux d'alerte configurés
- Dashboard créé
Bonnes Pratiques
Conception des Health Checks
- Gardez les health checks rapides (<1s)
- Vérifiez toutes les dépendances critiques
- Retournez les codes HTTP appropriés
- Incluez des infos de diagnostic dans la réponse
- Ne vérifiez pas les services externes
Stratégie de Monitoring
- Monitorez à plusieurs niveaux (conteneur, service, infrastructure)
- Définissez des seuils appropriés
- Configurez des politiques d'escalade
- Documentez votre configuration de monitoring
WizStatus peut monitorer vos endpoints de santé Docker avec des intervalles d'1 minute. Recevez des alertes instantanées quand les conteneurs deviennent unhealthy.