Comment surveiller les changements en temps réel dans un fichier journal Linux avec 'tail'

LinuxBeginner
Pratiquer maintenant

Introduction

Les journaux Linux (logs) sont la pierre angulaire de la surveillance et du dépannage des systèmes, fournissant des informations précieuses sur le fonctionnement interne de votre système. Dans ce tutoriel, nous allons explorer les concepts fondamentaux des journaux Linux et comment les surveiller efficacement en utilisant la commande polyvalente 'tail'.

Vous apprendrez où les fichiers journaux sont stockés, comment afficher leur contenu, suivre les changements en temps réel et extraire des informations spécifiques. Ces compétences sont essentielles pour toute personne travaillant avec des systèmes Linux, vous permettant de diagnostiquer les problèmes, de surveiller l'état du système et de comprendre ce que votre système fait en coulisses.

Comprendre les fichiers journaux Linux et leurs emplacements

Les systèmes Linux conservent des enregistrements détaillés de diverses activités, erreurs et événements dans des fichiers texte spécialisés appelés fichiers journaux (log files). Ces journaux servent de principale source d'informations lors du dépannage de problèmes ou de la surveillance de l'état du système.

Où sont stockés les journaux Linux ?

La plupart des distributions Linux, y compris Ubuntu 22.04, stockent les fichiers journaux dans le répertoire /var/log. Explorons ce répertoire pour voir quels fichiers journaux sont disponibles sur votre système.

Ouvrez votre terminal et entrez la commande suivante :

ls -l /var/log

Vous devriez voir une sortie similaire à celle-ci :

total 1048
drwxr-x---  2 root   adm      4096 May  2 09:52 apache2
drwxr-xr-x  2 root   root     4096 Apr 30 15:27 apt
-rw-r-----  1 syslog adm    183867 May  2 10:18 auth.log
-rw-r--r--  1 root   root     1112 Nov 17  2022 alternatives.log
drwxr-xr-x  2 root   root     4096 Apr 20  2022 cups
-rw-r-----  1 syslog adm    308342 May  2 10:18 kern.log
-rw-rw-r--  1 root   utmp        0 Apr 20  2022 lastlog
drwxr-xr-x  2 root   root     4096 Nov  8  2022 nginx
-rw-r-----  1 syslog adm    473079 May  2 10:18 syslog

Les fichiers et répertoires exacts varieront en fonction des logiciels installés sur votre système.

Fichiers journaux courants et leur contenu

Voici quelques-uns des fichiers journaux les plus importants que vous rencontrerez :

  • /var/log/syslog : Contient les messages généraux du système
  • /var/log/auth.log : Enregistre les tentatives d'authentification et la gestion des utilisateurs
  • /var/log/kern.log : Contient les messages et erreurs du noyau (kernel)
  • /var/log/apt : Répertoire contenant les journaux de gestion des paquets

Examinons le contenu de l'un de ces fichiers. Puisque nous apprenons la surveillance des journaux, nous allons commencer par une vue de base du journal système :

sudo head -n 20 /var/log/syslog

La commande head affiche les premières lignes d'un fichier (20 dans ce cas). Nous utilisons sudo car certains fichiers journaux ne peuvent être lus que par des utilisateurs disposant de privilèges administratifs.

Vous devriez voir une sortie similaire à :

May  2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May  2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May  2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May  2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May  2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May  2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May  2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...

Remarquez le format de chaque entrée de journal :

  • Date et heure
  • Nom d'hôte (ubuntu dans cet exemple)
  • Programme ou service générant le journal
  • Le message du journal réel

Comprendre la structure des entrées de journal

