logrotate archive, compresse et supprime automatiquement les anciens fichiers de log (/var/log/*.log). Tandis que journald gère le journal binaire de systemd, logrotate s'occupe des fichiers texte produits par les services qui écrivent directement dans /var/log/ (Nginx, Apache, MySQL, applications métier). Sans rotation, ces fichiers grossissent jusqu'à remplir le disque.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre l'architecture de logrotate (
logrotate.conf+/etc/logrotate.d/) - Lire et écrire une politique de rotation pour un service
- Utiliser les directives de compression, rétention et permissions
- Exécuter des scripts post-rotation (redémarrage de service)
- Tester une configuration sans risque et forcer une rotation manuelle
- Connaître la différence entre logrotate et journald
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »logrotate est indispensable dès qu'un service écrit dans des fichiers texte :
- Nginx ou Apache produisent des
access.logeterror.logqui peuvent atteindre plusieurs Go par jour sur un site actif - Une application métier écrit ses logs dans
/var/log/monapp/sans aucune rotation intégrée - Le disque
/varse remplit et déclenche des alertes, il faut compresser et purger les anciens logs - La conformité exige de conserver les logs 90 jours mais pas indéfiniment
logrotate et journald, deux rôles complémentaires
Section intitulée « logrotate et journald, deux rôles complémentaires »| Outil | Gère | Stockage | Configuration |
|---|---|---|---|
| journald | Journal binaire systemd | /var/log/journal/ | journald.conf |
| logrotate | Fichiers texte classiques | /var/log/*.log | logrotate.conf + /etc/logrotate.d/ |
Les deux coexistent sur un système moderne. journald capture les flux stdout/stderr des services systemd, les messages syslog et les logs du noyau. logrotate gère les fichiers texte que les services écrivent directement sur le disque.
Installation
Section intitulée « Installation »logrotate est préinstallé sur la plupart des distributions. Sinon :
sudo apt update && sudo apt install logrotatesudo dnf install logrotate# Vérifier la versionlogrotate --versionlogrotate 3.21.0Architecture de la configuration
Section intitulée « Architecture de la configuration »La configuration de logrotate repose sur deux niveaux :
| Fichier | Rôle |
|---|---|
/etc/logrotate.conf | Règles globales par défaut (fréquence, rétention) |
/etc/logrotate.d/ | Un fichier par service qui surcharge les règles globales |
Configuration globale
Section intitulée « Configuration globale »cat /etc/logrotate.confweeklyrotate 4createdateextcompressinclude /etc/logrotate.d| Directive | Effet |
|---|---|
weekly | Rotation hebdomadaire par défaut |
rotate 4 | Conserver 4 fichiers archivés |
create | Créer un nouveau fichier après rotation |
dateext | Suffixer les archives avec la date (-20260628) |
compress | Compresser les archives (gzip) |
include /etc/logrotate.d | Charger les configurations par service |
Configuration par service
Section intitulée « Configuration par service »Chaque service place son fichier dans /etc/logrotate.d/. Exemple pour Nginx :
cat /etc/logrotate.d/nginx/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 > /dev/null 2>&1 || true fi endscript}Directives essentielles
Section intitulée « Directives essentielles »Fréquence
Section intitulée « Fréquence »| Directive | Rotation |
|---|---|
daily | Chaque jour |
weekly | Chaque semaine |
monthly | Chaque mois |
size 100M | Quand le fichier dépasse 100 Mo |
Rétention
Section intitulée « Rétention »| Directive | Effet |
|---|---|
rotate N | Garder N archives |
maxage N | Supprimer les archives de plus de N jours |
Compression
Section intitulée « Compression »| Directive | Effet |
|---|---|
compress | Compresser les archives (gzip) |
delaycompress | Reporter la compression d'un cycle (utile si un service écrit encore) |
compresscmd bzip2 | Utiliser bzip2 au lieu de gzip |
nocompress | Désactiver la compression |
Création du nouveau fichier
Section intitulée « Création du nouveau fichier »create 0640 root admCrée le nouveau fichier avec les permissions 0640, propriétaire root, groupe adm. Le service peut continuer à écrire immédiatement.
Sécurité
Section intitulée « Sécurité »| Directive | Effet |
|---|---|
missingok | Ne pas signaler d'erreur si le fichier n'existe pas |
notifempty | Ne pas tourner un fichier vide |
su root adm | Exécuter la rotation avec cet utilisateur/groupe (requis si le dossier a des permissions spéciales) |
Scripts pre et post-rotation
Section intitulée « Scripts pre et post-rotation »Les blocs prerotate et postrotate permettent d'exécuter des commandes avant et après la rotation :
/var/log/myapp/*.log { daily rotate 7 compress missingok notifempty create 0640 myapp myapp sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript}| Bloc | Quand |
|---|---|
prerotate ... endscript | Avant la rotation |
postrotate ... endscript | Après la rotation |
firstaction ... endscript | Avant la première rotation (une seule fois) |
lastaction ... endscript | Après la dernière rotation (une seule fois) |
sharedscripts garantit que le script ne s'exécute qu'une seule fois, même si plusieurs fichiers correspondent au pattern.
Tester et exécuter
Section intitulée « Tester et exécuter »Tester sans appliquer (mode debug)
Section intitulée « Tester sans appliquer (mode debug) »sudo logrotate -d /etc/logrotate.d/nginxLe flag -d simule la rotation et affiche ce qui serait fait, sans modifier aucun fichier. Utilisez-le systématiquement avant de mettre en production une nouvelle configuration.
Forcer la rotation
Section intitulée « Forcer la rotation »# Forcer la rotation de tous les fichierssudo logrotate -f /etc/logrotate.conf
# Forcer la rotation d'un seul servicesudo logrotate -f /etc/logrotate.d/nginxMode verbose
Section intitulée « Mode verbose »sudo logrotate -v /etc/logrotate.confLe flag -v affiche les détails de chaque rotation effectuée.
Déclenchement automatique
Section intitulée « Déclenchement automatique »Sur les distributions modernes, logrotate est déclenché par un timer systemd (et non plus par cron) :
systemctl cat logrotate.timer[Timer]OnCalendar=dailyAccuracySec=12hPersistent=true# Vérifier que le timer est actifsystemctl status logrotate.timerÉcrire une politique complète
Section intitulée « Écrire une politique complète »Voici un exemple de politique pour une application métier :
-
Créer le fichier de configuration
Fenêtre de terminal sudo nano /etc/logrotate.d/monapp -
Écrire la politique
/var/log/monapp/*.log {dailyrotate 30compressdelaycompressmissingoknotifemptycreate 0640 monapp monappsu monapp monappsharedscriptspostrotatesystemctl reload monapp > /dev/null 2>&1 || trueendscript} -
Tester la configuration
Fenêtre de terminal sudo logrotate -d /etc/logrotate.d/monappVérification : la sortie doit afficher les fichiers qui seraient tournés, sans erreur de syntaxe.
-
Forcer une première rotation pour valider
Fenêtre de terminal sudo logrotate -f /etc/logrotate.d/monappls -la /var/log/monapp/Vérification : un fichier
.1.gzou daté doit apparaître.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Logs jamais tournés | Timer désactivé | systemctl enable --now logrotate.timer |
error: skipping ... not readable | Permissions insuffisantes | Ajouter su root adm ou su root root |
| Logs tournés mais service écrit dans l'ancien | Pas de postrotate | Ajouter un bloc postrotate avec systemctl reload |
error: ... duplicate log entry | Même fichier dans 2 configs | Vérifier /etc/logrotate.d/ pour les doublons |
| Archives non compressées | compress absent | Ajouter compress dans la configuration |
Fichier .1 mais pas .1.gz | delaycompress actif | Normal, la compression s'applique au cycle suivant |
# Diagnostic rapidesystemctl status logrotate.timer # Timer actif ?sudo logrotate -d /etc/logrotate.conf # Erreurs de config ?ls -la /var/log/nginx/ # Rotation effective ?journalctl -u logrotate.service # Dernière exécution ?Bonnes pratiques
Section intitulée « Bonnes pratiques »- Toujours tester avec
-davant de modifier une politique en production - Utiliser
delaycompresspour les services qui peuvent encore écrire dans l'ancien fichier pendant quelques secondes - Ajouter
sharedscripts+postrotatepour recharger le service après rotation - Définir des permissions restrictives avec
create, les logs contiennent souvent des informations sensibles (IP, erreurs, chemins) - Configurer
maxageen complément derotate, supprimer les archives trop anciennes même si le compteur n'est pas atteint - Séparer les configurations dans
/etc/logrotate.d/, un fichier par service, jamais tout danslogrotate.conf - Surveiller l'espace disque, logrotate ne résout pas le problème si les logs croissent plus vite que la rotation
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- logrotate gère les fichiers de log texte, journald gère le journal binaire de systemd. Les deux sont complémentaires
- La configuration globale est dans
/etc/logrotate.conf, les configurations par service dans/etc/logrotate.d/ - Les directives clés :
daily/weekly,rotate N,compress,delaycompress,create,postrotate logrotate -dsimule la rotation sans rien modifier, à utiliser avant chaque changementlogrotate -fforce la rotation, utile pour valider une nouvelle configuration- Le bloc
postrotaterecharge le service pour qu'il écrive dans le nouveau fichier - Sur les systèmes modernes, logrotate est déclenché par un timer systemd (
logrotate.timer), plus par cron