Dans tout environnement de serveur de production, la gestion des fichiers journaux est un aspect crucial de l’administration système. Les fichiers journaux contiennent des informations précieuses sur les événements système, le comportement des applications et les problèmes potentiels, les rendant indispensables pour le dépannage et la surveillance. Cependant, s’ils ne sont pas contrôlés, les fichiers journaux peuvent rapidement grossir, consommant un espace disque important et pouvant entraîner une dégradation des performances, voire un plantage du système.
Logrotate est un utilitaire puissant conçu pour résoudre ce problème en effectuant la rotation, la compression et l’élagage automatiques des fichiers journaux selon des règles et des planifications prédéfinies. En compressant et en archivant régulièrement les anciens fichiers journaux, et en supprimant ceux devenus obsolètes, Logrotate garantit une utilisation efficace de l’espace disque et que les fichiers journaux restent gérables.
Dans ce guide complet, nous explorerons les fonctionnalités de Logrotate, sa configuration par défaut sur Ubuntu 20.04 et 22.04, et nous parcourrons le processus de configuration des règles de rotation des journaux personnalisées pour une application fictive.
Prérequis
Avant de poursuivre, assurez-vous de disposer des éléments suivants :
- Un serveur Ubuntu 20.04 ou 22.04 avec un compte utilisateur non root ayant les privilèges sudo.
- Une connaissance des opérations de base en ligne de commande et de l’édition de texte.
Logrotate est pré-installé sur Ubuntu, mais si vous devez l’installer manuellement, vous pouvez le faire en exécutant les commandes suivantes :
$ sudo apt update
$ sudo apt install logrotate
Étape 1 : Vérifier la version de Logrotate
Bien que Logrotate soit pré-installé sur Ubuntu, il est judicieux de vérifier la version installée et ses paramètres par défaut. Vous pouvez le faire en exécutant la commande suivante :
$ logrotate --version
Cette commande affichera le numéro de version, ainsi que des informations sur les paramètres par défaut tels que la commande de messagerie, la commande de compression et le chemin du fichier d’état. Voici un exemple de sortie :
logrotate 3.19.0
Commande de messagerie 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
Prise en charge des ACL : oui
Prise en charge de SELinux : oui
Si vous utilisez une distribution non Ubuntu ou une version de Logrotate nettement différente, certaines options de configuration abordées dans ce guide peuvent ne pas s’appliquer. Dans de tels cas, consultez les pages de manuel (man logrotate
) ou la documentation en ligne pour votre version spécifique de Logrotate.
Étape 2 : Découvrir la configuration par défaut
Sur les systèmes Ubuntu, la configuration de Logrotate est principalement gérée à partir de deux emplacements :
/etc/logrotate.conf
: Ce fichier contient les paramètres par défaut et configure la rotation des journaux pour quelques journaux système qui n’appartiennent à aucun paquet installé. Il inclut également les fichiers de configuration du répertoire/etc/logrotate.d
en utilisant une instructioninclude
./etc/logrotate.d/
: Ce répertoire contient les fichiers de configuration pour divers paquets installés qui nécessitent une rotation des journaux. Par exemple, vous y trouverez des fichiers de configuration pour les outils système de base tels queapt
,dpkg
,rsyslog
, etc.
Examinons la configuration par défaut dans le fichier /etc/logrotate.conf
:
$ sudo cat /etc/logrotate.conf
Ce fichier configure la rotation hebdomadaire des fichiers journaux appartenant à l’utilisateur root et au groupe syslog. Il conserve quatre fichiers journaux tournés (rotate 4
) et crée de nouveaux fichiers journaux vides après la rotation (create
). De plus, il inclut les fichiers de configuration du répertoire /etc/logrotate.d
.
Ensuite, jetons un coup d’œil à un exemple de fichier de configuration du répertoire /etc/logrotate.d
pour le paquet apt
:
$ sudo cat /etc/logrotate.d/apt
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Ce fichier contient des blocs de configuration pour deux fichiers journaux : term.log
et history.log
, situés dans le répertoire /var/log/apt/
. Les options de configuration utilisées ici sont :
rotate 12
: Conserver 12 anciens fichiers journaux tournés (remplaçant la valeur par défaut de 4).monthly
: Faire tourner les journaux une fois par mois (remplaçant la rotation hebdomadaire par défaut).compress
: Compresser les fichiers journaux tournés en utilisant gzip.missingok
: Ne pas générer d’erreur si le fichier journal est manquant.notifempty
: Ne pas faire tourner le fichier journal s’il est vide.
Toutes les options non spécifiées dans ces blocs de configuration hériteront des valeurs par défaut de /etc/logrotate.conf
.
Étape 3 : Configurer une configuration personnalisée
Bien que la configuration par défaut soit suffisante pour la plupart des journaux système, vous devrez peut-être configurer des règles de rotation personnalisées pour vos applications. Logrotate propose deux approches principales pour cela :
- Ajouter une configuration à
/etc/logrotate.d/
- Créer une configuration indépendante
Ajouter une configuration à /etc/logrotate.d/
Cette approche consiste à créer un nouveau fichier de configuration dans le répertoire /etc/logrotate.d/
. La configuration définie dans ce fichier sera exécutée quotidiennement en tant qu’utilisateur root, en même temps que toutes les autres tâches Logrotate par défaut.
Configurons une configuration pour une application web fictive appelée “your-app” qui génère les fichiers access.log
et error.log
dans le répertoire /var/log/your-app/
. L’application s’exécute en tant qu’utilisateur et groupe www-data
.
Tout d’abord, créez un nouveau fichier de configuration :
$ sudo nano /etc/logrotate.d/your-app
Ajoutez la configuration suivante au fichier :
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
Voici ce que fait chaque option :
daily
: Faire tourner les journaux quotidiennement (remplaçant la rotation hebdomadaire par défaut).missingok
: Ne pas générer d’erreur si le fichier journal est manquant.rotate 14
: Conserver 14 anciens fichiers journaux tournés.compress
: Compresser les fichiers journaux tournés en utilisant gzip.notifempty
: Ne pas faire tourner le fichier journal s’il est vide.create 0640 www-data www-data
: Créer un nouveau fichier journal vide avec les permissions 0640, appartenant à l’utilisateur et au groupe www-data.sharedscripts
: Exécuter les scripts définis dans la configuration (par ex.postrotate
) une seule fois par exécution, au lieu de le faire pour chaque fichier journal.postrotate
àendscript
: Ce bloc contient un script qui sera exécuté après la rotation des journaux. Dans ce cas, il recharge le serviceyour-app
pour s’assurer qu’il commence à écrire dans le nouveau fichier journal.
Enregistrez et fermez le fichier. Vous pouvez tester la configuration en exécutant un essai à sec :
$ sudo logrotate /etc/logrotate.conf --debug
Cette commande exécute Logrotate avec le fichier de configuration standard et active le mode débogage, imprimant des informations sur les fichiers journaux qui seraient traités et les actions qui seraient effectuées.
Créer une configuration indépendante
Dans certains cas, vous devrez peut-être exécuter Logrotate en tant qu’utilisateur non root ou faire tourner les journaux plus fréquemment que la planification quotidienne par défaut. Dans de telles situations, vous pouvez créer une configuration Logrotate indépendante et configurer une tâche cron pour l’exécuter à l’intervalle souhaité.
Supposons que vous ayez une application s’exécutant en tant qu’utilisateur bob
, générant des journaux dans le répertoire /home/bob/logs/
. Vous souhaitez faire tourner ces journaux toutes les heures.
Tout d’abord, créez un fichier de configuration dans votre répertoire personnel :
$ nano /home/bob/logrotate.conf
Ajoutez la configuration suivante :
/home/bob/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Cette configuration fera tourner les journaux toutes les heures, conservera 24 anciens fichiers journaux tournés, les compressera et créera un nouveau fichier journal vide après la rotation.
Enregistrez et fermez le fichier.
Ensuite, créez un fichier journal pour les tests :
$ cd ~
$ mkdir logs
$ touch logs/access.log
Maintenant, exécutez Logrotate avec la nouvelle configuration et spécifiez un emplacement pour le fichier d’état :
$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose
L’option --state
spécifie l’emplacement du fichier d’état, qui enregistre les informations sur les journaux traités lors de chaque exécution. Le drapeau --verbose
affiche une sortie détaillée sur les actions de Logrotate.
Vous devriez voir une sortie similaire à celle-ci :
lecture du fichier de configuration /home/bob/logrotate.conf
Gestion de 1 journal
rotation du motif : /home/bob/logs/*.log toutes les heures (24 rotations)
les fichiers journaux vides sont tournés, les anciens journaux sont supprimés
examen du journal /home/bob/logs/access.log
le journal n'a pas besoin d'être tourné
Logrotate a enregistré des informations sur les journaux rencontrés dans le fichier d’état. Vous pouvez afficher le contenu du fichier d’état avec :
$ cat /home/bob/logrotate-state
Si vous exécutez la même commande une heure plus tard, le fichier journal devrait être tourné comme prévu.
Pour forcer Logrotate à faire tourner le fichier journal immédiatement (à des fins de test), utilisez le drapeau --force
:
$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose --force
Enfin, configurez une tâche cron pour exécuter Logrotate toutes les heures. Ouvrez le crontab de votre utilisateur avec :
$ crontab -e
Ajoutez la ligne suivante au fichier crontab :
14 * * * * /usr/sbin/logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state
Cela exécutera la commande logrotate
à la 14e minute de chaque heure, en utilisant le chemin complet vers le binaire logrotate
et en spécifiant les emplacements du fichier de configuration et du fichier d’état.
Enregistrez et quittez le fichier crontab. La tâche cron sera maintenant exécutée selon la planification spécifiée.
Options de configuration avancées
Bien que les exemples abordés dans ce guide démontrent certaines options Logrotate courantes, il existe de nombreuses autres options avancées pour ajuster finement le comportement de la rotation des journaux. En voici quelques-unes notables :
dateext
: Cette option ajoute une extension de date aux noms de fichiers journaux tournés, facilitant l’identification de la période couverte par chaque fichier journal.dateformat
: Spécifie le format de date à utiliser avecdateext
.mail
: Envoie un rapport de rotation des fichiers journaux à l’adresse e-mail spécifiée.olddir
: Déplace les fichiers journaux tournés vers un autre répertoire au lieu de les conserver dans le même répertoire que le fichier journal actuel.prerotate
etpostrotate
: Ces options vous permettent d’exécuter des scripts avant et après la rotation des journaux, respectivement.size
: Fait tourner les fichiers journaux en fonction de leur taille, au lieu d’une planification fixe.
Vous pouvez explorer ces options et d’autres en consultant la page de manuel de Logrotate (man logrotate
) ou la documentation en ligne.
Conclusion
Une gestion efficace des fichiers journaux est cruciale pour maintenir un environnement serveur sain et garantir que les données précieuses des journaux sont préservées et accessibles en cas de besoin. Logrotate est un outil puissant qui simplifie cette tâche en automatisant la rotation, la compression et l’élagage des journaux en fonction de règles et de planifications personnalisables.
En suivant les exemples et les meilleures pratiques exposés dans ce guide, vous pourrez gérer efficacement les fichiers journaux de vos applications, en garantissant une utilisation optimale de l’espace disque et un accès facile aux données historiques des journaux en cas de besoin.