Recherche de site Web

Comment utiliser Journalctl pour afficher et manipuler les journaux Systemd


Introduction

Certains des avantages les plus convaincants de systemd sont ceux impliqués dans la journalisation des processus et du système. Lors de l'utilisation d'autres outils, les journaux sont généralement dispersés dans tout le système, gérés par différents démons et processus, et peuvent être assez difficiles à interpréter lorsqu'ils couvrent plusieurs applications. systemd tente de résoudre ces problèmes en fournissant une solution de gestion centralisée pour la journalisation de tous les processus du noyau et de l'espace utilisateur. Le système qui collecte et gère ces journaux est appelé journal.

Le journal est implémenté avec le démon journald, qui gère tous les messages produits par le noyau, initrd, les services, etc. Dans ce guide, nous verrons comment utiliser le journalctl utilitaire, qui peut être utilisé pour accéder et manipuler les données contenues dans le journal.

Idée générale

L'un des moteurs du journal systemd est de centraliser la gestion des logs quelle que soit la provenance des messages. Étant donné qu'une grande partie du processus de démarrage et de la gestion des services est gérée par le processus systemd, il est logique de normaliser la manière dont les journaux sont collectés et accessibles. Le démon journald collecte les données de toutes les sources disponibles et les stocke dans un format binaire pour une manipulation simple et dynamique.

Cela nous donne un certain nombre d'avantages significatifs. En interagissant avec les données à l'aide d'un seul utilitaire, les administrateurs peuvent afficher dynamiquement les données du journal en fonction de leurs besoins. Cela peut être aussi simple que de visualiser les données de démarrage de trois démarrages précédents ou de combiner les entrées de journal de manière séquentielle à partir de deux services associés pour déboguer un problème de communication.

Stocker les données du journal dans un format binaire signifie également que les données peuvent être affichées dans des formats de sortie arbitraires en fonction de ce dont vous avez besoin pour le moment. Par exemple, pour la gestion quotidienne des journaux, vous pouvez être habitué à afficher les journaux au format standard syslog, mais si vous décidez de représenter graphiquement les interruptions de service ultérieurement, vous pouvez générer chaque entrée sous la forme d'un objet JSON pour créer il consommable à votre service graphique. Étant donné que les données ne sont pas écrites sur le disque en texte brut, aucune conversion n'est nécessaire lorsque vous avez besoin d'un format à la demande différent.

Le journal systemd peut soit être utilisé avec une implémentation syslog existante, soit remplacer la fonctionnalité syslog, selon vos besoins. Alors que le journal systemd couvrira la plupart des besoins de journalisation de l'administrateur, il peut également compléter les mécanismes de journalisation existants. Par exemple, vous pouvez avoir un serveur syslog centralisé que vous utilisez pour compiler les données de plusieurs serveurs, mais vous pouvez également souhaiter entrelacer les journaux de plusieurs services sur un seul système avec le systemdjournal. Vous pouvez faire les deux en combinant ces technologies.

Réglage de l'heure du système

L'un des avantages de l'utilisation d'un journal binaire pour la journalisation est la possibilité d'afficher les enregistrements de journal en UTC ou en heure locale à volonté. Par défaut, systemd affichera les résultats en heure locale.

Pour cette raison, avant de commencer avec le journal, nous nous assurerons que le fuseau horaire est correctement configuré. La suite systemd est en fait livrée avec un outil appelé timedatectl qui peut vous aider.

Tout d'abord, voyez quels fuseaux horaires sont disponibles avec l'option list-timezones :

  1. timedatectl list-timezones

Cela listera les fuseaux horaires disponibles sur votre système. Lorsque vous trouvez celui qui correspond à l'emplacement de votre serveur, vous pouvez le définir en utilisant l'option set-timezone :

  1. sudo timedatectl set-timezone zone

Pour vous assurer que votre machine utilise l'heure correcte maintenant, utilisez la commande timedatectl seule, ou avec l'option status. L'affichage sera le même :

  1. timedatectl status
Output
Local time: Fri 2021-07-09 14:44:30 EDT Universal time: Fri 2021-07-09 18:44:30 UTC RTC time: Fri 2021-07-09 18:44:31 Time zone: America/New_York (EDT, -0400) System clock synchronized: yes NTP service: active RTC in local TZ: no

La première ligne doit afficher l'heure correcte.

Affichage du journal de base

Pour voir les journaux que le démon journald a collectés, utilisez la commande journalctl.

Lorsqu'il est utilisé seul, chaque entrée de journal qui se trouve dans le système sera affichée dans un téléavertisseur (généralement moins) pour que vous puissiez le parcourir. Les entrées les plus anciennes seront en haut :

  1. journalctl
Output
-- Logs begin at Tue 2015-02-03 21:48:52 UTC, end at Tue 2015-02-03 22:29:38 UTC. -- Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd). Feb 03 21:48:52 localhost.localdomain kernel: audit: type=1404 audit(1423000132.274:2): enforcing=1 old_en Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/ Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 8 users, 102 roles, 4976 types, 294 bools, 1 sens, Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 83 classes, 104131 rules . . .

Vous aurez probablement des pages et des pages de données à parcourir, qui peuvent contenir des dizaines ou des centaines de milliers de lignes si systemd est sur votre système depuis longtemps. Cela montre la quantité de données disponibles dans la base de données du journal.

Le format sera familier à ceux qui sont habitués à la journalisation syslog standard. Cependant, cela collecte en fait des données à partir de plus de sources que les implémentations syslog traditionnelles ne sont capables de faire. Il inclut les journaux du processus de démarrage précoce, du noyau, de l'initrd et de l'erreur standard et de la sortie de l'application. Ils sont tous disponibles dans la revue.

Vous remarquerez peut-être que tous les horodatages affichés sont en heure locale. Ceci est disponible pour chaque entrée de journal maintenant que notre heure locale est correctement définie sur notre système. Tous les journaux sont affichés à l'aide de ces nouvelles informations.

Si vous souhaitez afficher les horodatages en UTC, vous pouvez utiliser le drapeau --utc :

  1. journalctl --utc

Filtrage des journaux par heure

Bien qu'il soit certainement utile d'avoir accès à une telle collection de données, une telle quantité d'informations peut être difficile, voire impossible, à inspecter et à traiter manuellement. Pour cette raison, l'une des fonctionnalités les plus importantes de journalctl est ses options de filtrage.

Affichage des journaux du démarrage actuel

Le plus basique d'entre eux, que vous pourriez utiliser quotidiennement, est le drapeau -b. Cela vous montrera toutes les entrées de journal qui ont été collectées depuis le dernier redémarrage.

  1. journalctl -b

Cela vous aidera à identifier et à gérer les informations pertinentes pour votre environnement actuel.

Dans les cas où vous n'utilisez pas cette fonctionnalité et affichez plus d'un jour de démarrage, vous verrez que journalctl a inséré une ligne qui ressemble à ceci chaque fois que le système s'est arrêté :

Output
. . . -- Reboot -- . . .

Cela peut être utilisé pour vous aider à séparer logiquement les informations en sessions de démarrage.

Bottes passées

Bien que vous souhaitiez généralement afficher les informations du démarrage en cours, il y a certainement des moments où les démarrages antérieurs seraient également utiles. Le journal peut enregistrer les informations de nombreux démarrages précédents, de sorte que journalctl peut être configuré pour afficher facilement les informations.

Certaines distributions permettent d'enregistrer les informations de démarrage précédentes par défaut, tandis que d'autres désactivent cette fonctionnalité. Pour activer les informations de démarrage persistantes, vous pouvez soit créer le répertoire pour stocker le journal en tapant :

  1. sudo mkdir -p /var/log/journal

Ou vous pouvez modifier le fichier de configuration du journal :

  1. sudo nano /etc/systemd/journald.conf

Sous la section [Journal], définissez l'option Storage= sur \persistent pour activer la journalisation persistante :

. . .
[Journal]
Storage=persistent

Lorsque l'enregistrement des démarrages précédents est activé sur votre serveur, journalctl fournit quelques commandes pour vous aider à travailler avec les démarrages en tant qu'unité de division. Pour voir les démarrages connus de journald, utilisez l'option --list-boots avec journalctl :

journalctl --list-boots
Output
-2 caf0524a1d394ce0bdbcff75b94444fe Tue 2015-02-03 21:48:52 UTC—Tue 2015-02-03 22:17:00 UTC -1 13883d180dc0420db0abcb5fa26d6198 Tue 2015-02-03 22:17:03 UTC—Tue 2015-02-03 22:19:08 UTC 0 bed718b17a73415fade0e4e7f4bea609 Tue 2015-02-03 22:19:12 UTC—Tue 2015-02-03 23:01:01 UTC

Cela affichera une ligne pour chaque démarrage. La première colonne est le décalage du démarrage qui peut être utilisé pour référencer facilement le démarrage avec journalctl. Si vous avez besoin d'une référence absolue, l'ID de démarrage se trouve dans la deuxième colonne. Vous pouvez indiquer l'heure à laquelle la session de démarrage fait référence avec les deux spécifications de temps répertoriées vers la fin.

Pour afficher les informations de ces démarrages, vous pouvez utiliser les informations de la première ou de la deuxième colonne.

Par exemple, pour voir le journal du démarrage précédent, utilisez le pointeur relatif -1 avec le drapeau -b :

  1. journalctl -b -1

Vous pouvez également utiliser l'ID de démarrage pour rappeler les données d'un démarrage :

  1. journalctl -b caf0524a1d394ce0bdbcff75b94444fe

Fenêtres horaires

Bien qu'il soit extrêmement utile de voir les entrées de journal au démarrage, vous souhaiterez souvent demander des fenêtres de temps qui ne correspondent pas bien aux démarrages du système. Cela peut être particulièrement vrai lorsqu'il s'agit de serveurs de longue durée avec une disponibilité importante.

Vous pouvez filtrer par des limites de temps arbitraires en utilisant les options --since et --until, qui restreignent les entrées affichées à celles après ou avant l'heure donnée, respectivement.

Les valeurs temporelles peuvent se présenter sous différents formats. Pour les valeurs de temps absolu, vous devez utiliser le format suivant :

  1. YYYY-MM-DD HH:MM:SS

Par exemple, nous pouvons voir toutes les entrées depuis le 10 janvier 2015 à 17h15 en tapant :

  1. journalctl --since "2015-01-10 17:15:00"

Si les composants du format ci-dessus sont laissés de côté, certaines valeurs par défaut seront appliquées. Par exemple, si la date est omise, la date actuelle sera supposée. Si le composant de l'heure est manquant, \00:00:00 (minuit) sera remplacé. Le champ des secondes peut également être laissé par défaut à \00:

  1. journalctl --since "2015-01-10" --until "2015-01-11 03:00"

Le journal comprend également certaines valeurs relatives et des raccourcis nommés. Par exemple, vous pouvez utiliser les mots \hier, \aujourd'hui, \demain ou \maintenant. Vous pouvez faire des temps relatifs en ajoutant \- ou \+ à une valeur numérique ou en utilisant des mots comme \ago dans une construction de phrase.

Pour obtenir les données d'hier, vous pouvez taper :

  1. journalctl --since yesterday

Si vous avez reçu des rapports d'interruption de service commençant à 9 h 00 et se poursuivant jusqu'à il y a une heure, vous pouvez saisir :

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

Comme vous pouvez le voir, il est relativement simple de définir des fenêtres de temps flexibles pour filtrer les entrées que vous souhaitez voir.

Filtrage par intérêt du message

Ci-dessus, nous avons appris quelques façons de filtrer les données du journal en utilisant des contraintes de temps. Dans cette section, nous verrons comment filtrer en fonction du service ou du composant qui vous intéresse. Le journal systemd propose différentes manières de procéder.

Par unité

La manière la plus utile de filtrer est peut-être l'unité qui vous intéresse. Nous pouvons utiliser l'option -u pour filtrer de cette manière.

Par exemple, pour voir tous les journaux d'une unité Nginx sur notre système, nous pouvons taper :

  1. journalctl -u nginx.service

En règle générale, vous souhaiterez probablement également filtrer par heure afin d'afficher les lignes qui vous intéressent. Par exemple, pour vérifier comment le service fonctionne aujourd'hui, vous pouvez taper :

  1. journalctl -u nginx.service --since today

Ce type de focalisation devient extrêmement utile lorsque vous profitez de la capacité du journal à entrelacer les enregistrements de différentes unités. Par exemple, si votre processus Nginx est connecté à une unité PHP-FPM pour traiter du contenu dynamique, vous pouvez fusionner les entrées des deux dans l'ordre chronologique en spécifiant les deux unités :

  1. journalctl -u nginx.service -u php-fpm.service --since today

Cela peut faciliter la détection des interactions entre différents programmes et systèmes de débogage au lieu de processus individuels.

Par ID de processus, d'utilisateur ou de groupe

Certains services génèrent une variété de processus enfants pour effectuer le travail. Si vous avez repéré le PID exact du processus qui vous intéresse, vous pouvez également le filtrer.

Pour ce faire, nous pouvons filtrer en spécifiant le champ _PID. Par exemple si le PID qui nous intéresse est 8088, nous pourrions taper :

  1. journalctl _PID=8088

À d'autres moments, vous souhaiterez peut-être afficher toutes les entrées enregistrées à partir d'un utilisateur ou d'un groupe spécifique. Cela peut être fait avec les filtres _UID ou _GID. Par exemple, si votre serveur Web s'exécute sous l'utilisateur www-data, vous pouvez trouver l'ID utilisateur en tapant :

  1. id -u www-data
Output
33

Ensuite, vous pouvez utiliser l'ID renvoyé pour filtrer les résultats du journal :

  1. journalctl _UID=33 --since today

Le journal systemd a de nombreux champs qui peuvent être utilisés pour le filtrage. Certains d'entre eux sont transmis par le processus en cours de journalisation et certains sont appliqués par journald en utilisant les informations qu'il recueille à partir du système au moment de la journalisation.

Le trait de soulignement initial indique que le champ _PID est de ce dernier type. Le journal enregistre et indexe automatiquement le PID du processus qui se connecte pour un filtrage ultérieur. Vous pouvez découvrir tous les champs de journal disponibles en tapant :

  1. man systemd.journal-fields

Nous en discuterons certains dans ce guide. Pour l'instant cependant, nous allons passer en revue une autre option utile concernant le filtrage par ces champs. L'option -F peut être utilisée pour afficher toutes les valeurs disponibles pour un champ de journal donné.

Par exemple, pour voir pour quels identifiants de groupe le journal systemd a des entrées, vous pouvez taper :

  1. journalctl -F _GID
Output
32 99 102 133 81 84 100 0 124 87

Cela vous montrera toutes les valeurs que le journal a stockées pour le champ ID de groupe. Cela peut vous aider à construire vos filtres.

Par chemin de composant

Nous pouvons également filtrer en fournissant un emplacement de chemin.

Si le chemin mène à un exécutable, journalctl affichera toutes les entrées qui impliquent l'exécutable en question. Par exemple, pour trouver les entrées qui impliquent l'exécutable bash, vous pouvez taper :

  1. journalctl /usr/bin/bash

Habituellement, si une unité est disponible pour l'exécutable, cette méthode est plus propre et fournit de meilleures informations (entrées des processus enfants associés, etc.). Parfois, cependant, ce n'est pas possible.

Affichage des messages du noyau

Les messages du noyau, ceux qui se trouvent généralement dans la sortie dmesg, peuvent également être récupérés à partir du journal.

Pour afficher uniquement ces messages, nous pouvons ajouter les drapeaux -k ou --dmesg à notre commande :

  1. journalctl -k

Par défaut, cela affichera les messages du noyau à partir du démarrage en cours. Vous pouvez spécifier un démarrage alternatif à l'aide des indicateurs de sélection de démarrage normaux décrits précédemment. Par exemple, pour obtenir les messages d'il y a cinq démarrages, vous pouvez taper :

  1. journalctl -k -b -5

Par priorité

Un filtre qui intéresse souvent les administrateurs système est la priorité des messages. Bien qu'il soit souvent utile de consigner les informations à un niveau très détaillé, lors de l'assimilation des informations disponibles, les journaux de faible priorité peuvent être gênants et déroutants.

Vous pouvez utiliser journalctl pour afficher uniquement les messages d'une priorité spécifiée ou supérieure en utilisant l'option -p. Cela vous permet de filtrer les messages de priorité inférieure.

Par exemple, pour afficher uniquement les entrées enregistrées au niveau d'erreur ou supérieur, vous pouvez saisir :

  1. journalctl -p err -b

