Jour­nalctl permet de gérer et d’analyser ef­fi­ca­ce­ment les journaux système sous Linux. Cet outil offre des fonctions de sur­veil­lance de l’activité du système, de dépannage, de suivi des journaux en temps réel, d’aperçu détaillé des données des journaux et est in­dis­pen­sable pour diag­nos­ti­quer ef­fi­ca­ce­ment les problèmes du système.

Qu’est-ce que Jour­nalctl ?

Jour­nalctl est un uti­li­taire puissant pour requérir et afficher les journaux d’évé­ne­ments ou logfiles sous Linux. Il s’agit d’un élément central de la suite de gestion des systèmes et des services systemd, utilisée par défaut dans de nom­breuses dis­tri­bu­tions Linux modernes comme Ubuntu, Fedora et Arch Linux. Le nom « Jour­nalctl » est composé des termes « journal » (journal) et « ctl » (contrôle), ce qui indique sa fonction d’outil de contrôle et d’analyse des journaux.

Jour­nalctl permet d’accéder au journal système, qui est géré par systemd-journald. Le journal système est une col­lec­tion centrale de messages et d’évé­ne­ments qui se pro­dui­sent pendant le fonc­tion­ne­ment du système Linux. Con­trai­re­ment aux journaux tra­di­tion­nels basés sur du texte, Jour­nalctl offre un moyen structuré et efficace de re­cher­cher, filtrer et afficher les données du journal en temps réel. Cela peut aider à diag­nos­ti­quer des problèmes ou à sur­veil­ler l’état du système.

Pour ce faire, Jour­nalctl stocke les fichiers journaux au format binaire, car les fichiers journaux binaires sont plus compacts et efficaces que leurs équi­va­lents textuels. Cela permet une recherche plus rapide et plus efficace d’évé­ne­ments ou d’in­for­ma­tions spé­ci­fiques dans les fichiers journaux, étant donné la grande quantité de données jour­na­li­sées. De plus, les fichiers journaux binaires offrent une meilleure sécurité que les journaux textuels en raison de leur structure et de leur chif­fre­ment, car les formats binaires rendent plus difficile la ma­ni­pu­la­tion des données des journaux.

Ajuster l’espace de stockage des fichiers journaux

Jour­nalctl permet de limiter et de con­fi­gu­rer l’espace de stockage que les fichiers journaux occupent sur le disque dur. Cela se fait via les pa­ra­mètres du service systemd-journald. Les pa­ra­mètres de con­fi­gu­ra­tion sont en­re­gis­trés dans le fichier /etc/systemd/journald.conf. Vous y trouverez les entrées suivantes :

  • SystemMaxUse : limite l’espace disque pour les journaux dans le ré­per­toire système.
  • RuntimeMaxUse : limite l’espace disque pour les journaux dans le ré­per­toire tem­po­raire.

Pour définir la limite de l’espace disque, ajoutez ou modifiez les lignes suivantes selon vos besoins :

[Journal]
SystemMaxUse=50M
RuntimeMaxUse=50M
bash

Les valeurs de cet exemple (50M) peuvent être modifiées à volonté. Vous pouvez également utiliser dif­fé­rentes unités comme K (ki­looc­tets), M (mé­gaoc­tets), G (gi­gaoc­tets) ou T (ter­raoc­tets). Après avoir édité le fichier de con­fi­gu­ra­tion, systemd-journald doit être redémarré pour que les mo­di­fi­ca­tions prennent effet :

sudo systemctl restart systemd-journald
bash

Après ces étapes, systemd-journald est configuré pour limiter l’espace de stockage des fichiers journaux. Assurez-vous que la limite choisie est suf­fi­sante pour stocker les données im­por­tantes du journal, mais qu’elle ne consomme pas trop d’espace disque. Notez que les anciens journaux sont au­to­ma­ti­que­ment supprimés lorsque la limite est atteinte.

Dé­ter­mi­ner l’oc­cu­pa­tion du disque dur

Avant d’ajuster l’espace disque pour les fichiers journaux, vous pouvez d’abord vérifier combien d’espace disque est ac­tuel­le­ment utilisé par le journal. Ceci est possible avec l’option --disk-usage :

journalctl --disk-usage
Journals take up 8.0M on disk.
bash

Supprimer les anciennes entrées de journal

Si le journal prend trop de place en mémoire, il est possible de supprimer fa­ci­le­ment les anciennes entrées de journal. Pour cela, deux pos­si­bi­li­tés sont dis­po­nibles :

--vacuum-size permet de réduire la taille de votre journal en spé­ci­fiant une taille. Dans ce cas, les anciennes entrées sont sup­pri­mées jusqu’à ce que l’espace total du journal occupé sur le disque dur atteigne la taille souhaitée.

sudo journalctl --vacuum-size=1G
bash

Sinon, il est possible de réduire la taille du journal en spé­ci­fiant un délai de blocage avec l’option --vacuum-time. Dans ce cas, toutes les entrées qui dépassent le temps indiqué seront sup­pri­mées. Si vous souhaitez par exemple conserver les entrées de journal de moins d’un an, vous pouvez entrer ce qui suit :

sudo journalctl --vacuum-time=1years
bash

Que peut faire Jour­nalctl ?

Une des fonctions puis­santes de Jour­nalctl est la pos­si­bi­lité de filtrer les entrées de logs selon dif­fé­rents critères. Cette fonction permet de re­cher­cher de manière ciblée des in­for­ma­tions per­ti­nentes et ainsi d’iden­ti­fier plus ra­pi­de­ment les problèmes. Nous pré­sen­tons ci-dessous quelques-unes des options de filtrage les plus courantes de Jour­nalctl.

Afficher les journaux

En tapant la commande journalctl, les entrées de journaux pour le système actuel sont affichées dans l’ordre chro­no­lo­gique inverse. Saisissez journalctl -f ou journalctl --follow pour afficher les entrées en temps réel. Les nouvelles entrées sont au­to­ma­ti­que­ment affichées dans l’ordre d’arrivée.

En fonction de la durée d’exécution de systemd sur votre système, vous verrez pro­ba­ble­ment s’afficher une quantité in­cal­cu­lable de données, pouvant comporter des dizaines ou des centaines de milliers de lignes. Pour trouver plus ra­pi­de­ment ce que vous cherchez, il est possible de filtrer davantage les pro­to­coles à l’aide de dif­fé­rentes commandes Linux.

Filtrer par heure

Avec Jour­nalctl, les journaux peuvent être filtrés en fonction d’une heure précise afin de pouvoir les parcourir plus ef­fi­ca­ce­ment pour trouver des in­for­ma­tions per­ti­nentes.

Filtrage par boot

Le filtrage des journaux par boot (ou démarrage) est par­ti­cu­liè­re­ment utile pour vérifier des évé­ne­ments système spé­ci­fiques à un moment donné ou pendant un scénario de démarrage par­ti­cu­lier. Cela facilite le diag­nos­tic des problèmes, car les entrées du journal peuvent ainsi se limiter à un état ou à une con­fi­gu­ra­tion spé­ci­fique du système.

  1. Boot actuel : avec journalctl -b, toutes les entrées de journal col­lec­tées depuis le dernier re­dé­mar­rage sont affichées.
  2. Boot passé : l’option -b, suivie d’un nombre, permet d’afficher les entrées du journal pour un démarrage antérieur spé­ci­fique. Par exemple, si vous tapez journalctl -b 1, le démarrage précédent sera affiché.
  3. Liste de tous les dé­mar­rages dis­po­nibles : la commande journalctl --list-boots affiche une liste des opé­ra­tions de démarrage dis­po­nibles avec leurs ID res­pec­tifs. Vous pouvez utiliser l’ID de démarrage souhaité pour afficher les journaux d’un démarrage par­ti­cu­lier.

Alors que sur certaines dis­tri­bu­tions Linux, l’en­re­gis­tre­ment des dé­mar­rages passés est activé par défaut, sur d’autres, cette fonction doit d’abord être activée. Pour ce faire, vous pouvez créer un ré­per­toire dans lequel le journal doit être en­re­gis­tré en tapant sudo mkdir -p /var/log/journal.

Vous pouvez aussi éditer le fichier de con­fi­gu­ra­tion du journal avec sudo nano /etc/systemd/journald.conf. Ensuite, sous [Journal], mettez l’option Storage= sur persistent pour activer la jour­na­li­sa­tion per­sis­tante :

. . .
[Journal]
Storage=persistent
bash

Filtrer par fenêtre de temps

Il peut parfois être né­ces­saire d’afficher les entrées du journal pour une période donnée. Jour­nalctl propose les options --since et --until qui per­met­tent de limiter les entrées à une période donnée. Utilisez pour cela le format de temps YYY-MM-DD HH:MM:SS. Par exemple, pour afficher toutes les entrées du journal entre le 1er janvier 2023 à 12:00 et le 2 janvier 2023 à 12:00, la commande est la suivante :

journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bash

La com­bi­nai­son des deux commandes peut aussi filtrer selon un temps plus bref :

journalctl --since 09:00 --until "1 hour ago"
bash

Il est possible d’omettre des parties du format ci-dessus. Il est ainsi possible d’afficher toutes les entrées à partir d’une certaine heure, par exemple :

journalctl --since "2023-11-16 15:25:00"
bash

Jour­nalctl comprend aussi les valeurs relatives comme les mots yesterday (hier), today (aujourd’hui) ou tomorrow (demain). Pour afficher les entrées d’hier, tapez ce qui suit :

journalctl --since yesterday
bash

Filtrer par message d’intérêt

Le filtrage des entrées de journaux par message d’intérêt avec Jour­nalctl est également ex­trê­me­ment utile, car il permet de cibler la recherche d’in­for­ma­tions per­ti­nentes et de se con­cen­trer sur certains aspects des journaux système. Cela permet notamment d’effectuer un diag­nos­tic efficace des erreurs, une détection précoce des problèmes de sécurité et une sur­veil­lance rapide des per­for­mances.

Filtrage par priorité

Pour filtrer les journaux avec Jour­nalctl en fonction de certains intérêts de messages, vous pouvez utiliser les priorités des entrées de journaux. Pour cela, vous pouvez utiliser le nom de chaque priorité ou sa valeur numérique cor­res­pon­dante. Plus le numéro est bas, plus le message est important :

  • 0 : emerg (urgence)
  • 1 : alert (alarm)
  • 2 : crit (critique)
  • 3 : err (erreur)
  • 4 : warning (aver­tis­se­ment)
  • 5 : notice (note)
  • 6 : info (in­for­ma­tion)
  • 7 : debug (recherche d’erreurs)

Les messages avec une certaine priorité peuvent être filtrés avec l’option -p. Par exemple, la commande suivante permet d’afficher uni­que­ment les entrées de journal dont la priorité est « err » (Error) ou su­pé­rieure :

journalctl -p err
bash

Filtrage par unité

Filtrer les journaux par unité avec Jour­nalctl est par­ti­cu­liè­re­ment utile si vous voulez vous con­cen­trer sur des services ou des processus spé­ci­fiques. Ceux-ci peuvent être filtrés avec l’option -u. Par exemple, pour afficher les entrées de journal pour le serveur web Apache, vous pouvez entrer ce qui suit :

journalctl -u apache2
bash

La recherche peut encore être affinée à l’aide des valeurs tem­po­relles relatives déjà connues. Si vous voulez savoir si le service a déjà été exécuté aujourd’hui, vous pouvez taper ce qui suit :

journalctl -u apache2 --since today
bash

Jour­nalctl permet de fusionner des en­re­gis­tre­ments de dif­fé­rentes unités. Par exemple, si votre processus Nginx est connecté à une unité PHP-FPM, les en­re­gis­tre­ments des deux peuvent être fusionnés dans l’ordre chro­no­lo­gique. La commande à utiliser est la suivante :

journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bash

Filtrer par processus, uti­li­sa­teur ou ID de groupe

Jour­nalctl permet également de filtrer les entrées du journal par processus, uti­li­sa­teur ou ID de groupe. Si vous con­nais­sez le PID exact du processus que vous voulez re­cher­cher, il peut être filtré avec l’option _PID. Si le PID est par exemple 8088, la commande est la suivante :

journalctl _PID=8088
bash

Vous pouvez aussi utiliser les filtres _UID ou _GID pour afficher toutes les entrées qui ont été jour­na­li­sées par un uti­li­sa­teur ou un groupe spé­ci­fique. Si votre serveur Web a par exemple pour nom « www-data », l’ID de l’uti­li­sa­teur peut être trouvé de la manière suivante :

id -u www-data
33
bash

Une fois que vous con­nais­sez l’ID, les entrées du journal peuvent être filtrées :

journalctl _UID=33 --since today
bash

Pour voir pour quels ID de groupe des entrées ont été créées, vous pouvez utiliser l’option -F. Celle-ci vous montre toutes les valeurs en­re­gis­trées pour le champ « ID de groupe » :

journalctl -F _GID
32
99
102
133
81
84
100
0
124
87
bash

Filtrer par champ de com­po­sants

Le filtrage par champ de com­po­sants est ex­trê­me­ment utile pour mettre l’accent sur des ap­pli­ca­tions, services ou processus spé­ci­fiques. Le champ de com­po­sants est gé­né­ra­le­ment utilisé par dif­fé­rents services ou com­po­sants logiciels pour iden­ti­fier des in­for­ma­tions spé­ci­fiques dans les pro­to­coles. Ce type de filtrage permet de cibler les entrées du journal sur un composant, une ap­pli­ca­tion ou une unité de service spé­ci­fique. Par exemple, pour filtrer les entrées contenant le fichier exé­cu­table bash, vous devez entrer la commande suivante :

