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 remplacement de démon init destiné à démarrer des processus en parallèle au démarrage du système. Il est désormais 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 de la journalisation du système et des processus à l'aide d'un journal. Dans cet article, nous apprendrons comment 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 souhaiterez peut-être apprendre à gérer les services et unités 'Systemd' à l'aide de la commande 'Systemctl', ainsi qu'à créer et exécuter de nouveaux unités de service dans systemd à l'aide de scripts shell sous Linux. Cependant, si tout ce qui précède vous convient, 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 ; ce sont essentiellement des messages de démarrage, des messages 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 pour répondre aux exigences de votre environnement local.

Vous trouverez ci-dessous un exemple de ce à quoi ressemble le fichier, visualisé à 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 diverses installations de packages et extraits de configuration d'utilisation dans /usr/lib/systemd/*.conf.d/ et les configurations d'exécution peuvent être trouvées dans /run/systemd/journald.conf. d/*.conf que vous n'utilisez pas nécessairement.

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

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

Il est possible de l'activer en définissant 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, recherchez la signification de toutes les options censées être configurées dans la section « [Journal] » en tapant.

man journald.conf

Définition 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 d'heure, 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 définir 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 du 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 du journal en fonction des démarrages

Vous pouvez afficher une liste des numéros de démarrage (relatifs au démarrage en cours), leurs identifiants 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 du démarrage en cours (numéro 0), utilisez le commutateur -b comme ceci (identique à 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 celui-ci.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Filtrage des messages du journal en fonction du temps

Pour utiliser l'heure au format Temps universel coordonné (UTC), ajoutez les options --utc comme suit.

journalctl --utc

Pour voir toutes les entrées depuis une date et une heure particulières, par ex. 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 voir uniquement les messages du noyau, similaire au résultat 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 le commutateur -u comme suit.

journalctl -u apache2.service

Pour revenir 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 quelques 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'utilisateur ou l'ID 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 ceci.

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, tapez simplement.

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

Affichage des messages du journal par priorité

Vous pouvez également filtrer la sortie en fonction des priorités des messages ou des plages de priorités à l'aide de l'indicateur -p. Les valeurs possibles sont : 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warn, 5 – notice, 6 – info, 7 – debug) :

journalctl -p err

Pour spécifier une plage, utilisez le format ci-dessous (émergence en avertissement).

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

Afficher les messages du journal en temps réel

Vous pouvez pratiquement regarder les journaux pendant leur écriture avec l'option -f (similaire à la fonctionnalité tail -f).

journalctl -f

Gestion du formatage 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 ces options : cat, export, json, json-pretty, json-sse, short, short-iso, court-monotone, court-précis et verbeux (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 devrait 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 des anciens fichiers de journal

Vous pouvez également afficher l'utilisation actuelle du disque de tous les fichiers journaux avec les options --disk-usage. Il montre 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 et surtout, vous pouvez demander à journald de faire pivoter les fichiers journaux avec l'option --rotate. Notez que cette directive ne revient pas tant que l'opération de rotation n'est pas terminée :

sudo journalctl --rotate

Pour un guide d'utilisation détaillé et des options, consultez la page de manuel journalctl comme suit.

man journalctl

Consultez quelques articles utiles.

  1. Gestion du processus et des services de démarrage du système (SysVinit, Systemd et Upstart)
  2. Petiti – Un outil d'analyse des 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 - Regarder et analyser les journaux Apache à partir d'un terminal Linux

C'est tout pour le moment. Utilisez les commentaires ci-dessous pour poser des questions ou ajouter vos réflexions sur ce sujet.