Gestion des logs avec Logrotate
Comment configurer Logrotate pour gérer les journaux système et applicatifs.
Lorsque vous travaillez avec des VPS ou des serveurs dédiés, le suivi des événements et des erreurs est indispensable pour le monitoring et le diagnostic. Les fichiers de logs volumineux posent de véritables problèmes : ils sont difficiles à analyser, consomment du CPU et de la mémoire, et peuvent provoquer des pannes applicatives lorsque le disque est plein.
Logrotate résout ce problème en archivant automatiquement les logs en cours et en créant de nouveaux fichiers pour les données entrantes.
Vérifier l'installation
Logrotate est préinstallé sur la plupart des distributions Linux et s'exécute automatiquement via le planificateur cron. Pour vérifier la version :
logrotate --version
Exemple de sortie :
logrotate 3.21.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
La sortie indique quels outils Logrotate utilise pour la compression et les notifications, ainsi que le chemin vers le fichier d'état qui enregistre l'historique des rotations.
Structure de la configuration
Logrotate repose sur une structure de configuration hiérarchique. Les paramètres globaux sont définis dans /etc/logrotate.conf, tandis que les paramètres par application se trouvent dans /etc/logrotate.d/.
Exemple de /etc/logrotate.conf sur Ubuntu :
# rotate log files weekly
weekly
# use the adm group by default
su root adm
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
Paramètres clés :
weekly— les logs sont tournés une fois par semaine.create— un nouveau fichier de log vide est créé après la rotation.rotate 4— quatre copies archivées sont conservées.su root adm— la rotation s'exécute en tant qu'utilisateurrootet groupeadm, ce qui évite les problèmes de permissions sur les logs système.compress— compression des archives (désactivée par défaut).include /etc/logrotate.d— charge les fichiers de configuration par application.
Pour la liste complète des directives :
man logrotate
Configuration par application
Les fichiers dans /etc/logrotate.d/ suivent la même structure que la configuration globale, mais ne s'appliquent qu'à des logs spécifiques. Les paramètres de ces fichiers écrasent les valeurs globales de /etc/logrotate.conf. Si une directive n'est pas spécifiée dans la configuration de l'application, la valeur globale est utilisée.
Exemple de /etc/logrotate.d/nginx :
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
notifempty
}
Si
/etc/logrotate.confdéfinitrotate 4et qu'une configuration d'application ne définit pasrotate, les logs de cette application conserveront tout de même quatre copies archivées.
Fréquence de rotation
Par défaut, Logrotate utilise une approche temporelle : les logs sont tournés selon un calendrier fixe. Intervalles pris en charge : hourly, daily, weekly, monthly, yearly.
Logrotate s'exécute généralement une fois par jour via /etc/cron.daily/logrotate. Pour activer la rotation horaire, déplacez la tâche vers cron.hourly :
sudo mv /etc/cron.daily/logrotate /etc/cron.hourly
Pour des exécutions encore plus fréquentes, configurez une tâche cron personnalisée.
Rotation par taille
Pour les services dont le volume de logs est imprévisible, la rotation peut être déclenchée par la taille du fichier plutôt que par un calendrier.
size — rotation uniquement lorsque le fichier atteint la taille spécifiée, indépendamment du calendrier :
/var/log/app/*.log {
size 50M
}
sizeet les directives temporelles sont mutuellement exclusives — c'est toujours la dernière option indiquée qui s'applique. Sidailyapparaît aprèssize, les logs tourneront quotidiennement et le seuil de taille sera ignoré.
minsize — rotation selon le calendrier, mais uniquement si le fichier a atteint la taille minimale :
/var/log/app/*.log {
daily
minsize 50M
}
maxsize — rotation immédiate dès que le fichier dépasse la limite de taille, même si l'heure planifiée n'est pas encore atteinte :
/var/log/app/*.log {
daily
maxsize 50M
}
Les tailles peuvent être spécifiées en octets (par défaut), kilo-octets (k), mégaoctets (M) ou gigaoctets (G).
Méthodes de rotation
Logrotate prend en charge deux méthodes principales pour gérer les fichiers de logs actifs.
create (par défaut) — renomme le fichier actif (app.log → app.log.1) et crée un nouveau fichier vide avec le nom d'origine. C'est la méthode recommandée, qui minimise le risque de perte de données de logs :
/var/log/app/*.log {
create
# create 644 appuser group — définir optionnellement les permissions, le propriétaire et le groupe
}
copytruncate — copie le contenu du fichier courant dans une archive, puis vide l'original. Permet aux applications de continuer à écrire dans le même descripteur de fichier. Recommandé uniquement pour les applications legacy qui ne peuvent pas rouvrir les fichiers de logs après rotation :
/var/log/app/*.log {
copytruncate
}
Nommage des fichiers d'archive
Par défaut, les fichiers tournés reçoivent des numéros séquentiels : app.log.1, app.log.2, etc. Pour ajouter des horodatages, utilisez dateext :
/var/log/app/*.log {
dateext
# par défaut : -%Y%m%d pour daily, -%Y%m%d%H pour hourly
}
Un log tourné le 25 juin 2025 sera nommé app.log-20250625.
Pour les logs tournés plusieurs fois par jour, utilisez un timestamp Unix pour garantir l'unicité :
/var/log/app/*.log {
dateformat -%Y%m%d-%s
}
La directive dateyesterday horodate le fichier avec la date de la veille — utile lorsque la rotation a lieu après minuit mais que les données appartiennent au jour précédent.
Compression
La directive compress active la compression gzip :
/var/log/app/*.log {
compress
}
Pour utiliser un outil de compression différent :
/var/log/app/*.log {
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
}
delaycompress empêche la compression immédiate du fichier le plus récemment tourné — utile lorsqu'une application continue d'écrire dans l'ancien fichier après la rotation :
/var/log/app/*.log {
compress
delaycompress
}
compressoptions définit le niveau de compression gzip de -1 (rapide, faible compression) à -9 (lent, compression maximale) :
/var/log/app/*.log {
compress
compressoptions -9
}
Dépannage
Le fichier d'état de Logrotate indique la date de la dernière rotation de chaque fichier de log :
sudo cat /var/lib/logrotate/status
Pour une analyse détaillée, exécutez Logrotate en mode debug :
sudo logrotate --debug /etc/logrotate.conf
Aide
Une question ou besoin d'un coup de main ? Écrivez-nous via le système de tickets — nous sommes toujours là pour vous aider !