Rotation et compression des journaux à l'aide de logrotate | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

Rotation et compression des journaux à l'aide de logrotate

  • Niveau : Intermédiaire
  • Temps estimé : ~20 minutes
  • Objectif : Configurer logrotate pour compresser et faire pivoter automatiquement les fichiers journaux de l'application afin d'éviter l'épuisement de l'espace disque.

Introduction

Les journaux sont une partie essentielle de la gestion de toute application en production : sans eux, comprendre de manière fiable ce qui a mal tourné et ce qu'il faut faire à ce sujet serait très difficile. Une application occupée peut générer des milliers d'entrées par minute, et toutes sont généralement stockées dans des fichiers. Nous devons compresser et supprimer les anciens journaux en temps opportun pour éviter de manquer d'espace disque. Dans ce tutoriel, nous allons configurer logrotate sur un serveur Linux.

Qu'est-ce que logrotate ?

logrotate est un utilitaire Linux conçu pour simplifier l'administration des systèmes qui génèrent un grand nombre de fichiers journaux. Il permet de compresser, faire pivoter et supprimer automatiquement les journaux. Il est généralement exécuté quotidiennement, hebdomadairement ou mensuellement via cron ou un minuteur systemd.

Prérequis

Avant de commencer, assurez-vous que les conditions suivantes sont remplies :

  • Système d'exploitation : Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12, ou CentOS/RHEL 7+
  • logrotate : version 3.x (vérifiez à l'étape 1)
  • Accès : accès sudo ou root au serveur
  • Connaissances requises : utilisation confiante de la ligne de commande Linux et édition de fichiers de base

Étape 1 : Vérifier l'installation de logrotate

Pour vérifier l'installation, exécutez simplement :

logrotate --version

Sortie attendue :

logrotate 3.19.0 Commande de courrier par défaut : /usr/bin/mail Commande de compression par défaut : /bin/gzip Commande de décompression par défaut : /bin/gunzip Extension de compression par défaut : .gz Chemin du fichier d'état par défaut : /var/lib/logrotate/status

Si la commande n'est pas trouvée – logrotate n'est pas installé. Installez-le :

Debian/Ubuntu :

sudo apt install logrotate

CentOS/RHEL :

sudo yum install logrotate

Étape 2 : Comprendre la structure de configuration

Le fichier de configuration principal est situé à /etc/logrotate.conf – nous le laisserons inchangé pour l'instant. Nos règles pour des services spécifiques iront dans /etc/logrotate.d/ – un fichier séparé doit y être placé pour chaque service.

Avant d'ajouter quoi que ce soit, vérifiez si une configuration pour votre service existe déjà :

ls /etc/logrotate.d/

Pour les services populaires tels que nginx ou Apache, les configurations sont généralement déjà présentes. Si nginx ou apache2 est déjà là – ouvrez ce fichier et ajustez le nombre de rotations et les paramètres de compression selon vos besoins, plutôt que de créer un doublon.

Étape 3 : Ajouter une configuration de service

Supposons qu'il y ait une application personnalisée et que ses journaux soient situés à /opt/myapp/*.log.

Créez et ouvrez le fichier :

sudo nano /etc/logrotate.d/myapp

Collez ce qui suit à l'intérieur :

/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }

Cette configuration indique à logrotate de :

  1. daily – faire pivoter les journaux quotidiennement ; vous pouvez également spécifier weekly ou monthly.
  2. missingok – ne pas échouer avec une erreur si le fichier journal est manquant.
  3. rotate 14 – conserver 14 copies pivotées avant suppression.
  4. compress – compresser les journaux pivotés en utilisant gzip.
  5. delaycompress – ne pas compresser la rotation la plus récente ; utile si l'application maintient encore le fichier ouvert.
  6. notifempty – sauter la rotation si le fichier journal est vide.
  7. create 0640 www-data adm – créer un nouveau fichier journal vide avec les permissions, le propriétaire et le groupe spécifiés. Le propriétaire doit correspondre à l'utilisateur sous lequel l'application s'exécute (dans les systèmes basés sur Debian souvent www-data, dans les systèmes basés sur RHEL généralement apache ou nginx).
  8. sharedscripts – exécuter le script postrotate une fois, même si plusieurs fichiers correspondent.
  9. postrotate – signaler à l'application de rouvrir ses descripteurs de fichiers après la rotation.

