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.
Lire le journal
Section intitulée « Lire le journal »journalctl # tout le journal (le plus ancien d'abord)journalctl -e # saute à la finjournalctl -n 50 # 50 dernières lignesjournalctl -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.
Boots et espace
Section intitulée « Boots et espace »journalctl --list-boots # démarrages enregistrésjournalctl --disk-usage # place occupéejournalctl --verify # contrôle l'intégrité des fichiersJournal persistant
Section intitulée « Journal persistant »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.
ls -d /var/log/journal # présent ?sudo mkdir -p /var/log/journal # sinon : le créersudo systemd-tmpfiles --create --prefix /var/log/journalsudo systemctl restart systemd-journaldjournalctl --list-boots # plusieurs démarrages visibles après un redémarrageRéglage explicite dans /etc/systemd/journald.conf.d/persistance.conf :
[Journal]Storage=persistentLimiter la taille et la durée
Section intitulée « Limiter la taille et la durée »sudo mkdir -p /etc/systemd/journald.conf.dsudo tee /etc/systemd/journald.conf.d/limites.conf <<'CONF'[Journal]SystemMaxUse=500MSystemKeepFree=1GMaxRetentionSec=1monthCompress=yesCONFsudo 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 |
Nettoyer : vacuum
Section intitulée « Nettoyer : vacuum »sudo journalctl --vacuum-time=14d # supprime ce qui a plus de 14 jourssudo journalctl --vacuum-size=200M # réduit à 200 Mosudo journalctl --vacuum-files=5 # garde 5 fichierssudo journalctl --rotate # archive le fichier actifFormats de sortie
Section intitulée « Formats de sortie »journalctl -u monapp -o short-iso -n 5 # dates ISO 8601journalctl -u monapp -o cat -n 5 # message seuljournalctl -u monapp -o json -n 1 --no-pager # JSON (une ligne)journalctl -u monapp -o json-pretty -n 1 # JSON lisiblejournalctl -u monapp -o json --no-pager | jq -r '.MESSAGE'Champs JSON utiles : MESSAGE, PRIORITY, _SYSTEMD_UNIT, _PID, __REALTIME_TIMESTAMP, _HOSTNAME.
Écrire dans le journal
Section intitulée « Écrire dans le journal »logger -t monscript "message de test" # depuis un scriptlogger -t monscript -p user.err "une erreur"echo "message" | systemd-cat -t monscript -p warning # tout ce qui arrive sur l'entrée standardjournalctl -t monscript -n 5 --no-pagerDans 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é.
Compléments utiles
Section intitulée « Compléments utiles »journalctl -u monapp --since today | grep -ci "erreur" # compterjournalctl -u ssh --since "1 hour ago" | grep -iE "failed|invalid"journalctl -b -p err --no-pager | head -20 # erreurs du boot courantsudo journalctl -u ssh -f # suivre les connexions en directJournal 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.
Dépannage
Section intitulée « Dépannage »| 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).
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel :
man journalctl,man journald.conf - Suite : Dépendances, cibles et sockets