GNU/Linux >> Tutoriels Linux >  >> Linux

Guide du débutant pour analyser les journaux sous Linux avec la commande journalctl

systemd est la valeur par défaut sur la plupart des principales distributions Linux. L'une des principales caractéristiques de systemd est la façon dont il collecte les journaux et les outils qu'il fournit pour analyser ces journaux.

Dans le système SysVinit traditionnel, vous disposez de syslog qui stocke les journaux dans des fichiers en texte brut. La lecture et l'analyse de ces fichiers nécessitent l'utilisation de find, grep, cut et de nombreuses autres commandes.

systemd collecte les journaux de plus de sources que syslogs, conserve les journaux de journal au format binaire et vous fournit un outil de ligne de commande pour lire, analyser et manipuler les journaux. C'est plus simple que les syslogs.

Qu'est-ce que journald ? Qu'est-ce que journalctl ?

journald est le démon de systemd qui collecte les journaux de diverses sources de journal comme syslog.

journalctl est l'outil de ligne de commande qui vous permet d'interagir avec les journaux de journal.

Avec journalctl, vous pouvez lire les journaux, surveiller les journaux en temps réel, filtrer les journaux en fonction de l'heure, du service, de la gravité et d'autres paramètres.

Dans ce tutoriel, je vais vous montrer comment utiliser journalctl pour lire, surveiller et analyser les journaux sous Linux.

Vérifiez si les journaux de journal sont activés sur votre système

Certaines distributions Linux, en particulier celles de bureau, n'activent pas les journaux de journal par défaut.

L'emplacement par défaut des journaux journald est /var/log/journal annuaire. Vous devez vous assurer que ce répertoire existe. Sinon, créez-le vous-même.

Ensuite, dans le fichier /etc/systemd/journald.conf assurez-vous que la valeur Storage est défini sur auto ou persistent .

Le fichier journald.conf affiche les valeurs par défaut. Ainsi, même s'il y a un # devant les entrées, cela signifie que ce sont les paramètres par défaut utilisés. Si vous voulez changer quoi que ce soit, vous supprimez le # de cette ligne.

Utilisation des commandes journalctl

Laissez-moi vous montrer quelques-uns des exemples les plus basiques mais utiles de la commande journalctl.

Lire et rechercher dans les journaux avec journalctl

Si vous tapez simplement journalctl dans le terminal, il affichera les journaux du journal dans l'ordre chronologique.

journalctl

journalctl utilise less dessous pour vous montrer les journaux. Ce qui signifie que vous pouvez utiliser les mêmes touches pour vous déplacer dans les journaux qu'avec la commande less.

Si vous ne vous en souvenez pas, voici un petit rappel :

Clé Description
Flèche Se déplacer d'une ligne
Espace Descendre d'une page
b Remonter d'une page
g Aller à la première ligne
G Aller à la dernière ligne
100g Aller à la 100ème ligne
/chaîne Rechercher la chaîne à partir de la position actuelle
n/n Aller à la correspondance de recherche suivante ou précédente
q Quitter les journaux

Si vous ne voulez pas que les journaux soient affichés en mode d'affichage moins similaire, vous pouvez utiliser le --no-pager drapeau. Cela affichera des journaux entiers directement à l'écran.

journalctl --no-pager

Ce n'est pas très utile et cela inondera votre écran si vous avez une énorme quantité de journaux.

Afficher les journaux dans l'ordre chronologique inverse

Comme vous l'avez remarqué, les journaux sont affichés par ordre chronologique. Cela signifie que les journaux stockés les plus anciens sont affichés en premier.

Si vous souhaitez voir les journaux récents en premier, vous pouvez afficher les journaux de journaux dans l'ordre inverse avec l'option -r :

journalctl -r

Il utilise toujours une commande moins comme view. Alors, appuyez sur q pour quitter le mode d'affichage du journal.

Afficher uniquement N lignes récentes des journaux de journal

Au lieu d'afficher tous les journaux, vous pouvez choisir de n'afficher qu'un certain nombre de lignes du journal en utilisant le -n option.