La plupart des entrées de journal suivent un format standard, ce qui les rend plus faciles à lire et à traiter. Le format typique comprend :

  1. Timestamp (Horodatage) : Quand l'événement s'est produit
  2. Hostname (Nom d'hôte) : Le nom de la machine
  3. Service/Application (Service/Application) : Ce qui a généré le journal
  4. Message (Message) : Les informations réelles sur ce qui s'est passé

Maintenant que vous comprenez où se trouvent les journaux et comment ils sont structurés, passons à l'affichage des dernières entrées d'un fichier journal à l'aide de la commande tail.

Utilisation de la commande de base 'tail' pour afficher les fichiers journaux

Alors que la commande head affiche le début d'un fichier, la commande tail affiche la fin d'un fichier. Ceci est particulièrement utile pour les fichiers journaux, car les entrées les plus récentes se trouvent généralement à la fin.

Utilisation de base de la commande 'tail'

La syntaxe de base de la commande tail est :

tail [options] [file]

Par défaut, tail affiche les 10 dernières lignes d'un fichier. Essayons-le avec le journal système :

sudo tail /var/log/syslog

Vous devriez voir les 10 entrées de journal les plus récentes :

May  2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May  2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May  2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May  2 10:17:01 ubuntu CRON[8752]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Affichage d'un nombre personnalisé de lignes

Parfois, 10 lignes ne suffisent pas pour obtenir le contexte dont vous avez besoin. Vous pouvez spécifier le nombre de lignes à afficher à l'aide de l'option -n :

sudo tail -n 5 /var/log/syslog

Cela affichera uniquement les 5 dernières lignes du fichier :

May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

Affichage des journaux d'authentification

Le fichier /var/log/auth.log contient des informations sur l'authentification des utilisateurs et les événements liés à la sécurité. Examinons les entrées les plus récentes :

sudo tail -n 15 /var/log/auth.log

Vous pourriez voir une sortie similaire à :

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May  2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May  2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May  2 10:20:01 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May  2 10:21:15 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Ce journal affiche les tentatives de connexion des utilisateurs, les ouvertures et fermetures de sessions, et l'utilisation de la commande sudo. C'est un journal essentiel pour la surveillance de la sécurité et le dépannage des problèmes d'accès des utilisateurs.

Examen des journaux du noyau

Le noyau (kernel) est le cœur du système d'exploitation Linux. Le fichier /var/log/kern.log contient des messages générés par le noyau, qui sont utiles pour diagnostiquer les problèmes de matériel et de pilotes :

sudo tail -n 10 /var/log/kern.log

La sortie pourrait ressembler à :

May  2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May  2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May  2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May  2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May  2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May  2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May  2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May  2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access     SanDisk  Ultra            1.00 PQ: 0 ANSI: 6
May  2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0

Maintenant que vous comprenez comment afficher les dernières entrées des fichiers journaux, passons à la surveillance des journaux en temps réel, qui est l'une des fonctionnalités les plus puissantes de la commande tail.

Surveillance des journaux en temps réel avec 'tail -f'

L'une des fonctionnalités les plus puissantes de la commande tail est sa capacité à surveiller les fichiers en temps réel à l'aide de l'option -f (abréviation de "follow", suivre). Ceci est particulièrement utile pour observer les fichiers journaux au fur et à mesure que de nouvelles entrées sont ajoutées, ce qui aide au dépannage et à la surveillance.

Comprendre 'tail -f'

L'option -f indique à tail de garder le fichier ouvert et d'afficher en continu les nouvelles lignes au fur et à mesure qu'elles sont ajoutées au fichier. Cela crée une vue en temps réel du fichier journal, vous permettant de voir les événements au fur et à mesure qu'ils se produisent.

Surveillance des journaux système en temps réel

Utilisons l'option -f pour surveiller le journal système en temps réel :

sudo tail -f /var/log/syslog

Après avoir exécuté cette commande, vous verrez les entrées les plus récentes dans le fichier journal, et le terminal restera ouvert, affichant les nouvelles entrées au fur et à mesure qu'elles apparaissent.

Pour générer des entrées de journal, ouvrons une nouvelle fenêtre de terminal (appuyez sur Ctrl+Alt+T pour ouvrir un nouveau terminal) et exécutons quelques commandes de base :

logger "This is a test message from user $(whoami)"

La commande logger envoie un message au journal système. Maintenant, revenez à votre première fenêtre de terminal où vous exécutez tail -f, et vous devriez voir votre message de test apparaître dans le journal :

May  2 10:34:45 ubuntu labex: This is a test message from user labex

Essayez d'exécuter la commande logger plusieurs fois avec des messages différents pour les voir apparaître en temps réel :

logger "System test number 2"
logger "Monitoring logs is fun!"

Chacun de ces messages devrait apparaître dans votre fenêtre de sortie tail -f au fur et à mesure qu'ils sont enregistrés.

Lorsque vous avez fini de regarder le journal, appuyez sur Ctrl+C pour arrêter la commande tail -f et revenir à l'invite de commande.

Surveillance de l'activité d'authentification

Surveillons le journal d'authentification pour observer les événements liés à la connexion et à l'authentification :

sudo tail -f /var/log/auth.log

Cela vous montrera les activités d'authentification en temps réel, telles que les connexions des utilisateurs, l'utilisation de la commande sudo et les échecs d'authentification.

Pour générer des entrées de journal d'authentification, ouvrez un nouveau terminal et exécutez une commande sudo :

sudo ls /root

Vous devriez voir de nouvelles entrées apparaître dans votre fenêtre tail -f montrant l'activité sudo :

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

Encore une fois, appuyez sur Ctrl+C pour arrêter la commande tail -f lorsque vous avez fini d'observer.

Cas d'utilisation pratiques pour la surveillance des journaux en temps réel

La surveillance des journaux en temps réel est incroyablement utile dans plusieurs scénarios :

  1. Dépannage des problèmes : Lorsque quelque chose ne fonctionne pas, regarder les journaux en temps réel peut aider à identifier le problème.
  2. Surveillance de la sécurité : L'observation des journaux d'authentification peut aider à détecter les tentatives d'accès non autorisées.
  3. Débogage d'applications : Les développeurs peuvent regarder les journaux d'applications pour comprendre ce qui se passe pendant les tests.
  4. Administration système : Les administrateurs peuvent surveiller les journaux système pendant la maintenance ou les modifications de configuration.

Par exemple, si vous rencontrez un problème de réseau, vous pourriez surveiller le journal système tout en essayant de vous connecter pour voir les messages d'erreur qui apparaissent.

En maîtrisant la surveillance des journaux en temps réel avec tail -f, vous obtenez un outil puissant pour comprendre le comportement de votre système au fur et à mesure qu'il se produit.

Filtrage des informations de journal pour une meilleure analyse

Les fichiers journaux peuvent être très volumineux et contenir beaucoup d'informations. Pour rendre l'analyse des journaux plus gérable, vous pouvez combiner la commande tail avec d'autres outils comme grep pour filtrer et trouver des informations spécifiques.

Utilisation de 'grep' avec 'tail'

La commande grep recherche des motifs dans le texte. Lorsqu'elle est combinée avec tail, elle vous permet de filtrer les entrées de journal pour des mots-clés ou des motifs spécifiques. La syntaxe de base est :

tail [options] [file] | grep "pattern"

Examinons quelques exemples pratiques :

Recherche de messages d'erreur

Pour trouver les messages d'erreur dans le journal système, vous pouvez filtrer sur le mot "error" :

sudo tail -n 100 /var/log/syslog | grep -i "error"

L'option -i avec grep rend la recherche insensible à la casse, de sorte qu'elle correspondra à "error", "Error", "ERROR", etc. Vous pourriez voir une sortie comme :

May  2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May  2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456

Si vous ne voyez aucun résultat, cela signifie qu'il n'y a pas de messages d'erreur dans les 100 dernières lignes du journal.

Surveillance de services spécifiques

Vous pouvez également filtrer les journaux pour surveiller un service ou un programme spécifique. Par exemple, pour surveiller l'activité liée à SSH :

sudo tail -n 100 /var/log/auth.log | grep "sshd"

Cela affichera uniquement les entrées liées à SSH dans le journal d'authentification :

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex

Surveillance filtrée en temps réel

Vous pouvez également combiner la surveillance en temps réel avec le filtrage pour surveiller des événements spécifiques au fur et à mesure qu'ils se produisent :

sudo tail -f /var/log/syslog | grep --line-buffered "test"

L'option --line-buffered garantit que grep affiche chaque ligne correspondante immédiatement, plutôt que de les mettre en mémoire tampon, ce qui est important lors de l'utilisation de tail -f.

Maintenant, dans un autre terminal, générez un message de journal de test :

logger "This is a test message for grep filtering"

Dans votre premier terminal, vous ne devriez voir apparaître que ce message (et aucun autre message de journal) en raison du filtre grep pour "test".

Filtrage avancé avec plusieurs motifs

Vous pouvez également rechercher plusieurs motifs en utilisant l'opérateur OR (|) dans grep :

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

L'option -E active les expressions régulières étendues, vous permettant d'utiliser l'opérateur OR. Cette commande affichera les lignes contenant l'un des mots "error", "warning" ou "critical".

Extraction d'informations spécifiques avec 'awk'

Pour un filtrage et un formatage plus avancés, vous pouvez utiliser la commande awk. Par exemple, pour extraire uniquement l'heure et le message de syslog :

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

Cela extrait des champs spécifiques de chaque entrée de journal, ce qui facilite la concentration sur les informations les plus pertinentes.

En maîtrisant ces techniques de filtrage, vous pouvez analyser efficacement les fichiers journaux volumineux et extraire exactement les informations dont vous avez besoin pour le dépannage et la surveillance.

Résumé

Félicitations pour avoir terminé ce lab sur la surveillance des changements en temps réel dans les fichiers journaux Linux avec la commande 'tail'. Vous avez acquis plusieurs compétences importantes :

  1. Compréhension des fichiers journaux Linux : Vous savez maintenant où les journaux sont stockés, ce qu'ils contiennent et comment les entrées de journal sont structurées.

  2. Visualisation de base des journaux : Vous pouvez utiliser la commande tail pour afficher les entrées les plus récentes des fichiers journaux et spécifier le nombre de lignes à afficher.

  3. Surveillance en temps réel : Avec tail -f, vous pouvez surveiller les journaux au fur et à mesure de leur mise à jour, ce qui vous permet d'observer les activités du système et de dépanner les problèmes au fur et à mesure qu'ils se produisent.

  4. Filtrage des informations de journal : En combinant tail avec des outils comme grep et awk, vous pouvez extraire des informations spécifiques des journaux, ce qui rend l'analyse plus efficace.

Ces compétences sont essentielles pour toute personne travaillant avec des systèmes Linux, des débutants aux administrateurs expérimentés. L'analyse des journaux est un élément fondamental de la maintenance du système, du dépannage et de la surveillance de la sécurité.

Au fur et à mesure que vous poursuivrez votre parcours Linux, vous constaterez que ces techniques de surveillance des journaux vous aideront à mieux comprendre votre système, à diagnostiquer les problèmes plus rapidement et à maintenir un environnement plus sûr et plus fiable.