systemd (Français)/Journal (Français)

From ArchWiki

État de la traduction: Cet article est la version francophone de systemd/Journal. Date de la dernière traduction: 2022-04-30. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

systemd possède son propre système de journalisation appelé journal ; il n'est pas nécessaire d'exécuter un démon de journalisation séparé. Pour lire le journal, utilisez journalctl(1).

Sous Arch Linux, le répertoire /var/log/journal/ fait partie du paquet systemd, et le journal (lorsque Storage= est défini sur auto dans /etc/systemd/journald.conf) écrira dans /var/log/journal/. Si ce répertoire est supprimé, systemd ne le recréera pas automatiquement et écrira ses journaux dans /run/systemd/journal de manière non persistante. Cependant, le répertoire sera recréé si Storage=persistent est ajouté à journald.conf et systemd-journald.service est redémarré (ou si le système est redémarré).

Le journal de systemd classe les messages par Niveau de priorité et Fonctionnalité. La classification des journaux correspond au protocole classique Syslog (RFC 5424).

Niveau de priorité

Un code de gravité syslog (appelé priorité dans systemd) est utilisé pour marquer l'importance d'un message RFC 5424 6.2.1.

Valeur Gravité Mot-Clef Description Exemples
0 Urgente emerg Système inutilisable BUG sévère du noyau, systemd a reçu un «core dump».
Ce niveau ne doit pas être utilisé par les applications.
1 Alerte alert Doit être corrigé immédiatement Un sous-système vital ne fonctionne plus. Perte de données.
kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc
2 Critique crit Situations critiques Crashs, coredumps. Un exemple habituel était Adobe Flash :
systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core
Défaillance de l'application principale du système, comme X11.
3 Erreur err Situations d'erreurs Erreur non grave signalée:
kernel: usb 1-3: 3:1: cannot get freq at ep 0x84
systemd[1]: Failed unmounting /var.
libvirtd[1720]: internal error: Failed to initialize a valid firewall backend
4 Avertissement warning Peut indiquer qu'une erreur se produira si aucune action n'est entreprise. Un système de fichiers hors racine n'a plus que 1 Go de libre.
org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale
5 Avis notice Les événements qui sont inhabituels, mais pas des situations d'erreur. systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway
gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged
6 Informative info Messages durant un fonctionnement normal qui ne nécessitent aucune action. lvm[585]: 7 logical volume(s) in volume group "archvg" now active
7 Débogage debug Informations utiles aux développeurs pour le débogage de l'application. kdeinit5[1900] : powerdevil : Programmation de l'inhibition de ":1.14" "firefox" avec le cookie 13 et la raison "screen"

Ces règles sont des recommandations, et le niveau de priorité d'une erreur donnée est à la discrétion du développeur de l'application. Il est toujours possible que l'erreur soit à un niveau plus élevé ou plus bas que prévu.

Fonctionnalité

Un code de fonctionnalité syslog est utilisé pour spécifier le type de programme qui enregistre le message RFC 5424 6.2.1.

Code de fonctionnalité Mot-clé Description Info
0 kern Messages du noyau
1 user Messages au niveau de l'utilisateur
2 mail Système de messagerie Archaïque, POSIX, encore pris en charge et parfois utilisé (voir mail(1))
3 daemon Démons système Tous les démons, y compris systemd et ses sous-systèmes
4 auth Messages de sécurité/autorisation Voir aussi la fonctionnalité n°10
5 syslog Messages générés en interne par syslogd Pour les implémentations de syslogd (non utilisé par systemd, voir la fonctionnalité n°3)
6 lpr Sous-système d'imprimante de ligne (sous-système archaïque)
7 news Sous-système d'informations réseau (sous-système archaïque)
8 uucp Sous-système UUCP (sous-système archaïque)
9 Démon horloge systemd-timesyncd
10 authpriv Messages de sécurité/autorisation Voir aussi la fonctionnalité n°4
11 ftp Démon FTP
12 - Sous-système NTP
13 - Journal des audits
14 - Journal des alertes
15 cron Démon de planification
16 local0 Utilisation locale 0 (local0)
17 local1 Utilisation locale 1 (local1)
18 local2 Utilisation locale 2 (local2)
19 local3 Utilisation locale 3 (local3)
20 local4 Utilisation locale 4 (local4)
21 local5 Utilisation locale 5 (local5)
22 local6 Utilisation locale 6 (local6)
23 local7 Utilisation locale 7 (local7)