Par exemple, la commande ci-dessous affichera les 25 dernières lignes des journaux :

journalctl -n 25

Afficher les journaux du journal en temps réel

Voir les journaux récents est une chose, si vous voulez voir les journaux en temps réel, vous pouvez utiliser le -f option de la commande journalctl :

journalctl -f

Comme l'option -f de la commande tail, cela affichera les journaux en temps réel dans le mode suivi.

Utilisez la commande Ctrl+C pour quitter la vue en temps réel.

Afficher les journaux en heure UTC

Par défaut, les journaux du journal sont affichés dans l'heure locale de votre système. Si l'heure de votre système est réglée sur une heure autre que UTC et que vous souhaitez voir les journaux en UTC, vous pouvez le faire en utilisant le --utc drapeau.

journalctl --utc

Afficher uniquement les messages du noyau avec -k

Le journal systemd accumule les journaux de différentes sources. Si vous voulez juste voir les journaux du noyau Linux, vous pouvez utiliser l'option -k .

journalctl -k

Conseil :utilisez sudo pour voir tous les journaux de journaux

Systemd protège le type de journaux à montrer à quel utilisateur.

Il peut afficher certains journaux mais pas tous les journaux si vous êtes un utilisateur régulier :

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

Si vous souhaitez accéder à tous les journaux, vous devez utiliser sudo si vous êtes un utilisateur sudo :

sudo journalctl -u ssh

Afficher les messages d'une session de démarrage particulière

C'est une excellente caractéristique de jounrald. La commande journalctl vous permet d'accéder aux journaux appartenant à une session de démarrage spécifique à l'aide de l'option -b .

Vous pouvez lister toutes les sessions de démarrage avec --list-boots drapeau.

journalctl --list-boots

La sortie affichera les sessions de démarrage avec l'heure de démarrage et un nombre entier attribué aux sessions de démarrage :

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

La session de démarrage 0 correspond aux sessions de démarrage en cours. Boot session -1 est la dernière session démarrée et ainsi de suite.

journalctl -b -2

Imaginez essayer de faire cela dans l'ancien système syslog !

Vous ne pouvez pas seulement obtenir les journaux de démarrage comme ce que vous voyez dans /var/log/boot.log . Cependant, les journaux de démarrage sont toujours au début des journaux si vous êtes dans la vue de session de démarrage.

Filtrer les journaux de journaux pour un service systemd spécifique

Le filtrage est un point fort des logs de journaux. Vous pouvez filtrer les journaux en fonction des services systemd.

journalctl -u service_name

Par exemple, si vous souhaitez voir les journaux générés par SSH, vous pouvez l'utiliser comme ceci :

journalctl -u ssh

Vous aurez besoin de connaître le nom du service systemd bien sûr.

Filtrer les journaux pour un certain intervalle de temps

Il s'agit d'un autre exemple de la capacité de filtrage de chaîne des journaux de journal. Vous pouvez filtrer les journaux pour une certaine période de temps et il existe plusieurs façons de le faire.

Vous pouvez utiliser le langage naturel pour filtrer les journaux. Des termes comme hier, aujourd'hui et demain sont reconnus.

journalctl --since=yesterday --until=now

Vous pouvez également spécifier une date ou une combinaison date/heure :

journalctl --since "2020-07-10"

Vous pouvez également spécifier une période de temps avec les dates et l'heure :

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

L'heure commence à 00:00:00 et détermine le jour et la date.

Vous pouvez également utiliser un temps relatif comme -1h20min pour spécifier 1 heure 20 minutes dans le passé.

Filtrer les journaux en fonction de l'UID, du GID et du PID

Si vous déboguez un problème, vous souhaiterez peut-être vérifier les journaux d'un certain processus à l'aide de son PID.

Les journaux de journal peuvent également être filtrés sur l'ID utilisateur (UID), l'ID de groupe (GID) et l'ID de processus (PID). Ci-dessous un exemple :

journalctl _PID=1234

Astuce :Combinez plusieurs options pour un affichage plus personnalisé des journaux

