Recherche de site Web

Gérer les messages de journal sous systemd à l’aide de journalctl [Guide complet]


Systemd est un gestionnaire de systèmes et de services de pointe pour les systèmes Linux : un démon d’initialisation destiné à démarrer des processus en parallèle au démarrage du système. Il est maintenant pris en charge dans un certain nombre de distributions grand public actuelles, notamment Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etc.

Plus tôt, nous avons expliqué l’histoire derrière 'init' et 'systemd' ; où nous avons discuté de ce que sont les deux démons, pourquoi 'init' devait techniquement être remplacé par 'systemd' ainsi que les principales fonctionnalités de systemd.

L’un des principaux avantages de systemd par rapport aux autres systèmes d’initialisation courants est la prise en charge de la gestion centralisée du système et de la journalisation des processus à l’aide d’un journal. Dans cet article, nous allons apprendre à gérer et à afficher les messages de journal sous systemd à l’aide de la commande journalctl sous Linux.

Important : Avant d’aller plus loin dans ce guide, vous voudrez peut-être apprendre à gérer les services et les unités 'Systemd' à l’aide de la commande 'Systemctl', ainsi que créer et exécuter de nouvelles unités de service dans systemd à l’aide de scripts shell sous Linux. Cependant, si vous êtes d’accord avec tout ce qui précède, continuez à lire.

Configuration de journald pour la collecte des messages de journal sous systemd

journald est un démon qui rassemble et écrit les entrées de journal de l’ensemble du système ; Il s’agit essentiellement de messages de démarrage, de messages provenant du noyau et de syslog ou de diverses applications et il stocke tous les messages dans un emplacement central - fichier journal.

Vous pouvez contrôler le comportement de journald via son fichier de configuration par défaut : /etc/systemd/journald.conf qui est généré au moment de la compilation. Ce fichier contient des options dont vous pouvez modifier les valeurs en fonction des exigences de votre environnement local.

Vous trouverez ci-dessous un exemple de ce à quoi ressemble le fichier, affiché à l’aide de la commande cat.

$ cat /etc/systemd/journald.conf 
# See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

