Introduction au Systemd Journal

Introduction au Systemd Journal

Systemd est aujourd'hui le système d'initial adopté par presque toutes les distributions Linux, de Red Hat Enterprise Linux à Debian et Ubuntu. L'une des choses qui ont fait de Systemd la cible de nombreux critiques, c'est qu'elle essaie d'être bien plus qu'un simple système d'initial et essaie de réinventer certains sous-systèmes Linux.

Le système de journalisation traditionnel utilisé sur Linux, par exemple était rsyslog, Une version moderne du traditionnel syslog. SystemD a introduit son propre système de journalisation: il est implémenté par un démon, journal, qui stocke les journaux au format binaire en un «journal», qui peut être interrogé par le journalctl utilitaire.

Dans ce tutoriel, nous apprendrons certains paramètres que nous pouvons utiliser pour modifier le journal Comportement des démon et quelques exemples de comment interroger le journal et formater la sortie résultant de ces requêtes.

Dans ce tutoriel, vous apprendrez:

  • Comment modifier les paramètres de revues par défaut
  • Comment JournalD peut coexister avec Syslog
  • Comment interroger le journal et certaines façons de formater la sortie des requêtes

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Une distribution Linux utilisant SystemD (presque toutes)
Logiciel Aucun logiciel spécifique n'est nécessaire
Autre Privilèges racine de modifier (éventuellement) les configurations par défaut
Conventions # - Commands Linux à exécuter avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Commands Linux à exécuter en tant qu'utilisateur non privilégié régulier

Fichier de configuration JournalD

Le comportement du journal le démon peut être modifié en modifiant les paramètres dans son fichier de configuration: / etc / systemd / journald.confli. La modification directe de ce fichier n'est pas recommandée; Au lieu de cela, nous devons créer des fichiers de configuration distincts contenant les paramètres que nous avons l'intention de modifier, les enregistrer avec le .confli extension et placez-les à l'intérieur du / etc / systemd / journald.confli.d annuaire.

Les fichiers placés à l'intérieur du / etc / systemd / journald.confli.d Le répertoire a une plus grande priorité que / etc / systemd / journald.confli: ils sont triés par leur nom dans ordre lexicographique et analysé dans cet ordre, le tout après le fichier principal. Dans le cas où le même paramètre d'option existe dans plus d'un fichier, le dernier à analyser sera efficace.

Le / etc / systemd / Jourlnald.confli Le fichier, par défaut, contient une liste commentée d'options à l'intérieur du [Journal] Strophe: Ils représentent les valeurs par défaut utilisées au moment de la compilation (le contenu ci-dessous provient d'un système Fedora):

[Journal] # Storage = Auto # Compress = Yes # Seal = Yes # SplitMode = UID # SyncIntervalSec = 5M # RatelimiTinterValSec = 30S # RateliMitSt = 10000 # SystemMaxuse = # SystemKeepFree = # SystemMaxFileSize = # SystemMaxFiles = 100 # RuntimeMaSUSE = # runTimeEnetFree = # # RuntimeMaxFileSize = # runtimeMaxFiles = 100 # maxretentionsec = # maxFilesEC = 1Month # ForwardToSysLog = no # usinetOKMSG = no # ForwardToConSole = no # ForwardTowall = Yes # ttypath = / dev / console # maxLevelSGL = DEBUG # maxleveLSysLog = Debug # maxlevelkmsg = now MaxLevelConsole = info # maxlevelwall = émerge # linemax = 48k # readkmsg = oui # audit = oui 


Voyons quelle est la signification de certaines de ces options, et comment ils peuvent changer le comportement du journal démon.

L'option «stockage»

La première option que nous rencontrons dans le fichier est Stockage. Cette option contrôle où les données du journal sont stockées. La valeur par défaut utilisée au moment de la compilation est ici auto, Mais il est possible de choisir parmi:

  • volatil
  • persistant
  • auto
  • aucun

Si nous utilisons volatil Comme la valeur de cette option, les données du journal ne seront stockées qu'en mémoire / Run / Log / Journal (/courir est un TMPFS: son contenu est stocké en mémoire), donc il ne survivra pas à un redémarrage du système.

Si persistant est utilisé à la place, les données du journal seront stockées sur disque, sous / var / log / journal, qui est créé s'il n'existe pas. Si pour une raison quelconque, le disque n'est pas écrit, cependant, / Run / Log / Journal est utilisé comme une secours.

Le auto valeur pour le Stockage L'option, qui ici est utilisée par défaut, fonctionne essentiellement comme persistant dans le sens où lorsqu'il est utilisé, les données du journal sont stockées sous / var / log / journal. La différence est que si le chemin n'existe pas, il n'est pas créé et que les journaux ne seront stockés qu'en mémoire.

Enfin, si le aucun la valeur est utilisée, tout le stockage est désactivé: lors du transfert vers d'autres systèmes de journalisation tels que syslog fonctionnera toujours, toutes les données reçues seront supprimées.

L'option «compresser»

L'option «compresser» contrôle si les données dépassant le seuil de 512 octets est comprimé avant d'être stocké sur le disque. Cette option accepte deux types de valeurs: un booléen Comme dans le cas ci-dessus (Oui), ou un nombre qui définit le seuil de compression lui-même. Si ce dernier est fourni, la compression est activée implicitement. La valeur de seuil est, par défaut, exprime en octets, mais le K, M ou g Les suffixes peuvent être utilisés à la place.

L'option «Forwardtosyslog»

Comme déjà mentionné, à l'ère pré-système, les journaux gérés par le syslog Système de journalisation (rsyslog en fait). Ce système de journalisation est en mesure de transmettre des journaux à de nombreuses destinations, comme des fichiers texte, des terminaux ou même d'autres machines sur le réseau. Systemd a implémenté son propre système de journalisation, qui est l'objet de ce tutoriel: journal.

Les deux systèmes peuvent coexister (cela est parfois nécessaire car JournalD manque certaines fonctionnalités comme journalisation centralisée, Ou tout simplement parce que nous, en tant qu'administrateurs, pouvons aimer les journaux d'être stockés dans des fichiers texte plutôt que dans le format binaire, afin qu'ils puissent être manipulés avec des outils UNIX standard).

Ce Avant-Tosyslog L'option prend un booléen Valeur: si réglé sur Oui, Les messages seront transmis à la / run / systemd / journal / syslog douille, où peut être lue par syslog. Ce comportement peut également être défini au démarrage via le systemd.journal.avant_to_syslog option.

Des options similaires peuvent être utilisées pour transférer les messages pour kmsg (tampon de journal du noyau), pour consoler ou «mur» (envoyé en tant que messages de journal aux utilisateurs connectés). Seul ce dernier est défini sur Oui par défaut.

Interroger le journal

L'outil que nous pouvons utiliser pour examiner les journaux système et interroger le journal SystemD est journalctl. Si la commande est appelée sans autre paramètres, tout le contenu du journal est affiché. Heureusement, plusieurs stratégies peuvent être implémentées pour filtrer les journaux. Voyons certains d'entre eux.

Filtrage des messages par unités

L'une des options les plus utiles que nous pouvons passer journalctl est -u, qui est la version courte de --unité. Avec cette option, nous pouvons filtrer le contenu du journal afin que seuls les messages du systemd-unit passé comme l'argument de l'option est renvoyé. Par exemple, pour afficher uniquement les messages provenant du Gestionnaire de réseau.service unité, nous pouvons courir:

$ journalctl -u NetworkManager - Les journaux commencent au merde 2020-07-01 21:47:23 CEST, fin à samedi 2020-07-25 15:26:59 CEST. -- 01 juillet 21:48:07 ERU Systemd [1]: Démarrage du gestionnaire de réseau… 01 juillet 21:48:07 ERU NetworkManager [1579]: [1593632887.7408] NetworkManager (version 1.22.10-1.FC32) commence… (pour la première fois) 01 juillet 21:48:07 ERU NetworkManager [1579]: [1593632887.7413] Lire config: / etc / NetworkManager / NetworkManager.confr juil 01 21:48:07 Eru Systemd [1]: Démarré le gestionnaire de réseau. 

En outre, une option spécifique est consacrée à filtrer uniquement les messages du noyau: -k, qui est la forme courte de --dmesg.

Filtrage des journaux par date

Si nous voulons filtrer les messages stockés dans le journal à la date, nous pouvons utiliser deux options dédiées: -S (court pour --depuis) et -U (court pour --jusqu'à). Les deux options acceptent une date dans le format Yyyy-mm-dd hh: mm: ss. La partie «heure» de la date peut être omise et, dans ce cas, 00:00:00 est assumé. Supposons que nous voulons filtrer les journaux à partir de la date actuelle; Nous exécuterions la commande suivante:

$ JournalCTL --Since 2020-07-25 


Pour restreindre davantage les journaux avec un temps de 16:04:21 pour 16:04:26:

$ JournalCTL --Sice "2020-07-25 16:04:21" --Util "2020-07-25 16:04:26" 

Une série d'alias existe également: ils peuvent être utilisés au lieu de dates simples:

Chaîne Signification
"hier" 00:00:00 de la veille de l'actuel
"aujourd'hui" la journée en cours
"demain" le lendemain
"maintenant" l'heure actuelle

Affichage uniquement des derniers journaux

Si nous lançons le journalctl commande avec le -F (--suivre) L'option, nous ne pouvons visualiser que les derniers journaux reçus, tout en observer car les nouveaux journaux y sont ajoutés (c'est essentiellement comme appeler queue avec le -F option). D'un autre côté, si nous voulons simplement visualiser la fin du journal, nous pouvons utiliser le -e option (--pain).

Formatage de la sortie JournalCTL

La sortie que nous recevons lors de l'utilisation journalctl Peut être facilement formaté à l'aide d'une option dédiée: -o, ou sa longue version, --sortir. Lorsque nous utilisons cette option, nous pouvons spécifier parmi une série de «styles». Parmi les (beaucoup) autres:

  • court
  • verbeux
  • JSON-Pretty

Le court Le format est la valeur par défaut: une ligne par entrée est affichée dans une sortie similaire à celle de Syslog traditionnel:

01 juillet 21:48:07 Eru Systemd [1]: Démarrage du gestionnaire de réseau… 

Le verbeux Le format, plutôt, fait afficher tous les champs de l'entrée:

Mer 2020-07-01 21:48:07.603130 CEST [s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d;m=2e82666;t=5a966922b0155;x=6668aad5e895da03] PRIORITY=6 _BOOT_ID=1c06b8c553624a5f94e1d3ef384fb50d _MACHINE_ID=afe15f1a401041f4988478695a02b2bf _HOSTNAME=eru SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd _UID=0 _GID= 0 _Transport = journal _cap_effective = 3ffffffff code_file = src / core / job.C code_line = 574 code_func = job_log_begin_status_message job_type = start message_id = 7d4958e842da4a758f6c1cdc7b36dcc5 _pid = 1 _comm = systemd _exe = / usr / lib / systemd / systemd _systemd_cgroup = / init.Scope _Systemd_unit = init.Scope _Systemd_slice =-.Slice _Selinux_Context = System_U: System_R: Init_T: S0 _CMDLINE = / USR / LIB / Systemd / Systemd - Switched-ROOT - System - Deserialize 34 Message = Démarrer le gestionnaire de réseau… JOB_ID = 243 UNIT = NetworkManager.service invocation_id = 6416439e51ff4543a76bded5984c6cf3 _source_realtime_timestamp = 1593632887603130 


Le JSON-Pretty format affiche les entrées comme Json objets d'une manière lisible par l'homme. Dans ce format, les entrées sont séparées par une nouvelle ligne:

"__Realtime_timestamp": "1593632887603541", "prioritaire": "6", "_Systemd_unit": "init.Scope "," _Systemd_cgroup ":" / init.Scope "," _uid ":" 0 "," _comm ":" systemd "," _Systemd_slice ":"-.slice", "_CAP_EFFECTIVE" : "3fffffffff", "_BOOT_ID" : "1c06b8c553624a5f94e1d3ef384fb50d", "_SELINUX_CONTEXT" : "system_u:system_r:init_t:s0", "__CURSOR" : "s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d; m = 2e82666; t = 5a966922b0155; x = 6668aad5e895da03 "," _hostname ":" eru "," _pid ":" 1 "," message_id ":" 7d4958e842da. Démarrer le gestionnaire de réseau… "," _exe ":" / usr / lib / systemd / systemd "," __monotonic_timestamp ":" 48768614 "," _transport ":" journal "," syslog_facilité ":" 3 "," unité ":" Gestionnaire de réseau.service "," job_id ":" 243 "," job_type ":" start "," _gid ":" 0 "," code_file ":" src / core / job.C "," _machine_id ":" afe15f1a401041f4988478695a02b2bf "," _cmdline ":" / usr / lib / systemd / systemd --switched-root --system --désérialize 34 "," syslog_identifier " "574", "invocation_id": "6416439e51ff4543a76bded5984c6cf3", "_source_realtime_timestamp": "159363287603130" 

Conclusions

Dans ce tutoriel, nous avons approché journal le démon systemd qui implémente le journal forestier. Ce système de journalisation est censé être utilisé à la place de Syslog qui était le système traditionnel utilisé sur Linux. Sur de nombreuses distributions, pour une raison ou une autre, les deux systèmes coexistent toujours.

Nous avons vu quel est le journal Fichier de configuration et quelle est la signification de certaines options importantes qui peuvent être utilisées pour modifier son comportement, et nous avons appris comment nous pouvons interroger le journal Systemd avec le journalctl utilitaire. Si vous voulez en savoir plus sur journal et journalctl. Je vous suggère de lire les manuels respectifs (homme Journald.confli et homme Journalctl sont les commandes que vous recherchez).

Tutoriels Linux connexes:

  • Journalisation et audit avancés sur Linux
  • Choses à installer sur Ubuntu 20.04
  • Fichiers de configuration Linux: 30 premiers
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Téléchargement Linux
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Meilleure distribution Linux pour les développeurs
  • Choses à installer sur Ubuntu 22.04