Cela vous montrera tous les messages marqués comme erreur, critique, alerte ou urgence. Le journal implémente les niveaux de message standard syslog. Vous pouvez utiliser le nom de la priorité ou sa valeur numérique correspondante. Dans l'ordre de priorité la plus élevée à la plus faible, il s'agit de :

  • 0 : urgence
  • 1 : alerte
  • 2 : critique
  • 3 : erreur
  • 4 : avertissement
  • 5 : avis
  • 6 : informations
  • 7 : débogage

Les numéros ou noms ci-dessus peuvent être utilisés de manière interchangeable avec l'option -p. La sélection d'une priorité affichera les messages marqués au niveau spécifié et ceux au-dessus.

Modification de l'affichage du journal

Ci-dessus, nous avons démontré la sélection des entrées par filtrage. Il existe cependant d'autres façons de modifier la sortie. Nous pouvons ajuster l'affichage journalctl pour répondre à divers besoins.

Tronquer ou développer la sortie

Nous pouvons ajuster la façon dont journalctl affiche les données en lui disant de réduire ou d'étendre la sortie.

Par défaut, journalctl affichera l'intégralité de l'entrée dans le téléavertisseur, permettant aux entrées de se dérouler à droite de l'écran. Ces informations sont accessibles en appuyant sur la touche fléchée droite.

Si vous préférez que la sortie soit tronquée, en insérant des points de suspension là où les informations ont été supprimées, vous pouvez utiliser l'option --no-full :

  1. journalctl --no-full
Output
. . . Feb 04 20:54:13 journalme sshd[937]: Failed password for root from 83.234.207.60...h2 Feb 04 20:54:13 journalme sshd[937]: Connection closed by 83.234.207.60 [preauth] Feb 04 20:54:13 journalme sshd[937]: PAM 2 more authentication failures; logname...ot

Vous pouvez également aller dans la direction opposée avec ceci et dire à journalctl d'afficher toutes ses informations, qu'elles incluent ou non des caractères non imprimables. Nous pouvons le faire avec le drapeau -a :

  1. journalctl -a

Sortie vers sortie standard

Par défaut, journalctl affiche la sortie dans un pager pour une consommation plus facile. Cependant, si vous envisagez de traiter les données avec des outils de manipulation de texte, vous souhaiterez probablement pouvoir les sortir sur la sortie standard.

Vous pouvez le faire avec l'option --no-pager :

  1. journalctl --no-pager

Celui-ci peut être acheminé immédiatement vers un utilitaire de traitement ou redirigé vers un fichier sur disque, selon vos besoins.

Formats de sortie

Si vous traitez des écritures de journal, comme mentionné ci-dessus, vous aurez probablement plus de facilité à analyser les données si elles sont dans un format plus consommable. Heureusement, le journal peut être affiché dans une variété de formats selon les besoins. Vous pouvez le faire en utilisant l'option -o avec un spécificateur de format.

Par exemple, vous pouvez générer les entrées de journal au format JSON en tapant :

  1. journalctl -b -u nginx -o json
