
I. Présentation
logrotate est un outil disponible sur Linux qui offre la possibilité de configurer la rotation des journaux : une tâche essentielle pour garder la maitrise de l’espace disque, sans pour autant sacrifier les journaux.
Les logs sont essentiels, que ce soit sur Linux ou Windows, car ils permettent de garder une trace des différents événements survenus sur une machine. Il peut s’agir du crash d’un service ou d’une tentative de connexion échouée. Néanmoins, s’ils ne sont pas correctement gérés, ils peuvent devenir ingérables à cause de leurs tailles. Résultat :
Le disque de la machine est saturé.
Les performances sont dégradées.
Les journaux sont très pénibles à consulter, car ils sont trop volumineux.
Si nous prenons l’exemple d’un serveur web fortement consulté, les journaux peuvent très rapidement grossir et occuper une place importante. Partant de ce constat, comment bien gérer les journaux stockés sous /var/log/ ? La réponse avec l’outil logrotate, ce dernier étant là pour automatiser la rotation des logs Linux.
Cet article vous guide dans l’utilisation de l’outil logrotate sur Linux, pour mettre en place une rotation automatique et personnalisée des fichiers journaux.
II. Les fonctionnalités clés de logrotate
Automatiser la rotation des journaux, cela consiste en quoi concrètement ? Lorsqu’il est en place, logrotate va accomplir les actions suivantes :
Rotation automatique des journaux, c’est-à-dire qu’il archive les anciens journaux. La configuration permet de déterminer la fréquence à laquelle est effectuée cette tâche. Il crée également les nouveaux fichiers pour les mettre à la disposition des services.
Suppression des anciens journaux, pour éviter l’accumulation des fichiers archivés et ainsi garder la maitrise de l’espace de stockage.
Compression des fichiers de logs archivés pour optimiser l’espace disque, à l’aide de l’algorithme gzip. Par exemple, cela pourra donner un fichier archivé avec l’extension .log.1.gz.
De plus, logrotate prend soin de gérer les permissions sur les fichiers archivés et il peut exécuter des scripts personnalisés à la suite de son processus d’archivage. Par exemple, s’il crée un nouveau fichier journal pour un service, il peut redémarrer le service en question pour s’assurer que le nouveau fichier de log est chargé.
Il fonctionne sur la base de fichiers de configuration où sont définies les règles de rotation, de compression, de conservation ou encore d’exécution de scripts avant ou après la rotation.
En résumé: logrotate automatise la rotation des logs Linux et gère la rétention des journaux : cette action combinée est essentielle, car une rotation sans gestion de la rétention ne serait pas suffisante.
III. Installation de logrotate sur Linux
L’outil logrotate est intégré à certaines distributions Linux. C’est le cas notamment sur Debian, où vous pouvez afficher la version de l’outil pour en avoir le cœur net :
sudo logrotate –version
Voici un exemple de résultat :
logrotate 3.22.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
Sinon, voici comment l’installer sur Debian ou Ubuntu et leurs dérivés :
sudo apt update && sudo apt install logrotate -y
Si vous utilisez plutôt RHEL ou Rocky Linux, lancez cette commande :
sudo yum install logrotate
Une fois l’installation réalisée, vous pouvez passer à la configuration.
IV. Configurer la rotation des logs avec logrotate
A. Configuration globale
Tout d’abord, il est essentiel de bien comprendre comment est organisée la configuration de logrotate puisqu’il n’y a pas qu’un seul fichier. Je dirais plutôt qu’il y a un fichier principal, avec des options globales, et des fichiers par service. Ce qui donne :
/etc/logrotate.conf : le fichier de configuration globale, avec des options par défaut.
/etc/logrotate.d/ : ce dossier contient tous les fichiers de configuration par service. Pour chaque service, vous pouvez déterminer une configuration personnalisée pour la rotation des logs. Cela offre beaucoup de flexibilité.
Commençons par nous intéresser au fichier global, à savoir /etc/logrotate.conf. Au-delà de contenir un include pour charger les fichiers situés dans le dossier évoqué précédemment, il détermine 3 options par défaut (dans la version Debian) :
weekly : il effectuera la vérification de la rotation des journaux une fois par semaine.
rotate 4 : conserver 4 versions de fichiers de logs, soit 4 semaines, car la rotation est hebdomadaire.
create : une fois la rotation effectuée, créer un nouveau fichier de log vierge pour le service.
Ici, vous pourriez tout à fait opérer les changements suivants :
Ajouter la ligne compress pour compresser les journaux archivés.
Remplacer weekly par daily pour effectuer l’archivage tous les jours.
Remplacer rotate 4 par rotate 14 pour conserver les journaux sur 14 versions, soit 14 jours avec la rotation quotidienne.
B. Configuration de logrotate pour un service
S’il y avait déjà logrotate sur votre machine, vous verrez que le dossier logrotate.d n’est pas vide. Il contient déjà des fichiers de configuration pour certains services.
sudo ls /etc/logrotate.d/ -l
total 48
-rw-r–r– 1 root root 120 Jan 11 2025 alternatives
-rw-r–r– 1 root root 173 Jun 24 17:02 apt
-rw-r–r– 1 root root 130 Jun 22 2020 btmp
-rw-r–r– 1 root root 160 Jun 3 15:16 chrony
-rw-r–r– 1 root root 125 Jul 7 19:13 cloud-init
-rw-r–r– 1 root root 112 Jan 11 2025 dpkg
-rw-r–r– 1 root root 248 May 6 2025 rsyslog
-rw-r–r– 1 root root 235 Jan 1 2025 unattended-upgrades
-rw-r–r– 1 root root 908 Nov 13 2024 waagent.logrotate
-rw-r–r– 1 root root 145 Jul 26 2021 wtmp
-rw-r–r– 1 root root 85 Oct 20 18:12 wtmpdb
Par exemple, nous pouvons regarder la configuration du fichier /etc/logrotate.d/chrony correspondant à la rotation des logs de Chrony. Voici son contenu :
/var/log/chrony/*.log {
missingok
nocreate
sharedscripts
postrotate
/usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true
endscript
}
Cette configuration pour le service Chrony cible tous les fichiers .log situés dans le répertoire /var/log/chrony/. Dans le cas où le journal est manquant, logrotate continue avec le fichier suivant sans générer d’erreur grâce à la présence de l’option missingok.
Nous pouvons aussi observer un script personnalisé, via la directive postrotate. En réalité, il y a trois options associées à l’exécution des scripts :
sharedscripts : exécuter le script qu’une seule fois.
prerotate (ouverture du bloc) avec endscript (fin du bloc de script) : script Bash à exécuter avant la rotation.
postrotate (ouverture du bloc) avec endscript (fin du bloc de script) : script Bash à exécuter après la rotation.
La directive nocreate empêche la création automatique d’un nouveau fichier log après rotation, car c’est Chrony lui-même qui se charge de rouvrir ou recréer ses fichiers via la commande chronyc cyclelogs, appelée dans la section postrotate.
Note : dans les blocs de scripts, vous pouvez insérer des instructions sur plusieurs lignes, y compris avec un bloc if/fi, si besoin.
C. Configuration de logrotation pour Apache
Les serveurs web génèrent beaucoup de logs, par exemple Apache2 avec son fichier access.log qui correspond à toutes les requêtes des clients. C’est un cas intéressant pour appliquer une configuration logrotate, tout comme ça peut l’être avec Traefik.
Nous allons créer un fichier logrotate pour Apache2 :
sudo nano /etc/logrotate.d/apache2
Par défaut, les journaux Apache2 sont stockés sous /var/log/apache2/, nous pouvons donc insérer ce bloc pour commencer :
/var/log/apache2/*.log {
}
À l’intérieur de ce bloc, la stratégie logrotate doit être déterminée et elle s’appliquera uniquement pour Apache2.
/var/log/apache2/*.log {
daily
missingok
rotate 31
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/usr/sbin/apache2ctl gracefully > /dev/null 2>/dev/null || true
endscript
}
Cette configuration définit une stratégie de rotation quotidienne, en conservant 31 fichiers archivés. L’option missingok indique que l’absence d’un fichier log ne provoquera pas d’erreur, tandis que notifempty empêche la rotation si le fichier est vide. Sur un service web comme Apache2, Nginx ou encore Caddy, la rotation quotidienne me semble pertinente.
Les logs archivés sont compressés (compress), mais l’opération est retardée (delaycompress) pour éviter d’impacter un fichier encore utilisé (au lendemain, puisque nous sommes en daily).
La directive create permet de recréer automatiquement un fichier vide après chaque rotation avec les permissions 640 et les propriétaires root:adm. Enfin, le bloc postrotate exécute la commande apache2ctl gracefully afin qu’Apache puisse rouvrir proprement son fichier journal sans interrompre le service, ce qui est adapté à un environnement en production.
Enregistrez et fermez le fichier. Ensuite, exécutez cette commande pour vérifier la syntaxe de votre fichier et simuler la rotation (sans la faire réellement) :
sudo logrotate -d /etc/logrotate.d/apache2
Si vous voulez lancer la rotation dès maintenant, remplacez l’option -d par -f. Vous pouvez le faire sur un service spécifique en ciblant son fichier de configuration ou sur l’ensemble des configurations. D’autres options sont listées sur la man page de logrotate.
sudo logrotate -f /etc/logrotate.d/apache2
sudo logrotate -f /etc/logrotate.conf
D. La planification cron de logrotate
L’outil logrotate exécute lui-même ses tâches, de façon automatique, grâce à un fichier cron qui lui est propre et qui est stocké ici : /etc/cron.daily/logrotate.
Ainsi, à chaque exécution, il permet à logrotate de passer en revue l’ensemble des jobs d’archivage configurés sur le système, puis d’effectuer les actions d’archivage correspondantes.
V. Conclusion
Dans le cadre de l’administration Linux, l’outil logrotate est un outil essentiel pour éviter la saturation du disque par les logs, tout en conservant une visibilité sur l’activité des services. C’est une bonne pratique de gérer la rotation et la rétention des journaux, tout en sachant qu’ils peuvent être exportés vers un puits de logs ou un SIEM pour traitement et un archivage sur une plus longue période.
À ce sujet, découvrez ces articles :
FAQ
Qu’est-ce que logrotate sous Linux ?
Logrotate est un outil système disponible sur la plupart des distributions Linux qui permet d’automatiser la gestion des fichiers journaux. Il peut les archiver, les compresser, les supprimer ou exécuter des scripts avant/après rotation pour gérer la rétention, et ainsi éviter la saturation du disque.
Où se trouvent les fichiers de configuration de logrotate ?
Le fichier principal est : /etc/logrotate.conf
Les configurations spécifiques aux services sont situées dans : /etc/logrotate.d/
Peut-on configurer une taille limite des journaux avec logrotate ?
Oui, au-delà de déterminer le nombre de versions à conserver pour les journaux, vous pouvez aussi limiter la taille maximale de chaque fichier. Dans la déclaration de votre stratégie logrotate, utilisez simplement la directive size. Par exemple, pour limiter les fichiers de logs à 200 Mo, indiquez : size 200M.
Quelles sont les fréquences de rotation disponibles ?
L’outil logrotate prend en charge plusieurs fréquences de rotation : quotidienne (daily), hebdomadaire (weekly), mensuelle (monthly). Vous pouvez aussi baser votre approche sur la taille des fichiers.
Peut-on compresser les logs avec logrotate ?
Oui. En ajoutant les directives compress et delaycompress, logrotate compresse les anciens fichiers après rotation. La compression est généralement effectuée au format gzip (.gz).
Comment conserver les logs pendant un mois ?
Il suffit d’utiliser les directives daily (rotation quotidienne) et rotate 30 (conservation de 30 fichiers archives, soit 30 jours de logs).
Peut-on chiffrer les logs avec logrotate ?
Logrotate ne prend pas en charge nativement le chiffrement des fichiers de logs. Par contre, il est possible de chiffrer les fichiers archivés en utilisant GnuPG (GPG) grâce à une paire de clés générée sur le serveur. Il faudra ensuite appeler la commande de chiffrement via compresscmd qui est une directive permettant de spécifier la commande pour compresser les journaux.
Comment consulter les journaux d’erreur de logrotate ?
Dans le cas où un problème est rencontré lors de l’exécution d’une tâche logrotate, vous pourrez obtenir des détails via les journaux de cron. La commande à exécuter est la suivante : sudo journalctl -u cron.
Sous Linux, systemd-journal est-il une alternative à logrotate ?
Oui, systemd-journald peut être considéré comme une alternative à logrotate, mais dans un contexte différent. En effet, journald est le composant de systemd chargé de collecter, stocker et gérer les journaux système. Contrairement à logrotate, qui gère des fichiers de logs traditionnels (au format texte brut), journald enregistre les logs dans un format binaire.
Il inclut ses propres mécanismes de rotation automatique, de limitation par taille, durée ou espace disque, configurables via le fichier de configuration suivant : /etc/systemd/journald.conf. On peut dire que les deux sont complémentaires.
Ingénieur système et réseau, cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
