Gestion des logs avec logrotate
Mise à jour :
Les logs sont le journal intime de nos systèmes Linux. Chaque événement, erreur ou simple action y est consigné, ce qui en fait une ressource précieuse pour le dépannage, la sécurité et la maintenance. Mais sans une bonne gestion, ces fichiers peuvent rapidement devenir ingérables : espace disque saturé, performances dégradées… C’est là qu’intervient l’archivage et la rotation des logs, des pratiques indispensables pour garder nos systèmes en bonne santé.
Un peu de d’histoire
À l’origine, la gestion des logs sous Linux se faisait de manière basique :
chaque service écrivait ses événements dans des fichiers situés dans
/var/log/
. Les administrateurs devaient eux-mêmes surveiller et supprimer
manuellement les fichiers trop volumineux pour éviter de saturer le système. Pas
très pratique, n’est-ce pas ?
Avec l’évolution des besoins, des outils automatisés comme logrotate sont apparus. Lancé dans les années 90, logrotate a révolutionné la gestion des fichiers journaux grâce à ses fonctionnalités de rotation automatique, compression et suppression des anciens fichiers. Plus récemment, des solutions comme journald, intégré à systemd, sont venues compléter l’approche en proposant une gestion centralisée et moderne des logs, adaptée aux systèmes actuels.
De nos jours, ces outils sont essentiels pour gérer l’explosion des données générées par les services toujours plus nombreux de nos serveurs.
Fonctionnalités principales de logrotate
Logrotate est l’outil pour la gestion des logs sous Linux, et pour cause : il est puissant, flexible et intégré à la plupart des distributions. Voici ses fonctionnalités principales :
- Rotation automatique : il archive les anciens fichiers journaux selon une fréquence définie (quotidienne, hebdomadaire, mensuelle).
- Compression : il compresse automatiquement les fichiers archivés pour économiser de l’espace disque (souvent en utilisant gzip ou bzip2).
- Suppression des anciens fichiers : il supprime les fichiers archivés après un certain délai pour éviter l’accumulation inutile.
- Création de nouveaux fichiers : après rotation, il crée un nouveau fichier journal propre pour que les services puissent continuer à écrire.
- Gestion des permissions : il ajuste les permissions des fichiers archivés pour garantir leur sécurité.
- Scripts personnalisés : il permet de lancer des scripts avant ou après la rotation pour des besoins spécifiques (par exemple, redémarrer un service).
D’autres outils existent pour gérer les logs, mais logrotate reste l’un des plus polyvalents et fiables. Les alternatives comme journald, inclus dans systemd, proposent une approche différente, basée sur la centralisation des journaux en mémoire ou sur disque, mais elles ne remplacent pas totalement les fonctionnalités classiques de logrotate.
Installation de logrotate
Bonne nouvelle : logrotate est généralement préinstallé sur la plupart des distributions Linux modernes. Si ce n’est pas le cas, l’installation est un jeu d’enfant et dépend de votre gestionnaire de paquets.
Pour les systèmes basés sur Debian, comme Ubuntu, utilisez la commande suivante :
Pour les systèmes basés sur CentOS ou RHEL, la commande est légèrement différente :
Une fois l’installation terminée, vérifiez que logrotate est bien disponible en exécutant :
Vous devriez voir s’afficher la version installée, confirmant que l’outil est opérationnel.
Configuration de logrotate
Une fois logrotate installé, tout se joue dans sa configuration. Il
utilise un fichier principal de configuration, généralement situé dans
/etc/logrotate.conf
, ainsi que des fichiers spécifiques pour chaque service,
stockés dans le répertoire /etc/logrotate.d/
.
- Fichier principal :
/etc/logrotate.conf
Ce fichier définit les règles globales, comme la fréquence de rotation ou le nombre de fichiers archivés à conserver. - Répertoire des configurations spécifiques :
/etc/logrotate.d/
Chaque service (par exemple, Apache, MySQL, etc.) peut avoir son propre fichier de configuration dans ce dossier. Cela permet de personnaliser les règles pour chaque application.
Voici une configuration réelle de logrotate pour gérer les fichiers journaux
d’Apache. Ce fichier se trouve typiquement dans /etc/logrotate.d/apache2
:
Analysons les directives principales pour mieux comprendre ce fichier :
-
Chemin des logs :
/var/log/apache2/*.log
cible tous les fichiers journaux d’Apache (par exemple,access.log
,error.log
). -
Fréquence :
daily
indique que la rotation sera effectuée quotidiennement. -
Conservation des archives :
rotate 14
permet de conserver les 14 derniers fichiers archivés avant leur suppression. Les fichiers plus anciens seront supprimés. -
Compression :
compress
: les fichiers archivés seront compressés, généralement avec gzip, pour économiser de l’espace disque.delaycompress
: la compression sera différée d’un jour après la rotation pour éviter les conflits avec des processus en cours d’écriture.
-
Gestion des fichiers vides :
notifempty
empêche la rotation des fichiers journaux vides. -
Création d’un nouveau fichier :
create 640 root adm
crée un nouveau fichier vide après la rotation, avec des permissions 640, appartenant à l’utilisateur root et au groupe adm. -
Scripts partagés :
sharedscripts
garantit que les scripts (commeprerotate
oupostrotate
) ne s’exécutent qu’une seule fois, même si plusieurs fichiers journaux sont traités simultanément. -
Préroration : Le bloc
prerotate
contient un script exécuté avant la rotation. Ici, il vérifie si le répertoire/etc/logrotate.d/httpd-prerotate
existe et, si oui, exécute tous les scripts qu’il contient avecrun-parts
. Cela permet de lancer des tâches spécifiques avant la rotation (par exemple, des nettoyages ou vérifications). -
Postrotation : Le bloc
postrotate
exécute des actions après la rotation. Ici, il vérifie si un processus Apache est en cours d’exécution avecpgrep
. Si Apache fonctionne, il recharge la configuration (invoke-rc.d apache2 reload
) pour que le service puisse continuer à écrire dans le nouveau fichier journal. Toute sortie de la commande est envoyée au journal système vialogger -t apache2.logrotate
.
Si vous avez modifié le fichier de configuration, vous pouvez tester sa validité. Avant de l’appliquer, vous pouvez la tester pour éviter les erreurs :
Cela simule la rotation sans effectuer de modifications.
Planification avec cron
Logrotate s’appuie sur cron pour exécuter ses tâches de rotation de manière automatisée et régulière.
Un fichier cron spécifique est généralement installé lors de l’installation
de logrotate. Ce fichier se trouve dans /etc/cron.daily/logrotate
sur la
plupart des distributions.
Ce fichier script déclenche automatiquement logrotate chaque jour en utilisant la commande suivante :
Si vous souhaitez modifier la fréquence d’exécution de logrotate, vous pouvez déplacer le script dans un autre répertoire cron ou définir une tâche manuellement dans la crontab.
Pour personnaliser la fréquence, éditez la crontab en tant que superutilisateur :
Ajoutez ensuite une ligne comme celle-ci :
Cela exécutera logrotate toutes les 6 heures.
Exécuter logrotate manuellement
Pour tester ou déclencher une rotation manuelle, utilisez la commande suivante :
Si vous voulez forcer la rotation (même si les critères de taille ou de date ne
sont pas remplis), ajoutez l’option -f
:
Si logrotate rencontre un problème lors de son exécution via cron, il enregistrera des erreurs dans les logs système, généralement accessibles via :
Bonnes pratiques pour la gestion des logs
Une gestion efficace des logs ne repose pas uniquement sur l’utilisation d’un outil comme logrotate. Voici un ensemble de bonnes pratiques à suivre pour garantir que vos journaux soient utiles, sécurisés et gérables.
Chaque service a des besoins spécifiques en termes de rotation et d’archivage des logs :
- Pour les services très actifs comme Apache ou Nginx, utilisez une
rotation quotidienne avec compression (
daily
+compress
). - Pour des services moins actifs (par exemple, des scripts maison ou des
services de niche), une rotation hebdomadaire ou mensuelle (
weekly
oumonthly
) peut suffire. - Ajustez le nombre d’archives à conserver (
rotate N
) en fonction de vos besoins. Par exemple, conserver 14 jours d’archives pour les logs d’accès web est courant.
Les fichiers journaux peuvent contenir des données critiques (comme des adresses IP, des identifiants ou des erreurs système). Voici comment les sécuriser :
-
Permissions restrictives : Définissez des permissions strictes pour les fichiers contenant des informations sensibles. Par exemple :
-
Chiffrement : Si vos logs contiennent des informations particulièrement sensibles, pensez à les chiffrer avant de les archiver.
Certains services peuvent générer une quantité massive de données. Pour éviter de saturer le disque :
-
Activez la rotation basée sur la taille avec l’option
size
:Cela limitera la taille de chaque fichier à 100 Mo et conservera les 5 derniers fichiers archivés.
Pour des environnements complexes, il est souvent utile d’archiver ou de centraliser les logs :
- Archivage : Déplacez les fichiers plus anciens vers un stockage externe ou un système de sauvegarde.
- Centralisation : Utilisez des outils comme ELK (Elasticsearch, Logstash, Kibana) pour centraliser et analyser vos journaux.
Ne gardez pas indéfiniment tous les fichiers journaux :
-
Supprimez automatiquement les logs trop anciens avec
maxage
:Cela supprime les fichiers archivés vieux de plus de 30 jours.
Conclusion
À mon avis, un système mal géré au niveau des logs, c’est comme une maison sans rangement : le chaos finit par s’installer. Heureusement, avec une configuration bien pensée et une surveillance proactive, la gestion des logs devient une routine fiable et sans effort.
Prenez le temps d’appliquer ces principes, et vos fichiers journaux cesseront d’être une source de stress pour devenir vos meilleurs alliés dans la gestion de votre système. 😊