Logrotate : Gestion Efficace des Journaux

Introduction

Logrotate est un outil puissant conçu pour gérer la croissance des fichiers journaux sous Linux. Il automatise la rotation, la compression, la suppression et l’envoi des journaux pour éviter qu’ils n’occupent trop d’espace disque tout en maintenant les performances du système. Cette documentation fournit une exploration complète de logrotate, de sa configuration, de ses options et des meilleures pratiques pour une gestion efficace des journaux.

Commandes et Informations Rapides

Voici quelques commandes rapides pour les tâches courantes :

  • Tester une configuration de logrotate : .. code-block:: bash

    logrotate –debug /chemin/vers/config

  • Forcer la rotation des journaux : .. code-block:: bash

    logrotate -f /chemin/vers/config

  • Afficher la version de logrotate : .. code-block:: bash

    logrotate –version

Sections Détaillées

Présentation Générale de Logrotate

Fonctionnalité :

Logrotate assure que les journaux : - Sont archivés (renommés ou compressés) en fonction de leur taille ou d’intervalles de temps. - Sont compressés pour économiser de l’espace disque. - Ont une durée de rétention limitée définie par la directive rotate. - Peuvent déclencher des scripts avant ou après la rotation.

Fichiers de Configuration Par Défaut :

  • Global : /etc/logrotate.conf

  • Spécifique à une application : /etc/logrotate.d/

Tâches Principales :

  • Empêcher les fichiers journaux de croître indéfiniment.

  • Faciliter la gestion et la récupération des journaux.

Options et Directives Clés

Voici les principales directives et options dans les configurations de logrotate :

Options Globales :

  • weekly, daily, monthly : Définit les intervalles de rotation.

  • rotate <count> : Définit le nombre d’archives de journaux à conserver.

  • compress : Active la compression des journaux.

  • dateext : Ajoute des dates aux journaux archivés (par exemple, journal-YYYYMMDD).

  • include <directory> : Inclut d’autres fichiers ou répertoires de configuration.

  • create <mode> <owner> <group> : Définit les permissions et la propriété des nouveaux journaux.

Options Spécifiques aux Fichiers :

  • size <size> : Archive les journaux dépassant une taille spécifique (par exemple, 100M).

  • missingok : Continue la rotation même si un fichier est manquant.

  • notifempty : Ignore la rotation si le fichier est vide.

  • delaycompress : Diffère la compression à la prochaine rotation.

  • sharedscripts : Exécute les scripts postrotate et prerotate une seule fois pour plusieurs fichiers correspondants.

Scripts :

  • `prerotate`/`postrotate` : Exécute des commandes ou scripts avant/après la rotation.

  • Exemple :

    postrotate
        systemctl reload nginx
    endscript
    

Options Moins Courantes

Voici des options moins utilisées mais parfois très utiles selon les cas spécifiques :

Gestion des fichiers et répertoires :

  • `copytruncate` : Tronc des fichiers après rotation au lieu de les déplacer. Utile pour les applications qui continuent à écrire dans le fichier même après rotation.

  • `nocreate` : Désactive la création d’un nouveau fichier après la rotation.

  • `olddir <directory>` : Déplace les fichiers archivés dans un répertoire spécifique.

  • `extension <ext>` : Ajoute une extension personnalisée aux fichiers archivés (par exemple, .log).

Contrôle des tailles et durées :

  • `maxage <days>` : Supprime les journaux archivés plus vieux qu’un certain nombre de jours.

  • `minsize <size>` : Rotation uniquement lorsque le fichier dépasse une taille minimale (en combinaison avec un intervalle).

  • `maxsize <size>` : Rotation lorsque la taille maximale est atteinte, même si l’intervalle n’est pas encore écoulé.

Personnalisation avancée :

  • `compresscmd <command>` : Définit une commande spécifique pour compresser les fichiers (par défaut gzip).

  • `uncompresscmd <command>` : Commande pour décompresser les fichiers (par défaut gunzip).

  • `compressext <ext>` : Change l’extension utilisée pour les fichiers compressés (par exemple, .bz2 au lieu de .gz).

  • `mail <address>` : Envoie les journaux archivés par e-mail à l’adresse spécifiée.

  • `shred` : Utilise shred pour écraser les journaux supprimés afin de garantir leur suppression sécurisée.

Exemples

Troncature d’un fichier avec `copytruncate` :

/var/log/myapp.log {
    daily
    copytruncate
    rotate 7
    compress
    notifempty
}

Archivage des journaux dans un répertoire spécifique :