Info

Si le répertoire /opt/myapp/ ou les fichiers journaux n'existent pas encore au moment de la première exécution, ce n'est pas un problème. La directive missingok fera en sorte que logrotate ignore silencieusement le fichier sans générer d'erreur. La rotation des journaux commencera automatiquement dès que l'application créera les journaux.

Étape 4 : Tester la configuration

4.1 Exécution à sec

Après avoir écrit la configuration, elle doit être vérifiée. Le drapeau -d exécute logrotate en mode débogage – rien n'est réellement modifié :

sudo logrotate -d /etc/logrotate.d/myapp

Info

Le mode -d affiche des informations de diagnostic mais ne modifie aucun fichier.

4.2 Exécution réelle forcée

Si l'exécution à sec semble correcte – forcez une rotation réelle en utilisant le drapeau -f :

sudo logrotate -f /etc/logrotate.d/myapp

Info

Important : Le drapeau -f déclenche une rotation réelle. Exécutez-le uniquement après que l'exécution de test semble correcte.

Étape 5 : Vérifier le résultat

Après les premières rotations, vérifiez le répertoire des journaux :

ls -lh /opt/myapp/

Sortie attendue :

total 28K -rw-r----- 1 www-data adm 0 Jan 17 12:00 app.log -rw-r----- 1 www-data adm 12K Jan 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Jan 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Jan 15 12:00 app.log.3.gz

La rotation la plus récente (app.log.1) reste non compressée en raison de delaycompress. Tout ce qui est plus ancien est compressé avec gzip. C'est exactement ce que nous voulions.

Étape 6 : Vérifier le calendrier automatique

logrotate s'exécute automatiquement – via cron ou un minuteur systemd, selon la distribution.

Systèmes basés sur cron

cat /etc/cron.daily/logrotate

Si le fichier existe – c'est le fichier qui exécute logrotate quotidiennement.

Systèmes basés sur systemd

Sur les systèmes plus récents, logrotate peut être exécuté via un minuteur systemd au lieu de cron.

Vérifiez :

systemctl list-timers | grep logrotate

Vous devriez voir un minuteur avec les heures de dernière et prochaine exécution, quelque chose comme :

Thu 2026-01-18 00:00:00 UTC 23h left Wed 2026-01-17 00:00:11 UTC 47 min ago logrotate.timer

Si le logrotate.timer est absent de la sortie – le minuteur est désactivé. Activez-le :

sudo systemctl enable logrotate.timer

sudo systemctl start logrotate.timer

Fichier d'état

Vous pouvez vérifier quand logrotate a été exécuté pour la dernière fois via son propre fichier d'état :

cat /var/lib/logrotate/status

C'est l'historique de rotation propre à logrotate. Après la première exécution réelle, vous verrez chaque fichier journal avec la date de sa dernière rotation :

"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17

Si un journal ne tourne pas comme prévu – c'est le premier endroit à vérifier.

Annulation

Pour annuler tout ce qui a été fait, supprimez simplement le fichier de configuration de /etc/logrotate.d/ :

sudo rm /etc/logrotate.d/myapp

Cela arrêtera le traitement des journaux pour votre application. Les fichiers déjà pivotés ne sont pas supprimés.

Pour supprimer logrotate entièrement :

Debian/Ubuntu :

sudo apt remove logrotate

CentOS/RHEL :

sudo yum remove logrotate

Info

Important : Supprimer logrotate désactivera la rotation des journaux pour l'ensemble du système, y compris nginx, rsyslog et d'autres services qui en dépendent.

Conclusion

C'est tout. Un fichier bien écrit dans /etc/logrotate.d/, vérifié avec -d – et c'est fait. Les journaux restent propres, le disque reste en bonne santé, et vous n'avez plus à y penser.

Version du document : 1.2
Dernière mise à jour : Mars 2026
Propriétaire : Équipe de documentation technique

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA