Qu’est-ce que Journalctl et à quoi sert-il ?

Journalctl permet de gérer et d’analyser efficacement les journaux système sous Linux. Cet outil offre des fonctions de surveillance 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 indispensable pour diagnostiquer efficacement les problèmes du système.

Qu’est-ce que Journalctl ?

Journalctl est un utilitaire puissant pour requérir et afficher les journaux d’événements 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 nombreuses distributions Linux modernes comme Ubuntu, Fedora et Arch Linux. Le nom « Journalctl » 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.

Journalctl permet d’accéder au journal système, qui est géré par systemd-journald. Le journal système est une collection centrale de messages et d’événements qui se produisent pendant le fonctionnement du système Linux. Contrairement aux journaux traditionnels basés sur du texte, Journalctl offre un moyen structuré et efficace de rechercher, filtrer et afficher les données du journal en temps réel. Cela peut aider à diagnostiquer des problèmes ou à surveiller l’état du système.

Pour ce faire, Journalctl stocke les fichiers journaux au format binaire, car les fichiers journaux binaires sont plus compacts et efficaces que leurs équivalents textuels. Cela permet une recherche plus rapide et plus efficace d’événements ou d’informations spécifiques dans les fichiers journaux, étant donné la grande quantité de données journalisées. De plus, les fichiers journaux binaires offrent une meilleure sécurité que les journaux textuels en raison de leur structure et de leur chiffrement, car les formats binaires rendent plus difficile la manipulation des données des journaux.

Ajuster l’espace de stockage des fichiers journaux

Journalctl permet de limiter et de configurer l’espace de stockage que les fichiers journaux occupent sur le disque dur. Cela se fait via les paramètres du service systemd-journald. Les paramètres de configuration sont enregistré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épertoire système.
  • RuntimeMaxUse : limite l’espace disque pour les journaux dans le répertoire temporaire.

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 différentes unités comme K (kilooctets), M (mégaoctets), G (gigaoctets) ou T (terraoctets). Après avoir édité le fichier de configuration, systemd-journald doit être redémarré pour que les modifications 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 suffisante pour stocker les données importantes du journal, mais qu’elle ne consomme pas trop d’espace disque. Notez que les anciens journaux sont automatiquement supprimés lorsque la limite est atteinte.

Déterminer l’occupation du disque dur

Avant d’ajuster l’espace disque pour les fichiers journaux, vous pouvez d’abord vérifier combien d’espace disque est actuellement 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 facilement les anciennes entrées de journal. Pour cela, deux possibilités sont disponibles :

--vacuum-size permet de réduire la taille de votre journal en spécifiant une taille. Dans ce cas, les anciennes entrées sont supprimé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écifiant un délai de blocage avec l’option --vacuum-time. Dans ce cas, toutes les entrées qui dépassent le temps indiqué seront supprimé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 Journalctl ?

Une des fonctions puissantes de Journalctl est la possibilité de filtrer les entrées de logs selon différents critères. Cette fonction permet de rechercher de manière ciblée des informations pertinentes et ainsi d’identifier plus rapidement les problèmes. Nous présentons ci-dessous quelques-unes des options de filtrage les plus courantes de Journalctl.

Afficher les journaux

En tapant la commande journalctl, les entrées de journaux pour le système actuel sont affichées dans l’ordre chronologique inverse. Saisissez journalctl -f ou journalctl --follow pour afficher les entrées en temps réel. Les nouvelles entrées sont automatiquement 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 probablement s’afficher une quantité incalculable de données, pouvant comporter des dizaines ou des centaines de milliers de lignes. Pour trouver plus rapidement ce que vous cherchez, il est possible de filtrer davantage les protocoles à l’aide de différentes commandes Linux.

Filtrer par heure

Avec Journalctl, les journaux peuvent être filtrés en fonction d’une heure précise afin de pouvoir les parcourir plus efficacement pour trouver des informations pertinentes.

Filtrage par boot

Le filtrage des journaux par boot (ou démarrage) est particulièrement utile pour vérifier des événements système spécifiques à un moment donné ou pendant un scénario de démarrage particulier. Cela facilite le diagnostic des problèmes, car les entrées du journal peuvent ainsi se limiter à un état ou à une configuration spécifique du système.

  1. Boot actuel : avec journalctl -b, toutes les entrées de journal collectées depuis le dernier redémarrage 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écifique. Par exemple, si vous tapez journalctl -b 1, le démarrage précédent sera affiché.
  3. Liste de tous les démarrages disponibles : la commande journalctl --list-boots affiche une liste des opérations de démarrage disponibles avec leurs ID respectifs. Vous pouvez utiliser l’ID de démarrage souhaité pour afficher les journaux d’un démarrage particulier.

Alors que sur certaines distributions Linux, l’enregistrement des démarrages 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épertoire dans lequel le journal doit être enregistré en tapant sudo mkdir -p /var/log/journal.

Vous pouvez aussi éditer le fichier de configuration du journal avec sudo nano /etc/systemd/journald.conf. Ensuite, sous [Journal], mettez l’option Storage= sur persistent pour activer la journalisation persistante :

. . .
[Journal]
Storage=persistent
bash

Filtrer par fenêtre de temps

Il peut parfois être nécessaire d’afficher les entrées du journal pour une période donnée. Journalctl propose les options --since et --until qui permettent 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 combinaison 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

Journalctl 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 Journalctl est également extrêmement utile, car il permet de cibler la recherche d’informations pertinentes et de se concentrer sur certains aspects des journaux système. Cela permet notamment d’effectuer un diagnostic efficace des erreurs, une détection précoce des problèmes de sécurité et une surveillance rapide des performances.

Filtrage par priorité

Pour filtrer les journaux avec Journalctl 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 correspondante. 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 (avertissement)
  • 5 : notice (note)
  • 6 : info (information)
  • 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 uniquement les entrées de journal dont la priorité est « err » (Error) ou supérieure :

journalctl -p err
bash

Filtrage par unité

Filtrer les journaux par unité avec Journalctl est particulièrement utile si vous voulez vous concentrer sur des services ou des processus spécifiques. 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 temporelles 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

Journalctl permet de fusionner des enregistrements de différentes unités. Par exemple, si votre processus Nginx est connecté à une unité PHP-FPM, les enregistrements des deux peuvent être fusionnés dans l’ordre chronologique. La commande à utiliser est la suivante :

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

Filtrer par processus, utilisateur ou ID de groupe

Journalctl permet également de filtrer les entrées du journal par processus, utilisateur ou ID de groupe. Si vous connaissez le PID exact du processus que vous voulez rechercher, 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é journalisées par un utilisateur ou un groupe spécifique. Si votre serveur Web a par exemple pour nom « www-data », l’ID de l’utilisateur peut être trouvé de la manière suivante :

id -u www-data
33
bash

Une fois que vous connaissez 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 enregistré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 composants

Le filtrage par champ de composants est extrêmement utile pour mettre l’accent sur des applications, services ou processus spécifiques. Le champ de composants est généralement utilisé par différents services ou composants logiciels pour identifier des informations spécifiques dans les protocoles. Ce type de filtrage permet de cibler les entrées du journal sur un composant, une application ou une unité de service spécifique. Par exemple, pour filtrer les entrées contenant le fichier exécutable 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 Journalctl est une méthode efficace pour analyser des informations spécifiques sur le fonctionnement du noyau dans un système Linux. Les messages du noyau peuvent fournir des indications sur des problèmes matériels, des conflits de pilotes ou d’autres événements 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 alternatif peuvent être filtrés avec les indicateurs de sélection de démarrage déjà connus. Par exemple, si vous voulez voir les messages du noyau des cinq derniers démarrages, entrez ce qui suit :

journalctl -k -b -5
bash

Modifier l’affichage du journal dans Journalctl

La personnalisation de l’affichage dans Journalctl permet aux utilisateurs de mieux cibler leurs recherches dans les journaux et d’extraire plus rapidement les informations pertinentes. 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 rapidement identifiés.

Raccourcir ou élargir la sortie

Vous pouvez personnaliser la façon dont Journalctl affiche les données. Pour cela, la sortie peut être soit raccourcie soit étendue. Par défaut, Journalctl affiche toute l’entrée dans le pager et laisse les entrées s’étendre à droite de l’écran. La sortie peut être raccourcie avec l’option --no-full :

journalctl --no-full
bash

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

journalctl -a
bash

Mettre Journalctl en sortie standard

Dans Journalctl, 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 navigation dans de longs fichiers journaux. Parfois, il peut toutefois être nécessaire d’afficher les journaux directement sur la sortie standard. Cela est possible comme suit :

journalctl --no-pager
bash

Définir les formats de sortie

Si nécessaire, il y a plusieurs options pour ajuster le format de sortie des journaux dans Journalctl. L’option -o peut être utilisée avec l’identificateur de format correspondant. 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 Journalctl :

  • cat : affiche uniquement le champ du message.
  • export : ce format binaire convient pour le transfert ou la sauvegarde.
  • json : JSON standard avec une entrée par ligne.
  • json-pretty : JSON formaté pour une meilleure lisibilité.
  • json-sse : sortie formatée JSON enveloppée, permettant d’ajouter des événements envoyés par le serveur.
  • short : sortie standard de style syslog.
  • short-iso : format standard pour afficher les horodatages ISO-8601 Wallclock.
  • short-monotonic : format standard pour l’horodatage monotone.
  • short-precise : format standard avec précision à la microseconde.
  • verbose : affiche chaque champ de journal disponible pour l’entrée correspondante.

Surveillance active du processus

Dans la surveillance active des processus avec Journalctl, l’utilitaire 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 surveillance en temps réel des événements du système et permet la réaction rapide aux problèmes qui surviennent.

Afficher les journaux actuels

L’option -n peut être utilisée pour afficher un certain nombre d’enregistrements. Cette option fonctionne exactement comme tail -n. Avec la commande suivante, les 10 derniers enregistrements sont affichés par défaut :

journalctl -n
bash

Le nombre d’entrées affichées peut être réglé individuellement, par exemple sur 20 :

journalctl -n 20
bash
Hébergement Web
Hébergement Web flexible, performant et sûr
  • Certificat SSL et protection DDoS
  • Sauvegarde et restauration des données
  • Assistance 24/7 et conseiller personnel
Cet article vous a-t-il été utile ?
Page top