TechPro

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.

rotation de logs

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
}

logs serveurs

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.
  1. 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
    
  2. 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
    
  3. 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.

Appeler le 09 72 16 38 14Demander un devis gratuit

« 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 →
Share:
Appeler le 09 72 16 38 14 | Demander un devis gratuitDevis gratuit
Appeler Devis gratuit