Vous pouvez combiner plusieurs options pour afficher les journaux souhaités.

Par exemple, si vous souhaitez voir uniquement les journaux SSH d'hier dans les horodatages UTC, vous pouvez utiliser :

sudo journalctl -u ssh --since=yesterday --utc

Une autre utilisation courante consiste à filtrer les journaux en fonction des sessions de démarrage. Si vous souhaitez voir uniquement les journaux SSH de la session en cours, vous pouvez utiliser :

sudo journalctl -u ssh -b0

Les possibilités sont infinies et vous pouvez combiner les options en fonction de vos besoins.

Utilisation de journalctl -xe pour afficher les derniers journaux

Vous trouverez souvent des personnes suggérant d'utiliser journalctl -xe commande.

  • -e :Aller à la fin des journaux de journal
  • -x  :Afficher des informations supplémentaires sur les entrées de journal (si disponibles)

Certaines entrées de journal contiennent des informations supplémentaires qui ne sont pas affichées dans l'affichage normal du journal. Utilisation du -x option peut afficher de telles informations.

Ce que vous voyez sous la forme d'une seule ligne comme celle-ci :

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

Il pourrait afficher plus d'informations comme ceci :

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

Les informations supplémentaires permettent d'expliquer le contexte d'une erreur ou d'un événement de journal et les solutions possibles.

Afficher uniquement les erreurs dans les journaux avec journalctl

Pour afficher toutes les erreurs de la session en cours, vous pouvez utiliser :

journalctl -p 3 -xb
  • -p 3 :filtrer les journaux pour la priorité 3 (ce qui correspond à une erreur)
  • -x :fournit des informations supplémentaires sur le journal (si disponible)
  • b :depuis le dernier démarrage (qui est la session en cours)

Vous pouvez également utiliser un autre niveau de priorité pour obtenir des journaux de débogage, d'avertissement ou même de niveau critique. Ce tableau répertorie tous les niveaux de priorité.

Priorité Code
0 urgence
1 alerte
2 critique
3 erreur
4 avertissement
5 avis
6 infos
7 déboguer

Vous pouvez également afficher les journaux pour une plage de gravité. Par exemple, si vous souhaitez voir tous les journaux d'avertissement, d'avis et d'informations de la session en cours, vous pouvez utiliser :

journalctl -p 4..6 -b0

Vous auriez également pu utiliser warning..info dans la commande ci-dessus au lieu de 4..6 .

Vérifiez l'espace disque utilisé par les journaux

Le journald collecte les journaux de diverses sources et stocke les journaux de différents niveaux, y compris les journaux de débogage. Croyez-moi, tout en conservant l'aide des journaux pour l'analyse et l'audit, ils peuvent occuper une quantité considérable d'espace disque.

Vous pouvez vérifier l'espace disque occupé par les journaux du journal avec cette commande journalctl :

journalctl --disk-usage

Vous pourriez avoir une surprise (ou un choc) lorsque vous voyez le résultat :

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2,8 Go ? C'est beaucoup. Vous voudrez peut-être effacer les journaux du journal.

Profitez de l'analyse des journaux avec la commande journalctl

Il existe de nombreuses autres options et utilisations de la commande journalctl et je ne peux pas toutes les couvrir. Je vous recommande de lire sa page de manuel si vous voulez plus de détails à ce sujet.

Je crois que je vous en ai donné assez pour utiliser la commande journalctl pour une analyse régulière des journaux. J'espère que ce tutoriel détaillé sur journald vous plaira.

Si vous avez des suggestions ou des questions, n'hésitez pas à laisser un commentaire.


Linux
  1. Un guide du débutant sur les autorisations Linux

  2. Commande Linux Tee avec exemples

  3. Commande principale Linux avec exemples

  4. Principes de base de Linux :Guide du débutant pour l'édition de texte avec vim

  5. Commande JQ sous Linux avec exemples

Commande Tr sous Linux avec des exemples

Commandes Linux - Guide complet

15 Commande Linux ps avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

Un guide du débutant pour naviguer dans le système de fichiers Linux