Outil de rotation de journaux Linux : logrotate

Table des matières

  • Introduction
  • Utilisation
  • Emplacement des fichiers de configuration
  • Analyse de la structure de configuration
  • Exemple de fichier de configuration logrotate
  • Différences entre CentOS et Ubuntu
  • Vérification de l'intervalle de planification logrotate sous CentOS
  • Vérification de l'intervalle de planification logrotate sous Ubuntu

Introduction

logrotate est un utilitaire conçu pour la gestion des fichiers journaux, principalement utilisé pour la rotation, la compression, la suppression et les notifications par courriel des journaux. Il est largement déployé dans les environnements Linux et systèmes de type Unix.

  • Rotation des journaux : logrotate permet périodiquement de renommer ou de déplacer le fichier journal actuel, et de créer un nouveau fichier journal pour enregistrer les informations ultérieures. Par exemple, il peut transformer access.log en access.log.1 et générer un nouveau access.log.
  • Compression des journaux : les fichiers journaux après rotation peuvent être compressés pour économiser de l'espace disque, généralement avec des outils comme gzip ou bzip2.
  • Suppression des journaux : selon des règles configurées, les fichiers journaux expirés peuvent être supprimés pour éviter une occupation excessive de l'espace disque.
  • Notification par courriel : certaines opérations terminées peuvent déclencher l'envoi d'un courriel à l'administrateur.
  • Archivage des journaux : les anciens fichiers journaux peuvent être archivés vers un emplacement spécifique pour faciliter les sauvegadres ou analyses ultérieures.

Utilisation

Emplacement des fichiers de configuration

Un fichier de configuration principal est généralement situé à /etc/logrotate.conf Cependant, les configurations spécifiques à chaque application sont placées dans le répertoire /etc/logrotate.d On peut y écrire des configurations individuelles pour chaque processus, et logrotate lira périodiquement ces fichiers pour exécuter les opérasions configurées

Analyse de la structure de configuration

Voici un exemple :

cat /etc/logrotate.d/nginx


Ce qui donne :

/var/log/nginx/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 644 www-data adm
        sharedscripts
        postrotate
                /bin/kill -USR1 `cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true
        endscript
}

  • /var/log/nginx/*.log : spécifie le chemin du ou des fichiers journaux à gérer (avec un wildcard)
  • daily : rotation quotidienne, logrotate vérifiera ce journal chaque jour et exécutera la rotation si nécessaire
  • rotate 7 : conserve jusqu'à 7 fichiers, au huitième cycle, le plus ancien fichier sera supprimé
  • compress : active la compression des anciens fichiers
  • delaycompress : le fichier actuel n'est pas compressé immédiatement, mais lors de la rotation suivante
  • missingok : si le fichier n'existe pas, aucune erreur n'est générée
  • notifempty : si le fichier est vide, aucune rotation n'est effectuée
  • create 644 www-data adm : après rotation, logrotate crée un nouveau fichier journal vide avec les permissions et propriétés spécifiées
  • sharedscripts : le script postrotate n'est exécuté qu'une fois pour tous les fichiers de ce bloc
  • postrotate/endscript : bloc de script exécuté après la rotation des journaux

Parmi les autres paramètres disponibles, on trouve :

  • weekly : rotation hebdomadaire
  • monthly : rotation mensuelle
  • size : rotation basée sur la taille, peut être un nombre (octets) ou une valeur avec unités (K, M, G pour kilo, méga, giga-octets)
  • copytruncate : copie d'abord le contenu du fichier journal actuel, puis vide le fichier original, plutôt que de le renommer ou le déplacer. Cela évite de perturber les descripteurs de fichiers existants, mais peut affecter les performances et causer une perte de logs lors d'écritures intensives.
  • dateext : ajoute une extension de date aux fichiers de rotation
  • dateformat -%Y%m%d : format personnalisé pour la date dans le nom des fichiers

Exemple de fichier de configuration logrotate

Création et édition du fichier :

vim /etc/logrotate.d/application_web


Contenu :

/var/log/application/*.log {
        weekly
        size 100M
        rotate 5
        compress
        delaycompress
        missingok
        notifempty
        copytruncate
        dateext
        dateformat -%Y%m%d
        olddir /var/log/archive/application
        minsize 10M
        maxsize 1G
}


Cette configuration :

  1. Vérifie les fichiers /var/log/application/*.log chaque semaine.
  2. Effectue une rotation lorsque la taille atteint ou dépasse 100M.
  3. Ajoute une extension de date (format AAAAMMJJ) aux fichiers de rotation.
  4. Conserve jusqu'à 5 anciens fichiers journaux.
  5. Compresse les anciens fichiers lors de la rotation suivante.
  6. Ne génère pas d'erreur si le fichier n'existe pas ou est vide.
  7. Utilise copytruncate pour vider le fichier original tout en conservant son descripteur de fichier.
  8. Déplace les anciens journaux vers /var/log/archive/application.
  9. Ne déclenche la rotation que si le fichier fait au moins 10M (même si la rotation hebdomadaire est due).
  10. Ne déclenche pas la rotation si le fichier dépasse 1G (même si la rotation hebdomadaire est due).

Différences entre CentOS et Ubuntu

Sous CentOS, l'exécution de logrotate est généralement déclenchée par des tâches cron planifiées. Ubuntu (depuis la version 22.04) utilise systemd-timer pour gérer l'exécution de logrotate. systemd-timer fait partie de systemd et remplace le traditionnel cron pour offrir une gestion de tâches planifiées plus moderne, flexible et précise.

Vérification de l'intervalle de planification logrotate sous CentOS

Vérification du fichier de planification, son existence indique que logrotate est déclenché par cron comme tâche quotidienne :

ls -l /etc/cron.daily/logrotate


On peut vérifier l'heure exacte de la planification cron quotiduellle avec :

crontab -l


Ou directement consulter le fichier :

cat /etc/crontab


On trouve généralement une entrée similaire à :

22 2 * * * /usr/sbin/logrotate /etc/logrotate.conf


Ce qui indique que logrotate s'exécute chaque jour à 2h22 du matin.

Vérification de l'intervalle de planification logrotate sous Ubuntu

Sur Ubuntu 22.04, la planification de logrotate est généralement gérée par systemd-timer. Pour vérifier l'intervalle de planification :

systemctl status logrotate.timer


Ce qui donne un résultat similaire à :

● logrotate.timer - Rotation quotidienne des fichiers journaux
     Loaded: loaded (/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2025-05-06 07:15:42 CEST; 1 week 3 days ago
    Trigger: Tue 2025-05-13 06:30:00 CEST; 1 day left
   Triggers: ● logrotate.service
       Docs: man:logrotate(8)
             man:logrotate.conf(5)

May 06 07:15:42 ubuntu systemd[1]: Started Rotation quotidienne des fichiers journaux.


Étiquettes: logrotate gestion-logs Linux systemd cron

Publié le 19 juin à 01h55