Notez que les différentes configurations d’installation de paquets et d’utilisation dans /usr/lib/systemd/*.conf.d/ et les configurations d’exécution se trouvent dans /run/systemd/journald.conf.d/*.conf que vous n’utilisez pas nécessairement.

Activer le stockage des données de journal sur le disque

Un certain nombre de distributions Linux, y compris Ubuntu et ses dérivés comme Linux Mint, n’autorisent pas le stockage persistant des messages de démarrage sur le disque par défaut.

Il est possible d’activer cela en réglant l’option « Stockage » sur « persistant » comme indiqué ci-dessous. Cela créera le répertoire /var/log/journal et tous les fichiers journaux seront stockés sous celui-ci.

$ sudo vi /etc/systemd/journald.conf 
OR
sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

Pour des paramètres supplémentaires, trouvez la signification de toutes les options qui sont censées être configurées dans la section « [Journal] » en tapant.

$ man journald.conf

Réglage de l’heure système correcte à l’aide de la commande timedatectl

Pour une gestion fiable des journaux sous systemd à l’aide du service journald, assurez-vous que les paramètres horaires, y compris le fuseau horaire, sont corrects sur le système.

Pour afficher les paramètres de date et d’heure actuels sur votre système, tapez .

$ timedatectl 
OR
timedatectl status

Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Pour régler le fuseau horaire correct et éventuellement l’heure système, utilisez les commandes ci-dessous.

$ sudo timedatectl set-timezone  Africa/Kampala
sudo timedatectl set-time “13:50:00”

Affichage des messages de journal à l’aide de la commande journalctl

journalctl est un utilitaire utilisé pour afficher le contenu du journal systemd (qui est écrit par le service journald).

Pour afficher tous les journaux collectés sans aucun filtrage, tapez.

$ journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel:   Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel:   AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel:   Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

Afficher les messages de journal basés sur les démarrages

Vous pouvez afficher une liste de numéros de démarrage (par rapport au démarrage actuel), leurs ID et les horodatages du premier et du dernier message correspondant au démarrage avec l’option --list-boots.

$ journalctl --list-boots

-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1 

Pour afficher les entrées de journal à partir de l’amorçage actuel (numéro 0), utilisez le commutateur -b comme ceci (comme l’exemple de sortie ci-dessus).

$ journalctl -b

Et pour voir un journal du démarrage précédent, utilisez le pointeur relatif -1 avec l’option -b comme ci-dessous.

$ journalctl -b -1

Vous pouvez également utiliser l’ID de démarrage comme ceci.

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Filtrage des messages de journal en fonction de l’heure

Pour utiliser l’heure au format UTC (Coordinated Universal Time), ajoutez les options --utc comme suit.

$ journalctl --utc

Pour voir toutes les entrées depuis une date et une heure particulières, par exemple le 15 juin 2017 à 8h15, tapez cette commande.

$ journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday

Affichage des messages de journal récents

Pour afficher les messages de journal récents (10 par défaut), utilisez l’indicateur -n comme indiqué ci-dessous.

$ journalctl -n
journalctl -n 20 

Affichage des messages de journal générés par le noyau

Pour ne voir que les messages du noyau, comme pour la sortie de la commande dmesg, vous pouvez utiliser l’indicateur -k.

$ journalctl -k 
journalctl -k -b 
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Affichage des messages de journal générés par les unités

Pour afficher toutes les écritures de journal d’une unité particulière, utilisez l’option -u comme suit.

$ journalctl -u apache2.service

Pour revenir à zéro au démarrage actuel, tapez cette commande.

$ journalctl -b -u apache2.service

Pour afficher les journaux du démarrage précédent, utilisez ceci.

$ journalctl -b -1 -u apache2.service

Vous trouverez ci-dessous d’autres commandes utiles :

$ journalctl -u apache2.service  
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday

Affichage des messages de journal générés par les processus

Pour afficher les journaux générés par un processus spécifique, spécifiez son PID comme ceci.

$ journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday

Affichage des messages de journal générés par l’ID d’utilisateur ou de groupe

Pour afficher les journaux générés par un utilisateur ou un groupe spécifique, spécifiez son ID d’utilisateur ou de groupe comme suit.

$ journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today

Affichage des journaux générés par un fichier

Pour afficher tous les journaux générés par un fichier (éventuellement un exécutable), tel que l’exécutable D-Bus ou les exécutables bash, il suffit de taper.

$ journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Affichage des messages de journal par priorité

Vous pouvez également filtrer la sortie en fonction des priorités de messages ou des plages de priorités à l’aide de l’indicateur -p. Les valeurs possibles sont : 0 – emerg, 1 – alerte, 2 – critique, 3 – err, 4 – avertissement, 5 – avis, 6 – info, 7 – débogage) :

$ journalctl -p err

Pour spécifier une plage, utilisez le format ci-dessous (de émerg à avertissement).

$ journalctl -p 1..4
OR
journalctl -p emerg..warning

Afficher les messages de journal en temps réel

Vous pouvez pratiquement surveiller les journaux pendant qu’ils sont écrits avec l’option -f (similaire à la fonctionnalité -f de queue).

$ journalctl -f

Gestion de la mise en forme de l’affichage du journal

Si vous souhaitez contrôler le formatage de sortie des entrées de journal, ajoutez l’indicateur -o et utilisez les options suivantes : cat, export, json, json-pretty, json-sse, short, short-iso, short-monotonic, short-precise et verbose(vérifiez la signification des options dans la page de manuel :

L’option cat affiche le message réel de chaque entrée de journal sans aucune métadonnée (horodatage, etc.).

$ journalctl -b -u apache2.service -o cat

Gestion des journaux sur un système

Pour vérifier la cohérence interne du fichier journal, utilisez l’option --verify. Si tout va bien, la sortie doit indiquer un PASS.

$ journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Suppression d’anciens fichiers journaux

Vous pouvez également afficher l’utilisation actuelle du disque de tous les fichiers journaux avec les options --disk-usage. Il affiche la somme de l’utilisation du disque de tous les fichiers journaux archivés et actifs :

$ journalctl --disk-usage

Pour supprimer les anciens fichiers journaux (archivés), exécutez les commandes ci-dessous :

$ sudo journalctl --vacuum-size=50M  #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years	#delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4     #delete files so that no more than the specified number of separate journal files remain in storage location

Rotation des fichiers journaux

Enfin, vous pouvez demander à journald de faire pivoter les fichiers journaux avec l’option --rotate. Notez que cette directive ne retourne pas tant que l’opération de rotation n’est pas terminée :

$ sudo journalctl --rotate

Pour obtenir un guide d’utilisation détaillé et les options, consultez la page de manuel journalctl comme suit.

$ man journalctl

Consultez quelques articles utiles.

  1. Gestion du processus de démarrage du système et des services (SysVinit, Systemd et Upstart)
  2. Petiti - Un outil d’analyse de journaux open source pour les administrateurs système Linux
  3. Comment configurer et gérer la rotation des journaux à l’aide de Logrotate sous Linux
  4. lnav – Observer et analyser les journaux Apache à partir d’un terminal Linux

C’est tout pour l’instant. Utilisez les commentaires ci-dessous pour poser des questions ou ajouter vos réflexions sur ce sujet.

Articles connexes: