journalctl : Maîtrisez le Système de Journalisation de Linux

journalctl : Maîtrisez le Système de Journalisation de Linux

journalctl est un outil puissant et polyvalent intégré “journald” le système de journalisation de “systemd“. Cet article a pour but de fournir une compréhension approfondie de “journalctl”, en mettant l’accent sur ses principales fonctions, son utilisation pour une meilleure analyse du système.

Qu’est-ce que “journalctl” ?

“journalctl” est un outil de ligne de commande inclus dans le système “systemd“, qui est maintenant le système d’initialisation par défaut dans la plupart des distributions Linux modernes. Son rôle principal est de permettre aux utilisateurs et aux administrateurs système de consulter et de manipuler les journaux système générés par “systemd” et d’autres processus sur le système.

Les fonctionnalités clés de journalctl comprennent :

  • Affichage des Journaux : Il permet d’afficher l’ensemble des journaux système, en partant des plus anciens jusqu’aux plus récents.
  • Filtrage : Il offre des options de filtrage avancées pour afficher les journaux d’un service spécifique, d’un niveau de priorité particulier, d’une période donnée ou d’un service défini.
  • Formatage : Les sorties des journaux peuvent être formatées de différentes manières pour faciliter la lecture ou l’analyse.
  • Exportation : Il permet d’exporter les journaux dans divers formats, facilitant l’intégration avec d’autres outils ou systèmes.
  • L’utilisation de journalctl ne nécessite pas de privilège administratif pour afficher les journaux de l’utilisateur actuel, mais l’accès aux journaux systèmes complets nécessite généralement des droits de super-utilisateur.

En résumé, “journalctl” est un outil polyvalent et puissant pour la gestion des journaux système sous Linux, offrant une interface unifiée pour accéder, filtrer et analyser les informations de journalisation.

Utilisation de “journalctl”

Afficher l’entièreté des journaux du système

Sans option “journactl” affiche la totalité des journaux du système, par ordre chronologique croissant.

Bash
journalctl

En général, par défaut, l’affichage des messages se présente sous la forme suivante:

<date et heure> <nom du système> <service ou process>: <message du journal>

Exemple:

nov. 25 15:19:04 just-sudo-it systemd[894]: Listening on REST API socket for snapd user session agent.
nov. 25 15:19:04 just-sudo-it systemd[894]: Listening on D-Bus User Message Bus Socket.
nov. 25 15:19:04 just-sudo-it systemd[894]: Reached target Sockets.
nov. 25 15:19:04 just-sudo-it systemd[894]: Reached target Basic System.
nov. 25 15:19:04 just-sudo-it systemd[894]: Reached target Main User Target.
nov. 25 15:19:04 just-sudo-it systemd[894]: Startup finished in 49ms.
nov. 25 15:19:04 just-sudo-it systemd[1]: Started User Manager for UID 1000.
nov. 25 15:19:04 just-sudo-it systemd[1]: Started Session 1 of User steve.

Bien évidemment le journal contient rapidement des milliers d’entrées et il sera bien plus pratique d’extraire les informations qui nous intéressent sur base de critères comme le service concerné, une période ou encore un type de message.

L’affiche de “journalctl” se fait à travers le “pager” par défaut du système (en général il s’agit de less). Nous pouvons donc naviger dans le journal avec les touches fléchées ou encore les touches PageUp, PageDown, Home et End.

Afficher les derniers événements du journal

Nous pouvons directement afficher les derniers événements du journal en utilisation l’option -e, ainsi le pager sautera directement à la dernière page du journal. Seules les 1000 dernières lignes seront affichée dans ce cas.

Bash
journalctl -e

Exemple:

nov. 25 15:22:48 just-sudo-it systemd[1]: update-notifier-download.service: Deactivated successfully.
nov. 25 15:22:48 just-sudo-it systemd[1]: Finished Download data for packages that failed at package install time.
nov. 25 15:28:03 just-sudo-it rsyslogd[662]: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="662" x-info="h>
nov. 25 15:32:58 just-sudo-it systemd[1]: Starting Cleanup of Temporary Directories...
nov. 25 15:32:58 just-sudo-it systemd[1]: systemd-tmpfiles-clean.service: Deactivated successfully.
nov. 25 15:32:58 just-sudo-it systemd[1]: Finished Cleanup of Temporary Directories.
lines 946-1003/1003 (END)

Afficher les événements en fonction d’une plage de temps

Les options --since et --until permettent respectivement de limiter l’affichage des événement depuis et jusqu’à une certaine période.

Ces deux options acceptent en paramètre soit un timestamp au format YYYY-MM-DD HH:MM:SS (ex: 2023-11-25 12:15:25) soit une structure textuelle comme “5 minutes ago” (il y a 5 minutes), “1 weak ago” (il y a une semaine) ou encore “yesterday”, “now”, …

Exemples

Afficher les événements depuis le 25/11/2023:
Bash
journalctl --since "2023-11-25"
Afficher les événements jusqu’il y a 5 minutes
Bash
journalctl --until "5 minutes ago"

Limiter le nombre d’événements à afficher

L’option -n permet de limiter l’affichage à un nombre d’événements donné:

Bash
journalctl -n <nombre d'événements>
steve@just-sudo-it ~ → journalctl -n 10
nov. 25 15:22:48 just-sudo-it systemd[1]: Starting Download data for packages that failed at package in>
nov. 25 15:22:48 just-sudo-it systemd[1]: update-notifier-download.service: Deactivated successfully.
nov. 25 15:22:48 just-sudo-it systemd[1]: Finished Download data for packages that failed at package in>
nov. 25 15:28:03 just-sudo-it rsyslogd[662]: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="66>
nov. 25 15:32:58 just-sudo-it systemd[1]: Starting Cleanup of Temporary Directories...
nov. 25 15:32:58 just-sudo-it systemd[1]: systemd-tmpfiles-clean.service: Deactivated successfully.
nov. 25 15:32:58 just-sudo-it systemd[1]: Finished Cleanup of Temporary Directories.
nov. 25 15:49:12 just-sudo-it systemd[1]: Starting Daily apt upgrade and clean activities...
nov. 25 15:49:13 just-sudo-it systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
nov. 25 15:49:13 just-sudo-it systemd[1]: Finished Daily apt upgrade and clean activities.

Filtrer l’affiche de “journalctl” en fonction de l’unité systemd.

L’option -u permet de n’afficher que les événements relatifs à l’unité correspondante dans “systemd” (un service, un socket, un timer, …).

Bash
journalctl -u <unité>

Nous pouvons par exemple afficher les événements relatifs au service SSH qui tourne sur notre machine:

Bash
journalctl -u ssh.service
steve@just-sudo-it ~ → journalctl -u ssh.service
-- Boot 485072e8480d4b1ea8f42eaaf0e329c9 --
oct. 12 16:56:47 just-sudo-it sshd[681]: Server listening on 0.0.0.0 port 22.
oct. 12 16:56:47 just-sudo-it sshd[681]: Server listening on :: port 22.
oct. 12 16:56:47 just-sudo-it systemd[1]: Starting OpenBSD Secure Shell server...
oct. 12 16:56:47 just-sudo-it systemd[1]: Started OpenBSD Secure Shell server.
oct. 12 16:58:54 just-sudo-it sshd[1105]: Connection closed by authenticating user steve 192.168.122.1 >
oct. 12 16:58:54 just-sudo-it sshd[1107]: Connection closed by authenticating user steve 192.168.122.1 >
oct. 12 16:58:56 just-sudo-it sshd[1109]: Accepted password for steve from 192.168.122.1 port 49220 ssh2
oct. 12 16:58:56 just-sudo-it sshd[1109]: pam_unix(sshd:session): session opened for user steve(uid=100>
oct. 12 16:58:56 just-sudo-it sshd[1109]: pam_unix(sshd:session): session closed for user steve
...

Afficher les événements par ordre anti-chronologique avec journalctl

L’option -r de journalctl permet d’afficher les événements par ordre anti-chronologique.

Bash
journalctl -r
steve@just-sudo-it ~ → journalctl -r
nov. 25 15:49:13 just-sudo-it systemd[1]: Finished Daily apt upgrade and clean activities.
nov. 25 15:49:13 just-sudo-it systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
nov. 25 15:49:12 just-sudo-it systemd[1]: Starting Daily apt upgrade and clean activities...
nov. 25 15:32:58 just-sudo-it systemd[1]: Finished Cleanup of Temporary Directories.
nov. 25 15:32:58 just-sudo-it systemd[1]: systemd-tmpfiles-clean.service: Deactivated successfully.
nov. 25 15:32:58 just-sudo-it systemd[1]: Starting Cleanup of Temporary Directories...
nov. 25 15:28:03 just-sudo-it rsyslogd[662]: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="66>
nov. 25 15:22:48 just-sudo-it systemd[1]: Finished Download data for packages that failed at package in>
nov. 25 15:22:48 just-sudo-it systemd[1]: update-notifier-download.service: Deactivated successfully.
nov. 25 15:22:48 just-sudo-it systemd[1]: Starting Download data for packages that failed at package in>
nov. 25 15:19:04 just-sudo-it systemd[1]: Started Session 1 of User steve.
nov. 25 15:19:04 just-sudo-it systemd[1]: Started User Manager for UID 1000.
nov. 25 15:19:04 just-sudo-it systemd[894]: Startup finished in 49ms.

Filtre les événement par priorité

“journalctl” utilise les huit niveaux de priorités standards pour classer les événements:

  • 0 : emergency (le plus sévère)
  • 1 : alert
  • 2 : critical
  • 3 : error
  • 4 : warning
  • 5 : notice
  • 6 : info
  • 7 : debug (le moins sévère)
Bash
journalctl -p <priorité>

En fonction du niveau sélectionné, “journalctl” affichera les événements de ce niveau et des niveaux plus sévères (donc numériquement plus petits). Le niveau “debug” revient à absolument tout afficher.

Nous pouvons par exemple uniquement afficher les événement de type “error” et plus sévères:

steve@just-sudo-it ~ → journalctl -p 3
oct. 13 11:57:17 just-sudo-it sshd[9419]: pam_systemd(sshd:session): Failed to release session: Interru>
-- Boot 6b3bdb2654d44c5a9d243fa864e8412c --
nov. 01 13:55:44 just-sudo-it sshd[742]: fatal: Access denied for user steve by PAM account configurati>
nov. 01 15:20:24 just-sudo-it sshd[1015]: pam_systemd(sshd:session): Failed to release session: Interru>
lines 1-4/4 (END)

Afficher les événements depuis un “boot”

L’option -b permet de n’afficher que les événements depuis un “boot” du système. Par défaut, sans précision, c’est le boot actuel qui sera la référence.

Bash
journalctl -b [ID|+/-offset|all]

Nous pouvons ainsi afficher les événements qui se sont produits depuis le précédent boot:

steve@just-sudo-it ~ → journalctl -b -1
nov. 01 13:55:28 just-sudo-it kernel: Linux version 5.15.0-87-generic (buildd@lcy02-amd64-011) (gcc (Ub>
nov. 01 13:55:28 just-sudo-it kernel: Command line: BOOT_IMAGE=/vmlinuz-5.15.0-87-generic root=/dev/map>
nov. 01 13:55:28 just-sudo-it kernel: KERNEL supported cpus:
nov. 01 13:55:28 just-sudo-it kernel:   Intel GenuineIntel
nov. 01 13:55:28 just-sudo-it kernel:   AMD AuthenticAMD
nov. 01 13:55:28 just-sudo-it kernel:   Hygon HygonGenuine
nov. 01 13:55:28 just-sudo-it kernel:   Centaur CentaurHauls
nov. 01 13:55:28 just-sudo-it kernel:   zhaoxin   Shanghai  
nov. 01 13:55:28 just-sudo-it kernel: BIOS-provided physical RAM map:
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x0000000000100000-0x000000007ffdbfff] usable
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x000000007ffdc000-0x000000007fffffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
nov. 01 13:55:28 just-sudo-it kernel: BIOS-e820: [mem 0x0000000100000000-0x000000017fffffff] usable

Un offset positif comptera depuis le premier boot alors qu’un offset négatif comptera depuis le boot actuel.

Il est aussi possible de choisir l’identifiant du boot qui sera proposé par l’auto-complétion de bash si elle est disponible avec le magique TAB-TAB.

steve@just-sudo-it ~ → journalctl -b 32222819088843b993708be7b0d03e24 
nov. 25 15:17:48 just-sudo-it kernel: Linux version 5.15.0-87-generic (buildd@lcy02-amd64-011) (gcc (Ub>
nov. 25 15:17:48 just-sudo-it kernel: Command line: BOOT_IMAGE=/vmlinuz-5.15.0-87-generic root=/dev/map>
nov. 25 15:17:48 just-sudo-it kernel: KERNEL supported cpus:
nov. 25 15:17:48 just-sudo-it kernel:   Intel GenuineIntel
nov. 25 15:17:48 just-sudo-it kernel:   AMD AuthenticAMD
nov. 25 15:17:48 just-sudo-it kernel:   Hygon HygonGenuine
nov. 25 15:17:48 just-sudo-it kernel:   Centaur CentaurHauls
nov. 25 15:17:48 just-sudo-it kernel:   zhaoxin   Shanghai  
nov. 25 15:17:48 just-sudo-it kernel: BIOS-provided physical RAM map:
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x0000000000100000-0x000000007ffdbfff] usable
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x000000007ffdc000-0x000000007fffffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
nov. 25 15:17:48 just-sudo-it kernel: BIOS-e820: [mem 0x0000000100000000-0x000000017fffffff] usable

Ajouter des information descriptives

L’option -x permet d’ajouter les informations descriptives de catalogue aux événements affiché, ce qui peut aider à la compréhension du contexte des événements.

Bash
journalctl -x
nov. 25 15:22:48 just-sudo-it systemd[1]: update-notifier-download.service: Deactivated successfully.
░░ Subject: Unit succeeded
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ The unit update-notifier-download.service has successfully entered the 'dead' state.
nov. 25 15:22:48 just-sudo-it systemd[1]: Finished Download data for packages that failed at package in>
░░ Subject: L'unité (unit) update-notifier-download.service a terminé son démarrage
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support

Définir le format de sortie du journal

il est possible à l’aide de l’option -p de choisir le format de sortie du journal. Les formats sont nombreux, avec plus ou moins de détail, ou différents formats de timestamp. Je vous invite à lire la page man journalctl pour les découvrir.

Le plus intéressant sera sans doute la possibilité de sortir les événements du journal au format JSON permettant ainsi de les exporter vers n’importe quel système qui supporte ce format.

Bash
journalctl -o json
steve@just-sudo-it ~ → journalctl -o json
{"MESSAGE":"Linux version 5.15.0-86-generic (buildd@lcy02-amd64-086) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binu>
{"MESSAGE":"Command line: BOOT_IMAGE=/vmlinuz-5.15.0-86-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro","_TRANSPORT":"kernel",>
{"SYSLOG_IDENTIFIER":"kernel","_MACHINE_ID":"70e5df57d21f4aec8d42d30efc3bacb8","PRIORITY":"6","SYSLOG_FACILITY":"0","__REALTIME_T>
{"_BOOT_ID":"e50eb0a84d21472b8616aae5ec5cdb54","MESSAGE":"  Intel GenuineIntel","_SOURCE_MONOTONIC_TIMESTAMP":"0","PRIORITY":"6",>
{"__REALTIME_TIMESTAMP":"1697122416827442","_SOURCE_MONOTONIC_TIMESTAMP":"0","PRIORITY":"6","SYSLOG_IDENTIFIER":"kernel","_HOSTNA>

Suivre le flux des événements avec “journalctl”

Comme nous pourrions le faire avec l’option -f de tail, “journalctl” dispose de la même option pour suivre le flux des événements, comprenez par là qu’il affichera les quelques derniers événements ayant eu lieu et continuera a vous afficher en temps réel les nouveaux événements qui se produiront.

Bash
journalctl -f

Pour quitter “journalctl” il suffit d’effectuer un CTRL+C.

Combiner les différentes options

Il est bien sûr possible de combiner ces options pour affiner le filtrage que l’on effectue et ainsi obtenir les informations les plus pertinentes possibles.

Exemples:

Afficher les événements d’une unité spécifique et sauter à la dernière page du journal
Bash
journalctl -eu <unité>
Suivre le flux d’événement de priorité 3 et plus critique
Bash
journalctl -fp 3
Afficher au format json les événements de priorité 4 et plus sévère pour l’unité ssh.service
Bash
journalctl -o json -p 4 -u ssh.service

Conclusion

À travers cet article, nous avons exploré les diverses facettes de “journalctl”, l’outil de journalisation intégré au système “systemd” des distributions Linux modernes. De ses fonctionnalités de base à la personnalisation avancée, “journalctl” se révèle être un outil puissant et flexible pour la gestion des journaux du système. Que ce soit pour le dépannage, la surveillance, ou simplement pour une meilleure compréhension des activités du système, “journalctl” offre une interface unifiée et efficace pour accéder et analyser les journaux.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.