Dans un système Linux et à peu près tous les systèmes, les fichiers journaux sont cruciaux lorsqu'il s'agit d'examiner et de dépanner les erreurs. Ils fournissent des indices importants sur ce qui aurait pu mal tourner avec divers services système avant l'échec.
Tout service installé sur vos systèmes Linux, tel qu'un serveur Web Apache ou un serveur de base de données MySQL, génère des fichiers journaux qui sont généralement stockés dans le répertoire /var/log annuaire. Si vous vérifiez le contenu de ce répertoire, vous verrez un contenu similaire à ce que nous avons ci-dessous :
Au fil du temps, à mesure que des informations supplémentaires sont enregistrées, la taille des fichiers journaux augmente et occupe plus d'espace sur votre disque dur. Avant même que vous ne vous en rendiez compte, la taille des fichiers journaux aura gonflé, engloutissant une grande partie de l'espace de votre disque dur, et si vous ne faites pas attention, vous pouvez facilement manquer d'espace disque.
Dans cet esprit, il devient prudent de conserver les fichiers journaux à une taille gérable et de supprimer les anciennes entrées de journal qui occupent un espace disque précieux. Et c'est là qu'intervient la rotation des logs.
Qu'est-ce que la rotation des journaux ?
Rotation des journaux est un processus qui crée de nouveaux fichiers journaux et archive et supprime les anciens pour économiser de l'espace disque. Le processus renomme un fichier journal actuel. Par exemple, apport.log devient apport.log.1 et un nouveau apport.log log est créé pour consigner les nouvelles entrées de journal. Les fichiers journaux plus anciens sont généralement compressés et apparaissent sous la forme apport.log.2.gz , apport.log.3.gz , apport.log.4.gz , et ainsi de suite.
Le processus de rotation des journaux est facilité à l'aide d'un utilitaire appelé logrotate . Il s'agit d'un outil qui facilite la rotation des fichiers journaux et l'archivage et la suppression des anciens pour libérer de l'espace disque. En résumé, logrotate accomplit ce qui suit :
- Création de nouveaux fichiers journaux après rotation des anciens.
- Archivage des anciens fichiers journaux.
- Purge des anciens fichiers journaux qui ont subi une rotation pour économiser de l'espace
La rotation des journaux est généralement activée lorsque la taille des fichiers journaux augmente et dépasse une certaine limite.
Fonctionnement de l'utilitaire logrotate
Avant d'examiner le fonctionnement de l'utilitaire logrotate, assurez-vous que logrotate est installé sur votre système. Pour ce faire, lancez la commande :
Pour le système Debian/Ubuntu :
$ sudo apt-get install logrotate -y
Pour le système CentOS/RHEL/Fedora :
$ sudo yum install logrotate -yor $ sudo dnf install logrotate -y
Exécutez la commande ci-dessous pour vérifier la version de logrotate,
linuxtech[email protected] :~$ logrotate --versionlogrotate 3.14.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 d'accès au fichier d'état par défaut : /var/lib/logrotate/status Prise en charge ACL : oui Prise en charge de SELinux : oui[email protected] :~$
À partir de la sortie, nous pouvons clairement voir que nous avons la version 3.14.0 de logrotate. Par défaut, logrotate est préinstallé dans les distributions Linux modernes et il n'est donc pas nécessaire de l'installer.
Fichiers de configuration de Logrotate
Logrotate s'exécute quotidiennement en tant que tâche cron, parcourant divers fichiers journaux, les faisant pivoter et purgeant les anciens fichiers journaux comme défini dans le fichier de configuration. Il existe deux principales sources de configuration auxquelles vous devez prêter une attention particulière :
/etc/logrotate.conf – Il s'agit du fichier de configuration principal de l'outil logrotate. Il contient les paramètres par défaut et facilite la rotation des journaux pour les journaux de packages non système. Plus particulièrement, il utilise un 'include ' directive pour extraire les configurations situées dans le fichier '/etc/logrotate.d 'répertoire. Examinons le fichier de configuration.
$ cat /etc/logrotate.conf
À partir de la configuration indiquée, le fichier /etc/logrotate.conf effectue une rotation des fichiers journaux hebdomadaire comme indiqué à la ligne 3 .
- Ligne 7 indique que l'utilisateur root et le groupe adm sont propriétaires des fichiers journaux.
- Ligne 10 indique que seulement 4 semaines de fichiers journaux sont sauvegardées, après quoi les plus anciens seront purgés ou supprimés pour créer plus d'espace disque.
- Ligne 13 ordonne la création d'un nouveau fichier journal après la rotation du fichier journal actuel.
- L'instruction include à la ligne 22 extrait les configurations des fichiers d'application répertoriés dans le répertoire /etc/logrotate.d.
/etc/logrotate.d – Il s'agit d'un répertoire contenant la configuration logrotate des packages installés dont les fichiers journaux nécessitent une rotation des journaux. En règle générale, vous êtes également susceptible de trouver des fichiers de configuration d'outils système tels que apt &dpkg (pour les systèmes Debian), rsyslog, ufw et cups-daemon. Voici ce que vous trouverez :
[email protected] :~$ ls -l /etc/logrotate.d/total 60-rw-r--r-- 1 root root 120 Sep 5 2019 alternatives-rw-r--r-- 1 root root 126 4 déc. 20:25 apport-rw-r--r-- 1 root root 173 9 avril 11:21 apt-rw-r--r-- 1 root root 91 1er avril 10:49 bootlog-rw-r --r-- 1 racine racine 130 21 janvier 2019 btmp-rw-r--r-- 1 racine racine 181 17 février 08:19 cups-daemon-rw-r--r-- 1 racine racine 112 5 septembre 2019 dpkg-rw-r--r-- 1 racine racine 329 4 février 2019 nginx-rw-r--r-- 1 racine racine 94 8 février 2019 ppp-rw-r--r-- 1 racine racine 501 7 mars 2019 rsyslog-rw-r--r-- 1 racine racine 677 29 novembre 02:08 speech-dispatcher-rw-r--r-- 1 racine racine 119 30 mars 21:49 ubuntu-advantage-tools-rw-r --r-- 1 root root 178 21 janvier 22:16 ufw-rw-r--r-- 1 root root 235 13 avril 23:37 unattended-upgrades-rw-r--r-- 1 root root 145 fév 19 2018 wtmp[email protected] :~$
Examinons le fichier de configuration de l'outil de gestion de packages dpkg.
$ cat -n /etc/logrotate.d/dpkg
- mensuel :Ceci indique la rotation des fichiers journaux une fois par mois
- faire pivoter 12 :12 anciens fichiers journaux sont sauvegardés.
- compresser :Cela implique que les fichiers pivotés doivent être compressés à l'aide de la compression gzip par défaut avec les fichiers journaux ayant une extension de fichier .gz.
- Créer la racine racine 644 :Crée un nouveau fichier journal dès que la rotation des journaux est terminée avec des autorisations de fichier octales de 644 avec la propriété de l'utilisateur et du groupe root.
- manquantok :La directive supprime les messages d'erreur en cas de fichier journal manquant.
- notifempty :Cela ignore la rotation des fichiers si le fichier journal est vide.
Créer un exemple de fichier de configuration de logrotate
Supposons que nous ayons une application en cours d'exécution en tant qu'utilisateur linuxtechi et qu'elle génère des fichiers journaux qui sont stockés dans /home/linuxtechi/logs annuaire. Nous devons configurer les fichiers journaux pour qu'ils tournent sur une base hebdomadaire.
Mais d'abord, nous allons créer un fichier de configuration logrotate dans le répertoire personnel comme indiqué :
$ vim /home/linuxtechi/logrotate.conf
Ensuite, nous allons coller la configuration affichée :
/home/linuxtechi/logs/*.log { hebdomadaire missingok rotate 14 compress create}
Mettons cela en contexte :
Les fichiers journaux feront l'objet d'une rotation hebdomadaire, avec suppression de tout message d'erreur si l'un des fichiers journaux est manquant. 14 fichiers journaux seront sauvegardés dans le courant du mois avec la création d'un nouveau fichier journal après rotation du fichier journal actuel.
Nous allons maintenant créer un répertoire logs qui contiendra les fichiers journaux de l'application, puis créer un fichier journal appelé app.log.
[email protected] :~$ mkdir logs &&cd logs[email protected] :~/logs$ touch app.log[email protected] :~/logs$ lsapp.log[email protected] :~/logs$Maintenant, nous allons exécuter la commande logrotate pour créer un fichier d'état logrotate dans le répertoire personnel afin de vérifier si les entrées de journal ont été créées ou non.
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verboseVous obtiendrez une sortie semblable à celle-ci :
À partir de la sortie, le fichier journal n'a pas été tourné pour la simple raison que la rotation se produit chaque semaine et que le fichier journal a à peine une heure.
Examinez le fichier logrotate pour vérifier si des informations ont été enregistrées sur l'exécution de la rotation des journaux.
[email protected] :~$ cat logrotate-statelogrotate state -- version 2"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0[email protected] :~$À partir de la sortie, nous pouvons voir que l'utilitaire logrotate a reconnu la dernière fois qu'il a considéré le fichier journal pour la rotation, et l'horodatage est imprimé.
Maintenant, nous allons forcer logrotate à faire pivoter le fichier journal - ce qu'il ne ferait pas autrement pour l'instant puisque l'intervalle de temps spécifié n'a pas encore été dépassé - en utilisant la commande –force drapeau comme indiqué.
$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force
Si vous revenez au répertoire des journaux, vous observerez un fichier journal supplémentaire qui a été pivoté et compressé comme indiqué.
[email protected] :~$ cd logs/[email protected] :~/logs$ lsapp.log app.log.1.gz[email protected] :~/logs$Compresser et faire pivoter les fichiers journaux en fonction de la taille
Parfois, les fichiers journaux peuvent grossir et engloutir de l'espace avant même l'intervalle de temps spécifié pour la rotation, qu'elle soit quotidienne, hebdomadaire ou mensuelle.
Une façon de résoudre le problème consiste à spécifier la taille maximale du fichier qui, lorsqu'elle est dépassée, la rotation du fichier journal sera déclenchée. Pour ce faire, spécifiez la maxsize option dans le fichier logrotate.
Par exemple, pour déclencher la rotation lorsque la taille du fichier dépasse 40 Mégaoctets, incluez l'option :
taille max 40M
Supposons que nous créons un fichier de rotation de journal personnalisé pour notre application sous le dossier /etc/logrotate.d,
[email protected] :~$ cd /etc/logrotate.d/[email protected] :/etc/logrotate.d$ sudo vi custom-app/home/linuxtechi/logs/app-access.log{ daily missingok taille 40M faire pivoter 4 compresser créer}Enregistrez et fermez le fichier,
Le suffixe M désigne Mégaoctets , Pour kilooctets utiliser k tandis que G indique la taille en Gigaoctets .
La déclaration implique que les fichiers journaux de plus de 40 mégaoctets feront l'objet d'une rotation sans tenir compte de l'intervalle de temps de rotation. Cela implique que pour un fichier journal qui doit être tourné après 1 heure, il sera tourné avant l'intervalle spécifié s'il dépasse le seuil de 40 Mo.
Déposons quelques données dans le fichier journal de notre application personnalisée, puis voyons comment logrotate fera pivoter les fichiers journaux,
[email protected] :~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=2525+0 records in25+0 records out26214400 octets (26 Mo, 25 Mio) copié, 0,0422015 s, 621 Mo/s[email protected] :~$ du -sh /home/linuxtechi/logs/app-access.log25M /home/linuxtechi/logs/app-access.log[email protected] :~$Utilisez '-d ' dans la commande logrotate pour effectuer une simulation de logrotate sur le fichier journal, exécutez la commande suivante,
$ logrotate -d /etc/logrotate.d/custom-app
Comme nous pouvons le voir dans la sortie, logrotate ne fera pas pivoter le fichier journal car la taille ne dépasse pas 40 Mo.
Faisons maintenant en sorte que la taille du fichier journal dépasse 40 Mo,
[email protected] :~$ cd logs/[email protected] :~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=4545+0 records in45+0 records out47185920 octets (47 Mo, 45 Mio) copiés, 0,136979 s, 344 Mo/s[email protected] :~/logs$ du -sh app-access.log46M app-access.log[email protected] :~/logs$Maintenant, essayez à nouveau d'exécuter la commande logrotate avec l'option '-d',
La sortie ci-dessus confirme que logroate fera pivoter le fichier journal car la taille est supérieure à 40 Mo.
En plus d'améliorer la rotation des fichiers journaux en fonction de leur taille, il est prudent de s'assurer que le fichier de configuration logrotate est appelé à une fréquence régulière à l'aide d'une tâche cron. Ceci est particulièrement important pour les fichiers journaux dont la taille gonfle si rapidement et risque de remplir votre espace disque.
Il y a deux façons de procéder :
Vous pouvez copier le script logrotate du répertoire /etc/cron.daily vers l'emplacement /etc/cron.hourly. Cela changera la rotation des journaux sur une base horaire par opposition à une rotation quotidienne.
Une autre façon consiste à spécifier une tâche cron dans le fichier /etc/crontab comme indiqué
*/10 * * * * /etc/cron.daily/logrotateCela déclenchera la rotation toutes les 10 minutes.
L'utilisation de la crontab pour appeler le script logrotate en plus de spécifier la taille maximale à l'aide de la directive maxsize constitue une combinaison parfaite pour garantir que vos fichiers journaux sont tournés à temps pour éviter de remplir votre disque dur.
Pour des options supplémentaires avec l'outil logrotate, visitez les pages de manuel comme indiqué :
Conclusion
Dans ce guide, nous avons mis en lumière l'importance des fichiers journaux, la menace qu'ils peuvent causer s'ils augmentent de taille et comment l'outil logrotate peut aider à gérer la taille des fichiers journaux sur votre système. Nous avons également examiné certaines des options disponibles pour une utilisation dans la configuration logrotate.