Output
{ "__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" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" } . . .

Ceci est utile pour analyser avec des utilitaires. Vous pouvez utiliser le format json-pretty pour mieux gérer la structure des données avant de la transmettre au consommateur JSON :

  1. journalctl -b -u nginx -o json-pretty
Output
{ "__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" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" } . . .

Les formats suivants peuvent être utilisés pour l'affichage :

  • cat : affiche uniquement le champ de message lui-même.
  • export : format binaire adapté au transfert ou à la sauvegarde.
  • json : JSON standard avec une entrée par ligne.
  • json-pretty : format JSON pour une meilleure lisibilité humaine
  • json-sse : sortie au format JSON encapsulée pour rendre compatible l'ajout d'un événement envoyé par le serveur
  • court : la sortie de style syslog par défaut
  • short-iso : le format par défaut augmenté pour afficher les horodatages de l'horloge murale ISO 8601.
  • short-monotonic : le format par défaut avec des horodatages monotones.
  • short-precise : le format par défaut avec une précision à la microseconde
  • verbeux : affiche tous les champs de journal disponibles pour l'entrée, y compris ceux généralement masqués en interne.

Ces options vous permettent d'afficher les entrées de journal dans le format qui convient le mieux à vos besoins actuels.

Surveillance active des processus

La commande journalctl imite le nombre d'administrateurs qui utilisent tail pour surveiller l'activité active ou récente. Cette fonctionnalité est intégrée à journalctl, vous permettant d'accéder à ces fonctionnalités sans avoir à passer par un autre outil.

Affichage des journaux récents

Pour afficher un nombre défini d'enregistrements, vous pouvez utiliser l'option -n, qui fonctionne exactement comme tail -n.

Par défaut, il affichera les 10 entrées les plus récentes :

  1. journalctl -n

Vous pouvez spécifier le nombre d'entrées que vous souhaitez voir avec un nombre après le -n :

  1. journalctl -n 20

Suivi des journaux

Pour suivre activement les journaux au fur et à mesure de leur écriture, vous pouvez utiliser le drapeau -f. Encore une fois, cela fonctionne comme vous pouvez vous y attendre si vous avez de l'expérience avec tail -f :

  1. journalctl -f

Pour quitter cette commande, tapez CTRL+C.

Maintenance des journaux

Vous vous demandez peut-être quel est le coût du stockage de toutes les données que nous avons vues jusqu'à présent. De plus, il peut être intéressant de nettoyer certains journaux plus anciens et de libérer de l'espace.

Recherche de l'utilisation actuelle du disque

Vous pouvez connaître la quantité d'espace que le journal occupe actuellement sur le disque en utilisant le drapeau --disk-usage :

  1. journalctl --disk-usage
Output
Archived and active journals take up 8.0M in the file system.

Suppression des anciens journaux

Si vous souhaitez réduire votre journal, vous pouvez le faire de deux manières différentes (disponible avec systemd version 218 et ultérieure).

Si vous utilisez l'option --vacuum-size, vous pouvez réduire votre journal en indiquant une taille. Cela supprimera les anciennes entrées jusqu'à ce que l'espace total du journal occupé sur le disque atteigne la taille demandée :

  1. sudo journalctl --vacuum-size=1G

Une autre façon de réduire le journal consiste à fournir une heure limite avec l'option --vacuum-time. Toutes les entrées au-delà de ce délai sont supprimées. Cela vous permet de conserver les entrées qui ont été créées après un certain temps.

Par exemple, pour conserver les entrées de l'année précédente, vous pouvez saisir :

  1. sudo journalctl --vacuum-time=1years

Limitation de l'expansion du journal

Vous pouvez configurer votre serveur pour limiter l'espace que le journal peut occuper. Cela peut être fait en éditant le fichier /etc/systemd/journald.conf.

Les éléments suivants peuvent être utilisés pour limiter la croissance du journal :

  • SystemMaxUse= : spécifie l'espace disque maximal pouvant être utilisé par le journal dans le stockage persistant.
  • SystemKeepFree= : spécifie la quantité d'espace que le journal doit laisser libre lors de l'ajout d'entrées de journal au stockage persistant.
  • SystemMaxFileSize= : contrôle la taille maximale des fichiers journaux individuels dans le stockage persistant avant la rotation.
  • RuntimeMaxUse= : spécifie l'espace disque maximal pouvant être utilisé dans le stockage volatile (dans le système de fichiers /run).
  • RuntimeKeepFree= : spécifie la quantité d'espace à réserver pour d'autres utilisations lors de l'écriture de données dans un stockage volatile (au sein du système de fichiers /run).
  • RuntimeMaxFileSize= : spécifie la quantité d'espace qu'un fichier journal individuel peut occuper dans le stockage volatile (au sein du système de fichiers /run) avant d'être mis en rotation.

En définissant ces valeurs, vous pouvez contrôler la façon dont journald consomme et préserve l'espace sur votre serveur. Gardez à l'esprit que SystemMaxFileSize et RuntimeMaxFileSize cibleront les fichiers archivés pour atteindre les limites indiquées. Il est important de s'en souvenir lors de l'interprétation du nombre de fichiers après une opération de nettoyage.

Conclusion

Comme vous pouvez le constater, le journal systemd est incroyablement utile pour collecter et gérer les données de votre système et de vos applications. La plus grande partie de la flexibilité provient des nombreuses métadonnées enregistrées automatiquement et de la nature centralisée du journal. La commande journalctl permet de profiter facilement des fonctionnalités avancées du journal et d'effectuer une analyse approfondie et un débogage relationnel des différents composants de l'application.

Articles connexes: