Comment utiliser Journalctl pour afficher et manipuler des journaux Systemd

introduction

Certains des avantages les plus convaincants desystemd sont ceux impliqués dans la journalisation des processus et du système. Lorsque vous utilisez 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 des utilisateurs. Le système qui collecte et gère ces journaux est appelé journal.

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

Idée générale

L'une des impulsions derrière le journalsystemd est de centraliser la gestion des logs quel que soit l'origine 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 processussystemd, il est logique de normaliser la manière dont les journaux sont collectés et accessibles. Le démonjournald 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 importants. En interagissant avec les données à l'aide d'un seul utilitaire, les administrateurs peuvent afficher de manière dynamique les données du journal en fonction de leurs besoins. Cela peut être aussi simple que d'afficher les données d'amorçage de trois amorces précédentes ou de combiner les entrées de journal de manière séquentielle à partir de deux services associés pour résoudre un problème de communication.

Le stockage des données de journal au format binaire signifie également que les données peuvent être affichées dans des formats de sortie arbitraires en fonction de vos besoins actuels. Par exemple, pour la gestion quotidienne des journaux, vous pouvez être habitué à afficher les journaux au format standardsyslog, mais si vous décidez de représenter graphiquement les interruptions de service plus tard, vous pouvez générer chaque entrée en tant qu'objet JSON pour la rendre consommable à votre service graphique. Étant donné que les données ne sont pas écrites en texte brut sur le disque, aucune conversion n'est nécessaire si vous avez besoin d'un format à la demande différent.

Le journalsystemd peut être utilisé avec une implémentation desyslog existante, ou il peut remplacer la fonctionnalitésyslog, selon vos besoins. Bien que le journal desystemd couvre 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 serveursyslog 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 journalsystemd. Vous pouvez faire les deux en combinant ces technologies.

Réglage de l'heure 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 au format UTC ou local, à volonté. Par défaut,systemd affichera les résultats en heure locale.

Pour cette raison, avant de commencer avec le journal, nous allons nous assurer que le fuseau horaire est configuré correctement. La suitesystemd est en fait fournie avec un outil appelétimedatectl qui peut vous aider.

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

timedatectl list-timezones

Ceci 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'optionset-timezone:

sudo timedatectl set-timezone zone

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

timedatectl status
      Local time: Thu 2015-02-05 14:08:06 EST
  Universal time: Thu 2015-02-05 19:08:06 UTC
        RTC time: Thu 2015-02-05 19:08:06
       Time zone: America/New_York (EST, -0500)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

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

Affichage de base du journal

Pour voir les journaux que le démonjournald a collectés, utilisez la commandejournalctl.

Lorsqu'elle est utilisée seule, chaque entrée de journal qui est dans le système sera affichée dans un pager (généralementless) pour que vous puissiez parcourir. Les entrées les plus anciennes seront en haut:

journalctl
-- 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 faire des dizaines ou des centaines de milliers de lignes sisystemd est sur votre système depuis longtemps. Cela montre combien de données sont disponibles dans la base de données du journal.

Le format sera familier à ceux qui sont habitués à la journalisation standard desyslog. Cependant, cela collecte en fait des données à partir de plus de sources que les implémentations traditionnelles desyslogne sont capables de le faire. Il inclut les journaux du processus de démarrage initial, du noyau, de initrd et des erreurs standard d'application et de sortie. Ce sont tous disponibles dans le journal.

Vous remarquerez peut-être que tous les horodatages affichés sont à l'heure locale. Cette option 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 en utilisant cette nouvelle information.

Si vous souhaitez afficher les horodatages en UTC, vous pouvez utiliser l'indicateur--utc:

journalctl --utc

Filtrage des journaux par heure

Avoir accès à une telle collection de données est certes utile, mais une telle quantité d’informations peut être difficile, voire impossible, à inspecter et à traiter mentalement. Pour cette raison, l'une des fonctionnalités les plus importantes dejournalctl est ses options de filtrage.

Affichage des journaux à partir du démarrage actuel

Le plus basique de ceux que vous pourriez utiliser quotidiennement est l'indicateur-b. Cela vous montrera toutes les entrées de journal qui ont été collectées depuis le dernier redémarrage.

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 quejournalctl a inséré une ligne qui ressemble à ceci chaque fois que le système tombe en panne:

. . .

-- Reboot --

. . .

Ceci 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 actuel, il est certain que des démarrages passés seraient également utiles. Le journal peut enregistrer les informations de nombreux démarrages précédents, de sorte quejournalctl peut être amené à afficher facilement les informations.

Certaines distributions permettent de sauvegarder 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 persistant, vous pouvez créer le répertoire dans lequel stocker le journal en tapant:

