{{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