- 4. Les journaux
- 1. Introduction aux journaux et logs Linux
- 2. Comment consulter les logs Linux
- 3. Comment lire les logs en temps réel sur Linux
- 3.1. La commande tail
- 3.2.1. Afficher les N dernières lignes d’un fichier avec tail
- 3.2.2. Afficher les N dernières lignes d’un fichier avec tail
- 3.2.3. Afficher plusieurs fichiers avec tail
- 3.2.4. Surveiller les fichiers en temps réel avec la file d’attente de tail
- 3.2.5. Utiliser la commande tail avec d’autres commandes
- 3.2.6 Afficher la sortie de la commande de la tail avec des numéros de lignes
- 3.2. La commande multitail
- 3.3. Recherche dans les logs avec multitail
- 3.4. Coloriser les fichiers logs
- 3.1. La commande tail
4. Les journaux
1. Introduction aux journaux et logs Linux
Comme tout système d’exploitation, Linux enregistre des journaux et logs.
Ces derniers permettent d’obtenir des informations sur l’exécution des processus systèmes mais aussi aider lorsque vous avez des plantages (segfault, etc).
1.1. Liste des logs
Dans Linux les journaux système se trouvent dans /var/log/, on y trouve auth.log, kern.log, messages, syslog, daemon.log qui sont des journaux du système Linux.
- /var/log/boot.log : Journal de démarrage du système (le journal de démarrage stocke toutes les informations relatives aux opérations de démarrage)
- /var/log/auth.log : journaux d’authentification (le journal d’authentification stocke tous les journaux d’authentification, y compris les tentatives réussies et échouées)
- /var/log/debug : journaux de débogage (le journal de débogage stocke des messages détaillés liés au débogage et est utile pour dépanner des opérations système spécifiques)
- /var/log/daemon.log : journaux des démons (le journal des démons contient des informations sur les événements liés à l’exécution de l’opération Linux)
- /var/log/maillog : journaux du serveur de messagerie (le journal de messagerie stocke les informations relatives aux serveurs de messagerie et à l’archivage des e-mails)
- /var/log/kern.log : Journaux du noyau (le journal du noyau stocke les informations du noyau Ubuntu Linux)
- /var/log/btmp : enregistrements d’échecs de tentatives de connexion
- /var/log/utmp : état de connexion actuel, par utilisateur
- /var/log/wtmp : historique des connexions / déconnexions
- /var/log/lastlog : informations sur les dernières connexions pour tous les utilisateurs. Ce fichier binaire peut être lu par la commande lastlog.
1.2. La rotation des logs
La compression et rotation des logs systèmes se fait avec logrotate.
Sans cela, les fichiers logs peuvent atteindre plusieurs centaines de Mo voire quelques Go selon l’application.
2. Comment consulter les logs Linux
Pour consulter les logs, on peut utiliser les commandes habituels.
- cat : permet de lire le contenu d’un fichier texte
- head : lit les première partie d’un fichier
- tail : lit la dernière partie d’un fichier
Et si le fichier log est compressé :
- zcat : Affiche tout le contenu de logfile.gz
- zmore : Voir le fichier en pages, sans décompresser les fichiers
- zgrep : Rechercher dans un fichier compressé
Par exemple ci-dessous, on lit le contenu de /var/log/messages avec cat. Cela affiche tout le fichier.
Ce n’est pas gênant lorsque le fichier log est court mais cela peut devenir difficile à dire quand il fait plusieurs Mo.
cat /var/log/fichier.log |more
Si on veut travailler qu’avec la fin du log, tail est la meilleure solution puisqu’il permet de ressortir -n lignes depuis la fin du fichier.
Par exemple ci-dessous, on ne lit que les 20 dernières lignes de /var/log/messages.
tail -20 /var/log/messages
2.1. Rechercher dans les logs avec grep
grep est une commande très pratique pour trouver une occurrence dans un texte.
Elle est très puissant lorsque l’on sait s’en servir.
Ainsi pour une recherche dans les fichiers de logs Linux :
grep "nom.prenom@gmail.com" /var/log/mail.log
Si on veut recherche dans tous les fichiers de logs, on utilise le paramètre -r :
dmesg --facility=daemon dmesg --facility=user
2.2. Commande dmesg
La commande dmesg imprime le tampon d’anneau du noyau.
Depuis la fenêtre du terminal, lancez la commande dmesg et l’ensemble du tampon d’anneau du noyau s’imprime.
dmesg permet de limiter la sortie à des évènements selon le niveau. Par exemple pour sortir que les erreurs ou avertissements.
log_format nom_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Les variables utilisées dans le formatage pourront être les variables communes de Nginx11 et les variables n’existant qu’au moment de l’écriture d’un log (voir la doc de log_format
).
On utilisera ensuite access_log
12 pour utiliser ce format :
dmesg --level=err,warn
Ou encore pour filtrer la sortie sur des composants.
dmesg --level=err,warn
3. Comment lire les logs en temps réel sur Linux
3.1. La commande tail
Tail permet de lire les derniers lignes d’un fichier.
Mais on peut aussi l’utiliser pour afficher les dernières entrées en temps réel.
Ainsi pour suivre les modifications d’un fichier journal et logs de Linux en temps réel :
tail -f /var/log/apache2/access
Dès que de nouvelles entrées seront écrites dans le fichier de log, vous les verrez à l’écran.
Vous pouvez également demander à tail de ne suivre qu’un nombre spécifique de lignes. Supposons que vous souhaitiez uniquement afficher les cinq dernières lignes écrites dans syslog; pour cela vous pouvez lancer la commande:
tail -f -n 5 /var/log/syslog
tail est très basique mais si vous devez simplement suivre les derniers entrées en tant réel des logs, il fait le job.
tail
Imaginons le texte suivant dans le fichier rose-tatoo.txt :
The pictures tell the story This life had many shades I'd wake up every morning and before I'd start each day I'd take a drag from last nights cigarette That smoldered in its tray Down a little something and then be on my way I traveled far and wide And laid this head in many ports I was guided by a compass I saw beauty to the north I drew the tales of many lives And wore the faces of my own I had these memories all around me So I wouldn't be alone
Voici une utilisation basique de tail ou on spécifie le nom du fichier sans aucune option :
tail rose-tatoo.txt
La commande tail affiche alors les 10 dernières lignes du fichier.
Si le fichier comporte moins de dix lignes, tail affiche que les lignes disponibles. Enfin si les dernières lignes sont vides, elles seront toujours comptées comme des lignes valides.
La commande tail possède plusieurs optons afin d’étendre les fonctionnalités.
3.2.1. Afficher les N dernières lignes d’un fichier avec tail
Voici l’utilisation principale de tail, pouvoir afficher les N dernières d’un fichier.
La syntaxe est la suivante :
tail -n N <filename>
Par exemple pour afficher les 5 dernières lignes du fichier rose-tatoo.txt :
tail -n 5 rose-tatoo.txt # ou tail 5 rose-tatoo.txt
3.2.2. Afficher les N dernières lignes d’un fichier avec tail
Si vous souhaitez afficher toutes les lignes à partir du numéro de ligne N, vous pouvez utiliser l’option + ici.
tail -n +5 rose-tatoo.txt # ou tail +5 rose-tatoo.txt
3.2.3. Afficher plusieurs fichiers avec tail
En suivant la même logique il est possible d’afficher plusieurs fichiers avec tail :
tail -n N <fichier1> <fichier2> <fichier3>
Par exemple pour afficher les fichiers rose-tatoo.txt et test.txt :
tail rose-tatoo.txt test.txt
Les noms des fichiers sont séparés :
==> rose-tatoo.txt <== ==> test.txt <==
Si l’on désire retirer le nom du fichier, utiliser l’option -q (quiet).
3.2.4. Surveiller les fichiers en temps réel avec la file d’attente de tail
Il peut arriver que l’on souhaite suivre les modifications d’un fichier ou d’une commande en temps réel.
Par exemple un fichier journal qui se remplit. Cela est possible avec l’option -f de la commande tail.
tail -f <fichier>
La commande affiche d’abord les 10 dernières lignes des fichiers, puis il mettra à jour la sortie car les nouvelles lignes sont ajoutées au fichier.
Si vous utilisez l’option -F au lieu de -f, la commande de la queue attendra que le fichier d’entrée soit créé (s’il n’existe pas déjà), puis affiche le contenu du fichier en temps réel.
3.2.5. Utiliser la commande tail avec d’autres commandes
La commande queue peut être utilisée en conjugaison avec d’autres commandes à l’aide du pipe. Cela permet donc d’afficher que les X lignes de sortie d’une commande.
Par exemple, si vous avez trop de fichiers dans un répertoire et que vous souhaitez seulement voir les 3 derniers fichiers modifiés, vous pouvez l’utiliser de la mode suivante:
ls -ltr | tail -n5
3.2.6 Afficher la sortie de la commande de la tail avec des numéros de lignes
La commande nl permet d’afficher le contenu d’un fichier avec les numéros de ligne.
On peut donc combiner les commandes pour afficher en sortie les dernières lignes d’un fichier avec le numéro de la ligne :
nl rose-tatoo-sans-numero-ligne.txt |tail -2
3.2. La commande multitail
multitail est un utilitaire plus sophistiqué pour lire les journaux de Linux. Il utilise le rendu necurs pour diviser la fenêtre afin de lire plusieurs fichiers journaux en même temps en temps réel.
On peut aussi combiner les journaux en une seule fenêtre. La taille des fenêtres, du buffer (tampon) sont paramétrables.
Enfin on peut appliquer des couleurs sur des mots avec des regex.
multitail n’est pas inclut dans les distributions Linux. Il faut donc l’installer.
apt-get install maultitail
Par exemple, pour combiner deux fichiers journaux dans une même fenêtre :
multitail /var/log/apache/access.log -I /var/log/apache/error.log
Plus complexes, avec trois fenêtres de logs différentes :
multitail -Z red,black,inverse -T -x "%m %u@%h %f (%t) [%l]" -b 8 -m 200 -n 100 -cS apache -f -ev "(.ico|.js|.png|.css|.jpg|.css|.gif)" "/home/logs/apache2/access.log" -n 30 -f "/home/logs/apache2/error.log" -n 30 -f "/var/log/php7.3-fpm.log"
- -b : Définit la largeur de TAB
- -m : Définir la taille du tampon Définir les lignes sur 0 (zéro) si vous ne voulez pas de limites sur le tampon
- -cS : le modèle de couleurs à appliquer
- -ev : supprimer les lignes contenants telles occurrences. ici on retire les images.
3.3. Recherche dans les logs avec multitail
La commande multitail
permet de recherche dans le tampon.
On utilise le raccourci clavier /, vous pouvez faire une recherche de texte.
3.4. Coloriser les fichiers logs
Dans le fichier de config /etc/multitail.conf, ce dernier propose plusieurs jeux et modèles de couleurs selon le type de logs.
Par exemple, ci-dessous Postfix, Apache, rsstail.
J’ai modifié apache pour afficher les lignes 404 ou 403 en rouge :
- cs_re pour indiquer d’utiliser la commande avec un regex
- suivi de la couleur red, cyan, green, etc
- puis le regex
Ainsi :
- cs_re:red: .*( 404|403 ).* : encadre l’occurrence 404 ou 403 pour coloriser toute la ligne. Si on retire les .*, cela va coloriser que le texte 404 ou 403.
- cs_re:cyan: .*(bot|crawler).* : même chose avec bot ou crawler.


Notez que l’on peut utiliser le paramètre cs_re directement dans la commande multitail.
Cet article a été intégralement copié sur le site MALEKAL.COM.