sudo mkdir -p /var/log/journal

Ou vous pouvez éditer le fichier de configuration du journal:

sudo nano /etc/systemd/journald.conf

Dans la section[Journal], définissez l'optionStorage= sur «persistent» pour activer la journalisation persistante:

/etc/systemd/journald.conf

. . .
[Journal]
Storage=persistent

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

journalctl --list-boots
-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 avecjournalctl. 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 se réfère 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 l'indicateur-b:

journalctl -b -1

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

journalctl -b caf0524a1d394ce0bdbcff75b94444fe

Time Windows

Bien qu'il soit extrêmement utile de consulter les entrées de journal au démarrage, vous souhaiterez souvent demander des fenêtres dont la durée ne correspond pas bien au démarrage du système. Cela peut être particulièrement vrai lorsque vous traitez avec des serveurs de longue durée avec une disponibilité importante.

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

Les valeurs de temps peuvent entrer dans une variété de formats. Pour les valeurs de temps absolues, vous devez utiliser le format suivant:

YYYY-MM-DD HH:MM:SS

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

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

Si les composants du format ci-dessus sont laissés, certaines valeurs par défaut seront appliquées. Par exemple, si la date est omise, la date actuelle sera utilisée. Si la composante heure est manquante, «00:00:00» (minuit) sera remplacé. Le champ des secondes peut également être laissé à «00» par défaut:

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

Le journal comprend également des valeurs relatives et des raccourcis nommés. Par exemple, vous pouvez utiliser les mots «hier», «aujourd'hui», «demain» ou «maintenant». Vous faites des temps relatifs en ajoutant «-» ou «+» à une valeur numérotée ou en utilisant des mots tels que «il y a» dans une construction de phrase.

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

journalctl --since yesterday

Si vous avez reçu des rapports signalant une interruption de service débutant à 9h00 et se poursuivant il y a une heure, vous pouvez taper:

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

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

Filtrage par intérêt de message

Nous avons appris ci-dessus que vous pouvez 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 desystemd propose différentes manières de procéder.

Par unité

La méthode de filtrage la plus utile est peut-être celle 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:

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 le fonctionnement actuel du service, vous pouvez taper:

journalctl -u nginx.service --since today

Ce type d’attention devient extrêmement utile lorsque vous tirez parti de la capacité du journal à entrelacer des 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 en ordre chronologique en spécifiant les deux unités:

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

Cela facilite beaucoup la tâche de repérer les interactions entre différents programmes et systèmes de débogage au lieu de processus individuels.

Par processus, utilisateur ou identifiant de groupe

Certains services génèrent une variété de processus enfants pour faire le travail. Si vous avez recherché le PID exact du processus qui vous intéresse, vous pouvez également filtrer par celui-ci.

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:

journalctl _PID=8088

À d'autres moments, vous pouvez souhaiter afficher toutes les entrées enregistrées 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'utilisateurwww-data, vous pouvez trouver l'ID utilisateur en tapant:

id -u www-data
33

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

journalctl _UID=33 --since today

Le journalsystemd contient de nombreux champs qui peuvent être utilisés pour le filtrage. Certains d'entre eux sont transmis à partir du processus en cours de journalisation et certains sont appliqués parjournald en utilisant les informations qu'il recueille du système au moment de l'enregistrement.

Le trait de soulignement au début 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 trouver tous les champs de journal disponibles en tapant:

man systemd.journal-fields

Nous en discuterons certains dans ce guide. Pour l'instant cependant, nous allons examiner une option plus 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 ID de groupe le journalsystemd contient des entrées, vous pouvez taper:

journalctl -F _GID
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écutablebash, vous pouvez taper:

journalctl /usr/bin/bash

Généralement, 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 généralement trouvés dans la sortie dedmesg, peuvent également être récupérés dans le journal.

Pour n'afficher que ces messages, nous pouvons ajouter les indicateurs-k ou--dmesg à notre commande:

journalctl -k

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

journalctl -k -b -5

Par priorité

Un filtre qui intéresse souvent les administrateurs système est la priorité du message. Bien qu'il soit souvent utile de consigner des informations à un niveau très détaillé, les journaux à faible priorité peuvent être source de confusion et de confusion lors de la digestion des informations disponibles.

Vous pouvez utiliserjournalctl pour afficher uniquement les messages d'une priorité spécifiée ou supérieure à l'aide de 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 plus, vous pouvez taper:

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 standardsyslog. Vous pouvez utiliser le nom de priorité ou la valeur numérique correspondante. Par ordre de priorité, la priorité la plus élevée est la suivante:

  • 0: émergent

  • 1: alerte

  • 2: crit

  • 3: err

  • 4: avertissement

  • 5: avis

  • 6: info

  • 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 moyens de modifier la sortie. Nous pouvons ajuster l'affichage dejournalctl pour répondre à divers besoins.

