Aller au contenu

systemd : journal (journald)

Le journal (systemd-journald) centralise les messages des services, du noyau et du système. Il se lit avec journalctl. Les exemples utilisent un service fictif monapp.

Fenêtre de terminal
journalctl # tout le journal (le plus ancien d'abord)
journalctl -e # saute à la fin
journalctl -n 50 # 50 dernières lignes
journalctl -r # ordre inverse (plus récent d'abord)
journalctl -f # suit en direct (Ctrl+c pour quitter)
journalctl --no-pager # sans pagination (scripts)
Filtre Commande
Un service journalctl -u monapp
Plusieurs services journalctl -u ssh -u fail2ban
Depuis une date journalctl --since "2026-10-05 08:00"
Plage de dates journalctl --since yesterday --until "1 hour ago"
Dernier démarrage journalctl -b
Démarrage précédent journalctl -b -1
Priorité (erreurs et pire) journalctl -p err
Noyau journalctl -k
Un identifiant de syslog journalctl -t sshd-session
Un processus journalctl _PID=1234
Un utilisateur journalctl _UID=1000
Texte journalctl -u monapp -g "erreur" (expression régulière)

Combiner librement : journalctl -u monapp -p warning -b --since "1 hour ago".

Priorités : emerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7). -p err affiche de emerg à err.

Fenêtre de terminal
journalctl --list-boots # démarrages enregistrés
journalctl --disk-usage # place occupée
journalctl --verify # contrôle l'intégrité des fichiers

Par défaut, le journal est conservé sur disque si le dossier /var/log/journal existe (cas des images Ubuntu Server) ; sinon il reste en mémoire (/run/log/journal) et disparaît au redémarrage.

Fenêtre de terminal
ls -d /var/log/journal # présent ?
sudo mkdir -p /var/log/journal # sinon : le créer
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
journalctl --list-boots # plusieurs démarrages visibles après un redémarrage

Réglage explicite dans /etc/systemd/journald.conf.d/persistance.conf :

[Journal]
Storage=persistent
Fenêtre de terminal
sudo mkdir -p /etc/systemd/journald.conf.d
sudo tee /etc/systemd/journald.conf.d/limites.conf <<'CONF'
[Journal]
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=1month
Compress=yes
CONF
sudo systemctl restart systemd-journald
Réglage Effet
SystemMaxUse Place maximale utilisée par le journal
SystemKeepFree Place disque à laisser libre
MaxRetentionSec Durée maximale de conservation
RateLimitIntervalSec, RateLimitBurst Limite le nombre de messages d’un service par intervalle (évite l’inondation)
ForwardToSyslog Transmet aussi à rsyslog
Fenêtre de terminal
sudo journalctl --vacuum-time=14d # supprime ce qui a plus de 14 jours
sudo journalctl --vacuum-size=200M # réduit à 200 Mo
sudo journalctl --vacuum-files=5 # garde 5 fichiers
sudo journalctl --rotate # archive le fichier actif
Fenêtre de terminal
journalctl -u monapp -o short-iso -n 5 # dates ISO 8601
journalctl -u monapp -o cat -n 5 # message seul
journalctl -u monapp -o json -n 1 --no-pager # JSON (une ligne)
journalctl -u monapp -o json-pretty -n 1 # JSON lisible
journalctl -u monapp -o json --no-pager | jq -r '.MESSAGE'

Champs JSON utiles : MESSAGE, PRIORITY, _SYSTEMD_UNIT, _PID, __REALTIME_TIMESTAMP, _HOSTNAME.

Fenêtre de terminal
logger -t monscript "message de test" # depuis un script
logger -t monscript -p user.err "une erreur"
echo "message" | systemd-cat -t monscript -p warning # tout ce qui arrive sur l'entrée standard
journalctl -t monscript -n 5 --no-pager

Dans un service, tout ce que le programme écrit sur la sortie standard ou la sortie d’erreur est automatiquement journalisé, avec l’identifiant de l’unité.

Fenêtre de terminal
journalctl -u monapp --since today | grep -ci "erreur" # compter
journalctl -u ssh --since "1 hour ago" | grep -iE "failed|invalid"
journalctl -b -p err --no-pager | head -20 # erreurs du boot courant
sudo journalctl -u ssh -f # suivre les connexions en direct

Journal d’un utilisateur : journalctl --user -u monservice. Lire le journal d’autres comptes demande sudo ou l’appartenance au groupe systemd-journal : sudo usermod -aG systemd-journal $USER.

Symptôme Piste
No journal files were found Droits (sudo ou groupe systemd-journal) ou journal vide
L’historique disparaît au redémarrage Journal non persistant : créer /var/log/journal (voir plus haut)
Le journal occupe trop de place SystemMaxUse et sudo journalctl --vacuum-size=…
Messages manquants RateLimitBurst atteint : le journal indique « Suppressed N messages »
-u nom ne montre rien Mauvais nom d’unité (systemctl list-units | grep nom), ou les messages ne passent pas par le journal
Dates en UTC au lieu de l’heure locale Fuseau de la machine : sudo timedatectl set-timezone Europe/Paris
Lire sans pager coupé --no-pager, ou SYSTEMD_PAGER=cat

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les commandes de cette page sont identiques sur systemd 255 et 259. Les noms de processus de certains services peuvent changer (par exemple sshd-session au lieu de sshd pour OpenSSH sur 26.04) : filtrer par unité (-u ssh) plutôt que par identifiant (-t).