========================================== Logrotate : Gestion Efficace des Journaux ========================================== .. contents:: :depth: 3 :local: :backlinks: top 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 ` : 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 ` : Inclut d'autres fichiers ou répertoires de configuration. - `create ` : Définit les permissions et la propriété des nouveaux journaux. **Options Spécifiques aux Fichiers** : - `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** : .. code-block:: bash 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 `** : Déplace les fichiers archivés dans un répertoire spécifique. - **`extension `** : Ajoute une extension personnalisée aux fichiers archivés (par exemple, `.log`). **Contrôle des tailles et durées** : - **`maxage `** : Supprime les journaux archivés plus vieux qu’un certain nombre de jours. - **`minsize `** : Rotation uniquement lorsque le fichier dépasse une taille minimale (en combinaison avec un intervalle). - **`maxsize `** : Rotation lorsque la taille maximale est atteinte, même si l'intervalle n’est pas encore écoulé. **Personnalisation avancée** : - **`compresscmd `** : Définit une commande spécifique pour compresser les fichiers (par défaut `gzip`). - **`uncompresscmd `** : Commande pour décompresser les fichiers (par défaut `gunzip`). - **`compressext `** : Change l’extension utilisée pour les fichiers compressés (par exemple, `.bz2` au lieu de `.gz`). - **`mail
`** : 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`** : .. code-block:: bash /var/log/myapp.log { daily copytruncate rotate 7 compress notifempty } **Archivage des journaux dans un répertoire spécifique** : .. code-block:: bash /var/log/nginx/*.log { weekly olddir /var/log/nginx/old/ rotate 4 compress missingok } **Suppression des journaux archivés après 30 jours** : .. code-block:: bash /var/log/auth.log { daily rotate 7 maxage 30 compress } **Compression personnalisée avec `bzip2`** : .. code-block:: bash /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** : .. code-block:: bash dateext dateformat -%Y%m%d - **Exemple de fichier généré** : ``logfile-20241210`` 2. **Format avec séparateurs lisibles** : - **Syntaxe** : .. code-block:: bash dateext dateformat -%Y-%m-%d - **Exemple de fichier généré** : ``logfile-2024-12-10`` 3. **Format avec jour de la semaine** : - **Syntaxe** : .. code-block:: bash dateext dateformat -%Y-%m-%d-%a - **Exemple de fichier généré** : ``logfile-2024-12-10-Tue`` 4. **Format avec horodatage précis** : - **Syntaxe** : .. code-block:: bash dateext dateformat -%Y%m%d-%H%M%S - **Exemple de fichier généré** : ``logfile-20241210-141530`` 5. **Format compact (sans séparateurs)** : - **Syntaxe** : .. code-block:: bash 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** : .. code-block:: bash dateext dateformat -%G-W%V - **Exemple de fichier généré** : ``logfile-2024-W50`` 7. **Format français (jour/mois/année)** : - **Syntaxe** : .. code-block:: bash 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** : .. code-block:: bash # /etc/logrotate.conf weekly rotate 4 create compress include /etc/logrotate.d **Configuration Spécifique à une Application** : .. code-block:: bash # /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** : .. code-block:: bash # ~/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** : .. code-block:: bash logrotate -s /chemin/vers/fichier_etat /chemin/vers/config - **Débogage** : Exécutez `logrotate` en mode débogage pour valider les configurations : .. code-block:: bash logrotate --debug /etc/logrotate.conf - **Intégration avec Cron** : Pour des rotations plus fréquentes, ajustez la planification cron : .. code-block:: bash 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