Tronquer ou développer la sortie

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

Par défaut,journalctl affichera l'entrée entière dans le téléavertisseur, permettant aux entrées de suivre à droite de l'écran. Cette information peut être consultée en appuyant sur la flèche droite.

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

journalctl --no-full
. . .

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 cela et dire àjournalctl d'afficher toutes ses informations, qu'elles contiennent ou non des caractères non imprimables. Nous pouvons le faire avec le drapeau-a:

journalctl -a

Sortie vers sortie standard

Par défaut,journalctl affiche la sortie dans un téléavertisseur pour une consommation plus facile. Si vous prévoyez de traiter les données avec des outils de manipulation de texte, vous souhaiterez probablement pouvoir exporter en sortie standard.

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

journalctl --no-pager

Cela peut être transféré immédiatement dans un utilitaire de traitement ou redirigé vers un fichier sur disque, selon vos besoins.

Formats de sortie

Comme indiqué ci-dessus, si vous traitez des écritures au journal, vous aurez plus de facilité à analyser les données si elles sont dans un format plus utilisable. Heureusement, le journal peut être affiché dans une variété de formats si nécessaire. 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:

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" : "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 formatjson-pretty pour mieux gérer la structure de données avant de la transmettre au consommateur JSON:

journalctl -b -u nginx -o json-pretty
{
    "__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 l'ajout d'un événement envoyé par le serveur compatible

  • short: sortie de stylesyslog par défaut

  • short-iso: le format par défaut a été augmenté pour afficher les horodatages d'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 de l'ordre de la microseconde

  • verbose: 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 écritures au format qui convient le mieux à vos besoins actuels.

Surveillance active des processus

La commandejournalctl imite le nombre d'administrateurs qui utilisenttail 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 à diriger vers 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 commetail -n.

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

journalctl -n

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

journalctl -n 20

Suivre les journaux

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

journalctl -f

Journal de maintenance

Vous vous demandez peut-être combien il en coûtera de stocker toutes les données que nous avons vues jusqu'à présent. En outre, vous pouvez être intéressé par le nettoyage de certains journaux plus anciens et par la libération d’espace.

Recherche de l'utilisation actuelle du disque

Vous pouvez trouver la quantité d'espace que le journal occupe actuellement sur le disque en utilisant l'indicateur--disk-usage:

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

Suppression d'anciens journaux

Si vous souhaitez réduire votre journal, vous pouvez le faire de deux manières différentes (disponible avecsystemd 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 de journal total utilisé sur le disque atteigne la taille demandée:

sudo journalctl --vacuum-size=1G

Une autre façon de réduire le journal est de fournir une heure limite avec l'option--vacuum-time. Toutes les entrées après cette heure sont supprimées. Cela vous permet de conserver les entrées créées après une heure spécifique.

Par exemple, pour conserver les entrées de la dernière année, vous pouvez taper:

sudo journalctl --vacuum-time=1years

Limiter l'expansion du journal

Vous pouvez configurer votre serveur pour limiter l'espace occupé par le journal. 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 des fichiers journaux individuels pouvant augmenter dans le stockage persistant avant la rotation.

  • RuntimeMaxUse=: spécifie l'espace disque maximal qui peut être utilisé dans le stockage volatile (dans le système de fichiers/run).

  • RuntimeKeepFree=: spécifie la quantité d'espace à mettre de côté pour d'autres utilisations lors de l'écriture de données dans le stockage volatile (dans le système de fichiers/run).

  • RuntimeMaxFileSize=: spécifie la quantité d'espace qu'un fichier journal individuel peut occuper dans le stockage volatile (dans le système de fichiers/run) avant d'être tourné.

En définissant ces valeurs, vous pouvez contrôler la façon dontjournald consomme et préserve l'espace sur votre serveur. Gardez à l'esprit queSystemMaxFileSize etRuntimeMaxFileSize cibleront les fichiers archivés pour atteindre les limites indiquées. Ceci est important à retenir lors de l'interprétation du nombre de fichiers après une opération d'aspiration.

Conclusion

Comme vous pouvez le voir, le journalsystemd est incroyablement utile pour collecter et gérer les données de votre système et de vos applications. La majeure partie de la flexibilité provient des métadonnées étendues automatiquement enregistrées et de la nature centralisée du journal. La commandejournalctl permet de tirer facilement parti 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.