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
:
Format par défaut (ISO 8601) : - Syntaxe :
dateext dateformat -%Y%m%d
Exemple de fichier généré :
logfile-20241210
Format avec séparateurs lisibles : - Syntaxe :
dateext dateformat -%Y-%m-%d
Exemple de fichier généré :
logfile-2024-12-10
Format avec jour de la semaine : - Syntaxe :
dateext dateformat -%Y-%m-%d-%a
Exemple de fichier généré :
logfile-2024-12-10-Tue
Format avec horodatage précis : - Syntaxe :
dateext dateformat -%Y%m%d-%H%M%S
Exemple de fichier généré :
logfile-20241210-141530
Format compact (sans séparateurs) : - Syntaxe :
dateext dateformat -%Y%m%d%H%M
Exemple de fichier généré :
logfile-202412101415
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
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