Installations utiles à surveiller : 0, 1, 3, 4, 9, 10, 15.

Filtrage de la sortie

journalctl permet de filtrer la sortie par des champs spécifiques. S'il y a beaucoup de messages à afficher, ou si le filtrage de grandes périodes de temps doit être fait, la sortie de cette commande peut être largement retardée.

Exemples :

  • Afficher tous les messages de ce démarrage :
    # journalctl -b
    Cependant, il arrive souvent que l'on soit intéressé par des messages provenant non pas du démarrage actuel, mais du démarrage précédent (par exemple, si un crash système irrécupérable s'est produit). Ceci est possible grâce au paramètre optionnel offset de l'indicateur -b : journalctl -b -0 affiche les messages du démarrage actuel, journalctl -b -1 du démarrage précédent, journalctl -b -2 du deuxième démarrage précédent et ainsi de suite - vous pouvez voir la liste des démarrages avec leurs numéros en utilisant journalctl --list-boots. Voir journalctl(1) pour une description complète ; la sémantique est plus puissante que celle indiquée ici.
  • Inclure les explications des messages du journal à partir du catalogue de messages lorsqu'il est disponible :
    # journalctl -x
    Notez que cette fonctionnalité ne devrait pas être utilisée lorsque vous joignez des journaux à des rapports de bogues et à des fils de support, afin de limiter les sorties superflues. Vous pouvez lister toutes les entrées de catalogue connues en exécutant journalctl --list-catalog.
  • Afficher tous les messages depuis la date (et éventuellement l'heure) :
    # journalctl --since="2012-10-30 18:17:16"
  • Afficher tous les messages depuis 20 minutes :
    # journalctl --since "20 min ago"
  • Suivre les nouveaux messages :
    # journalctl -f
  • Afficher tous les messages par un exécutable spécifique :
    # journalctl /usr/lib/systemd/systemd
  • Afficher tous les messages d'un processus spécifique :
    # journalctl _PID=1
  • Afficher tous les messages d'une unité spécifique :
    # journalctl -u man-db.service
  • Afficher tous les messages des services utilisateurs par une unité spécifique :
    $ journalctl --user -u dbus
  • Afficher le tampon du noyau :
    # journalctl -k
  • Afficher uniquement les messages d'erreur, critiques et d'alerte prioritaires :
    # journalctl -p err..alert
    Vous pouvez également utiliser un niveau de journal numérique, comme journalctl -p 3..1. Si un seul nombre/niveau de journal est utilisé, journalctl -p 3, alors tous les niveaux de journaux de priorité supérieure sont également inclus (c'est-à-dire de 0 à 3 dans ce cas).
  • Montrer l'équivalent de auth.log en filtrant sur la facilité syslog :
    # journalctl SYSLOG_FACILITY=10
  • Si le répertoire journal (situé par défaut sous /var/log/journal) contient une grande quantité de données de journal, journalctl peut prendre plusieurs minutes pour filtrer la sortie. Il peut être accéléré de manière significative en utilisant l'option --file pour forcer journalctl à ne regarder que dans le journal le plus récent :
    # journalctl --file /var/log/journal/*/system.journal -f

Voir journalctl(1), systemd.journal-fields(7), ou l'article du blog de Lennart Poettering pour plus de détails.

Astuce:
  • Par défaut, journalctl tronque les lignes plus longues que la largeur de l'écran, mais dans certains cas, il peut être préférable d'activer l'habillage au lieu de tronquer. Ceci peut être contrôlé par la SYSTEMD_LESS [qui contient les options passées à less. (le pager par défaut) et a pour valeur par défaut FRSXMK. (voir less(1) et journalctl(1) pour plus de détails).
En omettant l'option S, la sortie sera enveloppée au lieu d'être tronquée. Par exemple, lancez journalctl comme suit :
$ SYSTEMD_LESS=FRXMK journalctl
Pour définir ce comportement par défaut, exportez la variable de ~/.bashrc ou ~/.zshrc.
  • Bien que le journal soit stocké dans un format binaire, le contenu des messages stockés n'est pas modifié. Cela signifie qu'il est consultable avec des strings, par exemple pour la récupération dans un environnement qui n'a pas systemd installé, par exemple :
    $ strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal | grep -i message

Limite de taille du journal

Si le journal est persistant (non-volatile), sa taille limite est fixée par défaut à 10 % de la taille du système de fichiers sous-jacent, mais est plafonnée à 4 Go. Par exemple, avec /var/log/journal/ situé sur une partition de 20 Go, les données du journal peuvent occuper jusqu'à 2 Go. Sur une partition de 50 Go, elles seraient limitées à 4 Go. Pour confirmer les limites actuelles sur votre système, examinez les journaux de l'unité systemd-journald :

# journalctl -b -u systemd-journald

La taille maximale du journal persistant peut être contrôlée en décommentant et en modifiant les éléments suivants :

/etc/systemd/journald.conf
SystemMaxUse=50M

Il est également possible d'utiliser des fichiers de substitution plutôt que de modifier le fichier de configuration global. Dans ce cas, placez les surcharges sous l'en-tête [Journal] :

/etc/systemd/journald.conf.d/00-journal-size.conf
[Journal]
SystemMaxUse=50M

Redémarrez le systemd-journald.service après avoir modifié ce paramètre pour appliquer la nouvelle limite.

Voir journald.conf(5) pour plus d'informations.

Limite de taille par unité avec un espace de nom séparé

Éditez le fichier d'unité pour le service que vous souhaitez configurer (par exemple sshd) et ajoutez LogNamespace=ssh dans la section [Service].

Créez ensuite /etc/systemd/journald@ssh.conf en copiant /etc/systemd/journald.conf. Après cela, éditez journald@ssh.conf et ajustez SystemMaxUse à votre convenance.

[Le redémarrage du service devrait automatiquement démarrer le nouveau service de journal systemd-journald@ssh.service. Les journaux du service avec son propre espace de nom peuvent être visualisés avec journalctl --namespace ssh.

Voir systemd-journald.service(8) § JOURNAL NAMESPACES pour plus de détails sur les espaces de noms des journaux.

Nettoyer les fichiers journaux manuellement

Les fichiers journaux peuvent être supprimés globalement de /var/log/journal/ à l'aide de rm par exemple, ou peuvent être découpés selon divers critères en utilisant journalctl. Par exemple :

  • Supprimez les fichiers journaux archivés jusqu'à ce que l'espace disque qu'ils utilisent tombe en dessous de 100M :
    # journalctl --vacuum-size=100M
  • Faites en sorte que tous les fichiers journaux ne contiennent aucune donnée datant de plus de 2 semaines.
    # journalctl --vacuum-time=2weeks

Voir journalctl(1) pour plus d'informations.

Journald en conjonction avec syslog

La compatibilité avec une implémentation classique, non compatible avec Journald, de syslog peut être assurée en laissant systemd transmettre tous les messages via le socket /run/systemd/journal/syslog. Pour que le démon syslog fonctionne avec le journal, il doit se lier à cette socket au lieu de /dev/log. (annonce officielle).

La valeur par défaut de journald.conf pour la redirection vers la socket est ForwardToSyslog=no pour éviter la surcharge du système, car rsyslog ou syslog-ng extraient les messages du journal par eux-même.

Voir Syslog-ng#Overview et Syslog-ng#syslog-ng and systemd journal, ou rsyslog respectivement, pour plus de détails sur la configuration.

Transférer journald sur /dev/tty12

Créez un répertoire de remplacement /etc/systemd/journald.conf.d et créez-y un fichier fw-tty12.conf :

/etc/systemd/journald.conf.d/fw-tty12.conf
[Journal]
ForwardToConsole=yes
TTYPath=/dev/tty12
MaxLevelConsole=info

Puis redémarrez systemd-journald.service.

Spécifier un autre journal à afficher

Il peut y avoir un besoin de vérifier les journaux d'un autre système qui est mort dans l'eau, comme démarrer à partir d'un système vivant pour récupérer un système de production. Dans ce cas, on peut monter le disque dans par exemple /mnt, et spécifier le chemin du journal via -D/--directory, comme ceci :

# journalctl -D /mnt/var/log/journal -e

Accès au journal en tant qu'utilisateur

Par défaut, un utilisateur normal n'a accès qu'à son propre journal par utilisateur. Pour accorder un accès en lecture au journal du système en tant qu'utilisateur normal, vous pouvez ajouter cet utilisateur au systemd-journal groupe d'utilisateurs. Les membres des groupes adm et wheel ont également un accès en lecture.

Voir journalctl(1) § DESCRIPTION et Users and groups (Français)#Groupes d'utilisateurs pour plus d'informations.