{{tag>sysadmin linux systemd log journaux journalisation}}
====== journalctl: Consulter la journalisation d'événements de systemd ======
**systemd** intègre son propre système de journalisation indépendant des services syslog/rsyslog, il repose sur le daemon **journald**.
Si besoin, il reste tout à fait possible d'installer rsyslog et de transférer les messages vers celui-ci.
Pour que la journalisation soit pertinente, vérifier que le temps local est correctement définit, voir wiki [[sysadmin:linux:systemd:synchronisation-du-temps#modifier_le_temps_local_time_zone]]
Essentiellement pour des raisons de performances, les journaux sont stockés par **journald** sous forme binaire. **journalctl** est le CLI standard permettant d'accéder et de visualiser les journaux produits par **journald**. Il permet également de reconfigurer le service de journalisation.
Invoqué sans arguments, journactl affiche l'ensemble des messages. On utilise alors la syntaxe less/vim pour rechercher les chaînes de caractères au sein de la sortie.
journalctl
===== Suivi temps réel =====
L'argument **-f** ou **%%--follow%%** permet d'afficher les nouveaux messages. Par exemple pour observer au fil de l'eau les messages émis par le processus ayant le PID 4319
journalctl -f _PID=4319
===== Filtrage par service =====
Utiliser l'argument **-u** ou **%%--%%unit** pour filtrer par unité systemd (service):
journalctl -u cron
===== Filtrage par criticité =====
Pour filtrer par niveau de criticité (priority) utiliser l'argument **-p** ou **%%--priority%%**:
journalctl -p warning
La commande affiche les message dont la criticité est au minimum warning.
===== Filtrage par repères temporels =====
Lister les événements via des repères temporels en spécifiant des time stamps
journalctl --since yesterday
journalctl --since "10 minutes ago"
journalctl --since "2 hours ago"
journalct -p warning --since "2020-01-01 00:00:00" --until "2020-01-31 23:59:59"
===== Filtrage par utilisateur =====
L'option **_UID** permet de spécifier un ID utilisateur à cibler:
journalctl --since "1 hours ago" _UID=1000
===== Filtrage des messages du noyau =====
Lister les messages du noyau, affichage complet:
journalctl -k --output=verbose
Pour lister les messages émis depuis le démarrage:
journalctl -k -b
===== Historique =====
Pour afficher les messages émis lors du précédent démarrage:
journalctl -k -b -1
La mise en service courante à l'index 0. Les précédents démarrages sont indexés négativement. Pour lister les index existants avec leurs horodatages:
journalctl --list-boots
On pourra préciser l'index souhaité via la commande:
journalctl -k -b -17
Si l'on souhaite afficher les messages les plus récents, on peut utiliser l'option %%--%%reverse (-r) et l'option %%--%%lines (-n)
# Afficher les 100 enregistrements les plus récents:
journalctl -r -n 100
===== Gestion des journaux =====
Par défaut, le service **systemd-journald** en charge de la journalisation s'assure que les anciens enregistrements ou les fichiers journaux sont supprimés afin de garantir un espace disque minimum pour le système. On peut utiliser **journalctl** pour gérer la taille des journaux.
Les fichiers journaux sont enregistrés dans ''/var/log/journal''. Pour évaluer l'espace occupé par les journaux sur le système de fichier:
journalctl --disk-usage
==== Supprimer les journaux ====
Deux options permettent de facilement supprimer les journaux en spécifiant:
* Une taille limite avec %%--vacuum-size%%
* Une date limite avec %%--vacuum-time%%
# Pour faire chuter l'occupation disque des journaux à 500Mo
journalctl --vacuum-size=500M
# Pour ne conserver que les journaux de moins d'un mois
journalctl --vacuum-time="1 month"
==== test de consistance ====
Test d'intégrité des fichiers de log:
journalctl --verify
===== Paramétrage des journaux =====
Le fichier de configuration principal de systemd-journald est ''/etc/systemd/journald.conf''. Les autres packages peuvent créer leurs fichiers de configuration et les stocker dans l'un des dossiers:
* ''/etc/systemd/journald.conf.d/''
* ''/rul/systemd/journald.conf.d/''
* ''/usr/lib/systemd/journald.conf.d/''
Les variables commentées dans le fichier présentent les valeurs par défaut. Pour modifier le paramétrage il suffit de dé-commenter la variable et de spécifier la valeur souhaitée.
# Limite d' occupation disque des journaux
SystemMaxUse=500M
# Période de rétention maximale des journaux à 1 mois (3600*24*30)
#MaxRetentionSec=2592000
# équivalent
MaxRetentionSec=1month
Après modification des paramétrages, redémarrer le service:
sudo systemctl restart systemd-journald
Pour que les journaux ne soient pas enregistrés sur le disque ( deviennent volatiles) :
[Journal]
Storage=volatile
===== Enregistrement avec syslog =====
Les journaux peuvent être transmis à syslog/rsyslog. Installer rsyslog et démarrer le service.
Editer le fichier ''/etc/systemd/journald.conf'' et modifier cette option :
ForwardToSyslog=yes
===== Références =====
* %%man journald.conf%%
* https://www.freedesktop.org/software/systemd/man/journald.conf.html
* https://www.golinuxcloud.com/view-logs-using-journalctl-filter-journald/
* https://linuxhandbook.com/journalctl-command/
* https://www.linuxtricks.fr/wiki/systemd-utiliser-journalctl-les-logs-de-systemd
* https://www.loggly.com/ultimate-guide/using-journalctl/
* https://www.loggly.com/ultimate-guide/linux-logging-with-systemd/#journald-configuration
* https://www.loggly.com/ultimate-guide/managing-journal-size/
* https://blog.selectel.com/managing-logging-systemd/
* https://www.linuxtricks.fr/wiki/systemd-utiliser-journalctl-les-logs-de-systemd