journalctl /usr/bin/bash
bash

Afficher les messages du noyau

Filtrer les entrées de journal pour les messages du noyau avec Jour­nalctl est une méthode efficace pour analyser des in­for­ma­tions spé­ci­fiques sur le fonc­tion­ne­ment du noyau dans un système Linux. Les messages du noyau peuvent fournir des in­di­ca­tions sur des problèmes matériels, des conflits de pilotes ou d’autres évé­ne­ments système.

Les messages du noyau qui se trouvent dans la sortie dmesg peuvent également être filtrés. Ils peuvent être affichés avec les options -k ou–dmesg ` :

journalctl -k
bash

Par défaut, les messages du noyau du processus de démarrage en cours sont affichés. Les messages d’un démarrage al­ter­na­tif peuvent être filtrés avec les in­di­ca­teurs de sélection de démarrage déjà connus. Par exemple, si vous voulez voir les messages du noyau des cinq derniers dé­mar­rages, entrez ce qui suit :

journalctl -k -b -5
bash

Modifier l’affichage du journal dans Jour­nalctl

La per­son­na­li­sa­tion de l’affichage dans Jour­nalctl permet aux uti­li­sa­teurs de mieux cibler leurs re­cherches dans les journaux et d’extraire plus ra­pi­de­ment les in­for­ma­tions per­ti­nentes. Par exemple, en ciblant l’affichage des données du journal sur une période donnée ou en temps réel, les erreurs et les problèmes du système peuvent être ra­pi­de­ment iden­ti­fiés.

Rac­cour­cir ou élargir la sortie

Vous pouvez per­son­na­li­ser la façon dont Jour­nalctl affiche les données. Pour cela, la sortie peut être soit rac­cour­cie soit étendue. Par défaut, Jour­nalctl affiche toute l’entrée dans le pager et laisse les entrées s’étendre à droite de l’écran. La sortie peut être rac­cour­cie avec l’option --no-full :

journalctl --no-full
bash

Vous pouvez étendre l’affichage avec l’option -a :

journalctl -a
bash

Mettre Jour­nalctl en sortie standard

Dans Jour­nalctl, la sortie du journal est affichée par défaut par un pager, par exemple less. Cela a l’avantage de permettre de voir la sortie étape par étape et de faciliter la na­vi­ga­tion dans de longs fichiers journaux. Parfois, il peut toutefois être né­ces­saire d’afficher les journaux di­rec­te­ment sur la sortie standard. Cela est possible comme suit :

journalctl --no-pager
bash

Définir les formats de sortie

Si né­ces­saire, il y a plusieurs options pour ajuster le format de sortie des journaux dans Jour­nalctl. L’option -o peut être utilisée avec l’iden­ti­fi­ca­teur de format cor­res­pon­dant. Ainsi, les entrées du journal peuvent par exemple être éditées en JSON :

journalctl -b -u nginx -o json
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :
bash

Les formats suivants peuvent être utilisés dans Jour­nalctl :

  • cat : affiche uni­que­ment le champ du message.
  • export : ce format binaire convient pour le transfert ou la sau­ve­garde.
  • json : JSON standard avec une entrée par ligne.
  • json-pretty : JSON formaté pour une meilleure li­si­bi­lité.
  • json-sse : sortie formatée JSON en­ve­lop­pée, per­met­tant d’ajouter des évé­ne­ments envoyés par le serveur.
  • short : sortie standard de style syslog.
  • short-iso : format standard pour afficher les ho­ro­da­tages ISO-8601 Wallclock.
  • short-monotonic : format standard pour l’ho­ro­da­tage monotone.
  • short-precise : format standard avec précision à la mi­cro­se­conde.
  • verbose : affiche chaque champ de journal dis­po­nible pour l’entrée cor­res­pon­dante.

Sur­veil­lance active du processus

Dans la sur­veil­lance active des processus avec Jour­nalctl, l’uti­li­taire de ligne de commande tail est utilisé pour suivre les journaux en temps réel et n’afficher que les dernières entrées. Cela facilite la sur­veil­lance en temps réel des évé­ne­ments du système et permet la réaction rapide aux problèmes qui sur­vien­nent.

Afficher les journaux actuels

L’option -n peut être utilisée pour afficher un certain nombre d’en­re­gis­tre­ments. Cette option fonc­tionne exac­te­ment comme tail -n. Avec la commande suivante, les 10 derniers en­re­gis­tre­ments sont affichés par défaut :

journalctl -n
bash

Le nombre d’entrées affichées peut être réglé in­di­vi­duel­le­ment, par exemple sur 20 :

journalctl -n 20
bash
Aller au menu principal