/var/log/nginx/*.log {
    weekly
    olddir /var/log/nginx/old/
    rotate 4
    compress
    missingok
}

Suppression des journaux archivés après 30 jours :

/var/log/auth.log {
    daily
    rotate 7
    maxage 30
    compress
}

Compression personnalisée avec `bzip2` :

/var/log/custom/*.log {
    daily
    rotate 5
    compress
    compresscmd /bin/bzip2
    compressext .bz2
}

Formats de Dateext

La directive dateext permet d’archiver les journaux en ajoutant une extension basée sur la date, au lieu d’un simple incrément numérique. Cela facilite l’identification des journaux en fonction de leur date de rotation. Par défaut, le format utilisé est -YYYYMMDD. Toutefois, il est possible de personnaliser ce format à l’aide de la directive dateformat.

Principaux Formats et Exemples

Voici plusieurs formats courants utilisables avec dateformat :

  1. Format par défaut (ISO 8601) : - Syntaxe :

    dateext
    dateformat -%Y%m%d
    
    • Exemple de fichier généré : logfile-20241210

  2. Format avec séparateurs lisibles : - Syntaxe :

    dateext
    dateformat -%Y-%m-%d
    
    • Exemple de fichier généré : logfile-2024-12-10

  3. Format avec jour de la semaine : - Syntaxe :

    dateext
    dateformat -%Y-%m-%d-%a
    
    • Exemple de fichier généré : logfile-2024-12-10-Tue

  4. Format avec horodatage précis : - Syntaxe :

    dateext
    dateformat -%Y%m%d-%H%M%S
    
    • Exemple de fichier généré : logfile-20241210-141530

  5. Format compact (sans séparateurs) : - Syntaxe :

    dateext
    dateformat -%Y%m%d%H%M
    
    • Exemple de fichier généré : logfile-202412101415

  6. Format avec année et numéro de semaine ISO : - Syntaxe :

    dateext
    dateformat -%G-W%V
    
    • Exemple de fichier généré : logfile-2024-W50

  7. Format français (jour/mois/année) : - Syntaxe :

    dateext
    dateformat -%d-%m-%Y
    
    • Exemple de fichier généré : logfile-10-12-2024

Précautions

  • Le format dateformat doit être lexicographiquement triable pour que les fichiers soient classés correctement (par exemple : année-mois-jour est triable, jour-mois-année ne l’est pas).

  • Assurez-vous que la configuration respecte les spécifications locales de l’environnement.

Exemples de Configurations

Configuration Globale :

# /etc/logrotate.conf
weekly
rotate 4
create
compress
include /etc/logrotate.d

Configuration Spécifique à une Application :

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    size 100M
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 root adm
    postrotate
        systemctl reload nginx
    endscript
}

Configuration Personnalisée pour des Journaux d’Utilisateur :

  # ~/logrotate.conf
  /home/utilisateur/journaux/*.log {
      hourly
      rotate 5
      compress
      create 600 utilisateur utilisateur
      postrotate
          echo "Rotation réussie !" | mail -s "Logrotate" utilisateur@example.com
      endscript
  }

**Configuration advance :**

.. code-block:: bash

  /var/log/*.log {
      daily                         # Rotation quotidienne
      copytruncate                                      # Vide le fichier rotate mais ne le supprime pas
      rotate 90                     # Conserver les journaux pendant 90 jours
      compress                      # Compresser les fichiers archivés immédiatement
      missingok                     # Ignorer les erreurs si un fichier est manquant
      notifempty                    # Effectuer la rotation même si le fichier est vide
      dateext                       # Ajouter une extension de date aux fichiers archivés
      dateyesterday                 # Utiliser la date d'hier pour l'extension
      dateformat -%Y-%m-%d          # Format de date lisible (AAAA-MM-JJ)
      postrotate
          logger "$(date '+%Y-%m-%d %H:%M:%S') - Rotation effectuée pour /var/log/*.log"
      endscript
  }

Meilleures Pratiques

Recommandations Générales :

  • Utilisez la directive size pour les journaux à croissance imprévisible.

  • Combinez notifempty et missingok pour une gestion robuste dans des environnements avec une journalisation sporadique.

  • Compressez les journaux archivés pour économiser de l’espace, mais évitez de compresser les journaux en cours d’utilisation pour réduire la charge d’E/S.

Conseils Avancés :

  • Fichiers d’État Personnalisés :

    logrotate -s /chemin/vers/fichier_etat /chemin/vers/config
    
  • Débogage : Exécutez logrotate en mode débogage pour valider les configurations :

    logrotate --debug /etc/logrotate.conf
    
  • Intégration avec Cron : Pour des rotations plus fréquentes, ajustez la planification cron :

    sudo mv /etc/cron.daily/logrotate /etc/cron.hourly/
    

Erreurs Courantes :

  • Directives Mal Orthographiées : Déboguez avec logrotate –debug.

  • Permissions Incorrectes : Utilisez la directive create pour définir des droits d’accès et de propriété appropriés.

Meta

  • Auteur : CBillet

  • Date : 10/12/2024