Ce guide vous aide à surveiller et maintenir votre installation SELMai en production.
# Statut de tous les conteneurs
docker compose -f docker compose.prod.yml ps
# Vérification de santé
docker compose -f docker compose.prod.yml ps | grep -E "(healthy|unhealthy)"Tous les services ont des health checks configurés :
# Vérifier le statut de santé d'un conteneur
docker inspect --format='{{.State.Health.Status}}' selmai-backend-1
docker inspect --format='{{.State.Health.Status}}' selmai-frontend-1
docker inspect --format='{{.State.Health.Status}}' selmai-db-1
# Endpoints de health check
curl https://votre-domaine.com/health # Frontend
curl https://votre-domaine.com/api/health # Backend# Tous les services (temps réel)
docker compose -f docker compose.prod.yml logs -f
# Un service spécifique
docker compose -f docker compose.prod.yml logs -f backend
docker compose -f docker compose.prod.yml logs -f frontend
docker compose -f docker compose.prod.yml logs -f db
# Dernières 100 lignes
docker compose -f docker compose.prod.yml logs --tail=100
# Logs depuis une date
docker compose -f docker compose.prod.yml logs --since 2024-01-20T10:00:00# Rechercher les erreurs
docker compose -f docker compose.prod.yml logs | grep -i error
# Rechercher les tentatives de connexion
docker compose -f docker compose.prod.yml logs backend | grep -i login
# Rechercher les erreurs HTTP dans les logs Apache
sudo tail -n 1000 /var/log/apache2/access.log | grep " 500 "
sudo tail -n 1000 /var/log/apache2/access.log | grep " 404 "Les logs sont automatiquement limités par la configuration Docker :
logging:
driver: "json-file"
options:
max-size: "10m" # Taille max par fichier
max-file: "3" # Nombre de fichiers conservés# Exporter tous les logs vers un fichier
docker compose -f docker compose.prod.yml logs > logs_$(date +%Y%m%d).txt
# Exporter les logs d'une période
docker compose -f docker compose.prod.yml logs \
--since "2024-01-20T00:00:00" \
--until "2024-01-21T00:00:00" > logs_20240120.txt# Vue d'ensemble de tous les conteneurs
docker stats
# Un conteneur spécifique
docker stats selmai-backend-1
# Format personnalisé
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"# Espace disque du serveur
df -h
# Espace utilisé par Docker
docker system df
# Détails par type
docker system df -v
# Taille des volumes
docker volume ls -q | xargs docker volume inspect | grep -A 5 Mountpoint# Nettoyer les images inutilisées
docker image prune -a
# Nettoyer les conteneurs arrêtés
docker container prune
# Nettoyer tout (ATTENTION: supprime les volumes non utilisés)
docker system prune -a --volumes
# Nettoyage sécurisé (sans les volumes)
docker system prune -a# Se connecter à MariaDB
docker exec -it selmai-db-1 mysql -u selmai_user -p-- Taille de la base de données
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'selmai'
GROUP BY table_schema;
-- Nombre d'enregistrements par table
SELECT
table_name AS 'Table',
table_rows AS 'Rows'
FROM information_schema.tables
WHERE table_schema = 'selmai'
ORDER BY table_rows DESC;
-- Processus en cours
SHOW PROCESSLIST;
-- Variables de performance
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Queries';
SHOW STATUS LIKE 'Uptime';# Logs de requêtes lentes (si activé)
docker exec selmai-db-1 cat /var/log/mysql/slow-query.log
# Statistiques de performance
docker exec selmai-db-1 mysqladmin -u root -p status
docker exec selmai-db-1 mysqladmin -u root -p extended-status# Vérifier la configuration
sudo apache2ctl configtest
# Recharger la configuration sans downtime
sudo systemctl reload apache2
# Logs d'accès en temps réel
sudo tail -f /var/log/apache2/access.log
# Codes de statut HTTP
sudo tail -n 1000 /var/log/apache2/access.log | awk '{print $9}' | sort | uniq -c | sort -rn# Top 10 des IPs
sudo tail -n 10000 /var/log/apache2/access.log | \
awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# Top 10 des URLs
sudo tail -n 10000 /var/log/apache2/access.log | \
awk '{print $7}' | sort | uniq -c | sort -rn | head -10
# Requêtes par heure
sudo tail -n 10000 /var/log/apache2/access.log | \
awk '{print $4}' | cut -d: -f2 | sort | uniq -cCréez un endpoint de métriques dans le backend (/api/metrics) :
# Obtenir les métriques
curl https://votre-domaine.com/api/metricsExemple de métriques à surveiller :
- Nombre d'utilisateurs actifs
- Nombre de services publiés
- Nombre de négociations en cours
- Temps de réponse moyen
# Nombre d'utilisateurs (depuis la DB)
docker exec selmai-db-1 mysql -u selmai_user -p -e \
"SELECT COUNT(*) as total_users FROM selmai.users;"
# Services actifs
docker exec selmai-db-1 mysql -u selmai_user -p -e \
"SELECT COUNT(*) as active_services FROM selmai.services WHERE status='active';"
# Transactions du jour
docker exec selmai-db-1 mysql -u selmai_user -p -e \
"SELECT COUNT(*) as today_transactions FROM selmai.transactions WHERE DATE(created_at) = CURDATE();"Créez /opt/selmai/scripts/monitor.sh :
#!/bin/bash
ALERT_EMAIL="admin@example.com"
DOMAIN="votre-domaine.com"
# Vérifier que les services sont up
if ! docker compose -f /opt/selmai/docker compose.prod.yml ps | grep -q "Up"; then
echo "⚠️ Some services are down!" | mail -s "SELMai Alert: Services Down" $ALERT_EMAIL
fi
# Vérifier l'accès web
if ! curl -f -s https://$DOMAIN/health > /dev/null; then
echo "⚠️ Website is not accessible!" | mail -s "SELMai Alert: Website Down" $ALERT_EMAIL
fi
# Vérifier l'API
if ! curl -f -s https://$DOMAIN/api/health > /dev/null; then
echo "⚠️ API is not accessible!" | mail -s "SELMai Alert: API Down" $ALERT_EMAIL
fi
# Vérifier l'espace disque
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 80 ]; then
echo "⚠️ Disk usage is at ${DISK_USAGE}%!" | mail -s "SELMai Alert: Disk Space" $ALERT_EMAIL
fi# Ajouter au crontab (vérification toutes les 5 minutes)
*/5 * * * * /opt/selmai/scripts/monitor.sh# Vérifier l'état des services
docker compose -f docker compose.prod.yml ps
# Vérifier les logs pour les erreurs
docker compose -f docker compose.prod.yml logs --since 24h | grep -i error
# Vérifier l'espace disque
df -h# Vérifier les sauvegardes
ls -lh /opt/selmai/backups/
# Nettoyer les images Docker inutilisées
docker image prune -a -f
# Vérifier les certificats SSL
sudo certbot certificates
# Vérifier les mises à jour système
sudo apt update && sudo apt list --upgradable# Tester une restauration de backup
# (voir docs/BACKUP.md)
# Vérifier les logs Apache pour les patterns suspects
sudo tail -n 10000 /var/log/apache2/access.log | grep -E "404|500" | wc -l
# Analyser les performances de la base de données
docker exec selmai-db-1 mysqlcheck -u root -p --optimize --all-databases
# Revoir les utilisateurs et permissions
docker exec selmai-db-1 mysql -u root -p -e "SELECT user, host FROM mysql.user;"Pour un monitoring professionnel, ajoutez Prometheus et Grafana :
# Ajouter à docker compose.prod.yml
prometheus:
image: prom/prometheus:latest
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
networks:
- selmai-network
grafana:
image: grafana/grafana:latest
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3002:3000"
networks:
- selmai-networkServices externes gratuits pour surveiller la disponibilité :
- UptimeRobot - Gratuit jusqu'à 50 monitors
- Pingdom - Version gratuite limitée
- StatusCake - Plan gratuit disponible
# Redémarrer un service spécifique
docker compose -f docker compose.prod.yml restart backend
# Redémarrer tous les services
docker compose -f docker compose.prod.yml restart
# Redémarrage complet (down + up)
docker compose -f docker compose.prod.yml down
docker compose -f docker compose.prod.yml up -d# Voir le script de déploiement
./scripts/deploy.sh# Shell dans un conteneur
docker exec -it selmai-backend-1 sh
docker exec -it selmai-frontend-1 sh
docker exec -it selmai-db-1 bash
# Exécuter une commande
docker exec selmai-backend-1 node --version
docker exec selmai-db-1 mysql --version- Health checks configurés pour tous les services
- Logs consultables et rotation configurée
- Monitoring des ressources (CPU, RAM, disque)
- Alertes configurées pour les services critiques
- Sauvegardes vérifiées régulièrement
- Certificats SSL surveillés
- Espace disque surveillé
- Métriques applicatives collectées
- Plan de maintenance documenté
- Contacts d'urgence définis
Un bon monitoring = des problèmes détectés avant qu'ils n'impactent les utilisateurs 📊