Automatiser le nettoyage et la rotation des logs avec Logrotate sans couper les services
Définition : Logrotate est un utilitaire système Linux conçu pour automatiser l’administration des fichiers journaux (logs) en gérant leur rotation, leur compression, leur suppression et leur archivage afin d’éviter la saturation des disques durs.
Sur un serveur à fort trafic, la gestion des journaux représente un enjeu critique. En l’absence d’une politique d’administration rigoureuse, les fichiers
access.log et error.log générés par des services comme Nginx, Apache ou des applications tierces peuvent saturer l’espace de stockage et les inodes en quelques jours. Une partition racine ou /var saturée engendre irrémédiablement des pannes en cascade : arrêts de services, incapacité d’écrire en base de données ou crash complet du serveur.Heureusement, l’utilitaire natif Logrotate permet d’automatiser l’intégralité du cycle de vie de ces fichiers. Toutefois, mal configuré, il peut provoquer des pertes de données ou contraindre à redémarrer brutalement les services en production.
Ce guide technique détaille comment configurer proprement Logrotate pour automatiser vos logs sur des environnements à haute charge, sans jamais interrompre vos services.
1. Pourquoi la gestion des logs est critique sur les serveurs à fort trafic
Sur une architecture fortement sollicitée par des requêtes de masse, les volumes de données textuelles écrites sur le disque s’accroissent de manière exponentielle. Sans automatisation via une tâche planifiée (cron ou systemd timer) :
-
Risque de saturation (Disk Full) : Les fichiers de log grossissent indéfiniment jusqu’à épuiser les inodes ou l’espace disque disponible.
-
Impact sur les I/O disque : Manipuler ou analyser des fichiers de log titanesques (plusieurs dizaines de gigaoctets) sature les performances d’E/S du système, ralentissant l’ensemble des daemons.
-
Dilution de la traçabilité : Des fichiers trop volumineux deviennent inexploitable pour le débogage, l’analyse des performances ou les audits de sécurité.
2. Le piège classique : éviter la coupure des services
Le comportement par défaut de Logrotate consiste à renommer le fichier de log actif (ex:
app.log devient app.log.1), puis à créer un nouveau fichier app.log vide.Cependant, un processus en cours d’exécution (comme un serveur web) maintient ouvert le descripteur de fichier (file descriptor) de l’ancien fichier. Si le service n’est pas informé du changement, il continue d’écrire dans le fichier renommé, entraînant une perte sèche de données lors de la compression.
Pour éviter toute interruption, deux stratégies s’offrent à vous :
Option A : Le rechargement à chaud (Reload via postrotate) — Recommandé
C’est la méthode propre par excellence. Le service est invité à fermer et rouvrir ses descripteurs de fichiers à la volée.
Option B : La solution de repli (copytruncate)
Si l’application ne dispose d’aucun signal natif pour ré-ouvrir ses logs, la directive
copytruncate copie le contenu du fichier dans l’archive, puis vide (truncalise) le fichier original sur place.-
Inconvénient : Un micro-laps de temps existe entre la copie et la troncature, ce qui peut causer la perte de quelques lignes si le trafic d’écriture est extrêmement dense.
3. Anatomie d’une configuration Logrotate haute performance
Les configurations spécifiques résident dans le répertoire
/etc/logrotate.d/. Voici un modèle de configuration robuste taillé pour un service à fort trafic :Plaintext
/var/log/monapp/*.log {
daily
size 500M
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
create 0640 monapp monapp
postrotate
systemctl reload monapp.service > /dev/null 2>&1 || true
endscript
}
Décryptage des directives clés :
-
daily/size 500M: Déclenche la rotation soit tous les jours, soit dès que le fichier atteint 500 Mo (le premier critère atteint l’emporte, idéal pour lisser la charge). -
rotate 30: Conserve les 30 dernières archives avant de purger les plus anciennes de l’espace de stockage. -
compress: Compresse immédiatement les logs routés (par défaut au format gzip). -
delaycompress: Retarde la compression de l’archive de la veille au cycle suivant. Essentiel sur les gros serveurs pour laisser le temps aux processus d’écriture de se finaliser sans surcharger le processeur. -
missingok: Empêche Logrotate de renvoyer une erreur si un fichier journal vient à manquer. -
notifempty: Ignore la rotation si le fichier est vide, évitant de générer des archives inutiles. -
sharedscripts: Garantit que le script de fin (postrotate) ne s’exécutera qu’une seule fois globalement pour l’ensemble des fichiers correspondants au pattern. -
postrotate ... endscript: Exécute un rechargement propre (systemctl reload) permettant au processus de basculer instantanément sur le nouveau journal sans perte de requêtes.
4. Cas pratique : Optimisation pour Nginx
Sur un reverse proxy ou serveur web Nginx subissant des millions de requêtes quotidiennes, la configuration doit intégrer l’envoi du signal indiquant au daemon de ré-ouvrir ses fichiers de logs à chaud :
Plaintext
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -d /run/systemd/system ]; then
systemctl reload nginx.service > /dev/null 2>&1 || true
fi
endscript
}
5. Bonnes pratiques et validation de vos scripts
Avant de déployer une règle en production, il est impératif de valider sa syntaxe pour s’assurer que vos tâches planifiées s’exécutent sans accroc.
-
Tester la configuration en mode simulation (
-d) :Exécutez la commande suivante pour simuler le processus en mode verbeux sans modifier les fichiers réels :Bash
sudo logrotate -d /etc/logrotate.d/monapp -
Forcer l’exécution manuelle (
-f) :Pour valider concrètement que le script postrotate fonctionne et que la compression s’effectue sans encombre :Bash
sudo logrotate -f /etc/logrotate.d/monapp -
Surveiller l’état de Logrotate :Consultez le fichier d’état interne pour vérifier la date de la dernière rotation effectuée :
Bash
cat /var/lib/logrotate/status
FAQ : Tout savoir sur Logrotate et la gestion des logs
Quelle est la différence entre copytruncate et un rechargement postrotate ?
Le rechargement
postrotate indique au service (comme Nginx) de basculer sur un nouveau descripteur de fichier de manière propre, garantissant 0% de perte. La méthode copytruncate copie le fichier existant puis le vide sur place, ce qui présente un léger risque de perte de données sur des flux d’écriture extrêmement denses.Comment forcer Logrotate à s’exécuter immédiatement ?
Il suffit d’utiliser l’option
-f (force) suivie du chemin vers votre fichier de configuration : sudo logrotate -f /etc/logrotate.d/monapp.Pourquoi utiliser la directive delaycompress sur un serveur à fort trafic ?
delaycompress permet de repousser la compression des logs de la veille au cycle suivant. Sur un serveur intensif, cela évite de consommer massivement des ressources CPU pour compresser un fichier tout juste fermé pendant que le disque gère de fortes requêtes d’E/S.Conclusion
Une politique de rétention et de nettoyage bien ficelée via Logrotate est le garant de la résilience de votre infrastructure d’hébergement. En combinant des déclencheurs par taille, une compression différée et un rechargement à chaud, vous éliminez tout risque de saturation disque tout en garantissant une continuité de service absolue.
Un serveur a administrer, une panne a traiter, un projet a heberger ?
Nous gerons des serveurs pour des entreprises depuis la Guadeloupe. Dites-nous ce dont vous avez besoin, nous repondons avec une proposition claire.
« Le client previent d'un passage TV au dernier moment et la team @demarcq se met en quatre pour dimensionner l'infrastructure avec nous. »Rene Cotton — message publie publiquement sur X
Lire les 12 temoignages clients, publies publiquement et verifiables →

