Aller au contenu
Administration Linux medium

Maîtriser les journaux système avec journalctl sous Linux

12 min de lecture

journalctl est la commande pour consulter les logs système sur toute distribution utilisant systemd. Elle remplace la lecture manuelle des fichiers dans /var/log/ en offrant un journal structuré, filtrable par service, par priorité, par date et par boot. C’est l’outil de diagnostic principal de l’administrateur Linux.

  • Consulter les logs système et les logs d’un service spécifique
  • Filtrer les logs par date, priorité et boot
  • Suivre les logs en temps réel avec -f
  • Configurer la rétention et la taille maximale du journal
  • Gérer les permissions d’accès aux logs
  • Utiliser les formats de sortie avancés

journalctl intervient dans toutes les situations de diagnostic :

  • Un service refuse de démarrer — les logs expliquent l’erreur
  • Le système a redémarré de façon inattendue — consulter les boots précédents
  • Une application produit des erreurs intermittentes — filtrer par priorité
  • L’espace disque est consommé par les logs — vérifier et configurer la rétention
  • Un problème de sécurité nécessite d’analyser les connexions récentes

journald (systemd-journald) collecte les logs de trois sources :

SourceContenu
Messages du noyauÉquivalent de dmesg
SyslogMessages des services via la socket /dev/log
stdout/stderrSorties des services gérés par systemd

Le journal est stocké sous forme binaire dans /var/log/journal/ (persistant) ou /run/log/journal/ (volatile, perdu au reboot).

Fenêtre de terminal
# Vérifier l'espace utilisé par le journal
journalctl --disk-usage
Archived and active journals take up 632.5M in the file system.

Par défaut sur la plupart des distributions, le journal est persistant si /var/log/journal/ existe :

Fenêtre de terminal
# Vérifier que le répertoire existe
ls -ld /var/log/journal/

Si le répertoire n’existe pas, le journal est volatil (perdu au reboot). Pour activer la persistance :

Fenêtre de terminal
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Fenêtre de terminal
# Tous les logs depuis le dernier démarrage
journalctl -b
# Logs du boot précédent
journalctl -b -1
# Lister les boots disponibles
journalctl --list-boots
-2 abc123... Thu 2026-06-26 08:14:21 CEST — Thu 2026-06-26 22:30:05 CEST
-1 def456... Fri 2026-06-27 07:45:12 CEST — Fri 2026-06-27 23:15:33 CEST
0 ghi789... Sat 2026-06-28 06:32:15 CEST — Sat 2026-06-28 12:50:14 CEST
Fenêtre de terminal
# Logs de nginx
journalctl -u nginx
# Logs de nginx depuis le dernier boot
journalctl -u nginx -b
# Logs de plusieurs services
journalctl -u nginx -u postgresql
Fenêtre de terminal
# Équivalent de tail -f
journalctl -f
# Suivre un service spécifique
journalctl -fu nginx
Fenêtre de terminal
# Depuis une date
journalctl --since "2026-06-28 08:00"
# Jusqu'à une date
journalctl --until "2026-06-28 12:00"
# Combiné
journalctl --since "1 hour ago"
# Les 30 dernières minutes
journalctl --since "30 min ago"
# Hier
journalctl --since yesterday --until today

Le journal utilise les niveaux de priorité syslog (0 = le plus critique, 7 = le plus verbeux) :

NiveauNomSignification
0emergSystème inutilisable
1alertAction immédiate requise
2critErreur critique
3errErreur
4warningAvertissement
5noticeNormal mais significatif
6infoInformation
7debugDebug (très verbeux)
Fenêtre de terminal
# Erreurs et au-dessus (0 à 3)
journalctl -p err
# Erreurs depuis le dernier boot
journalctl -p err -b
# Avertissements et au-dessus pour un service
journalctl -u nginx -p warning
Fenêtre de terminal
# Recherche textuelle (grep intégré)
journalctl -b --grep "error|fail"
# Recherche insensible à la casse
journalctl -b --grep "timeout" --case-sensitive=no
Fenêtre de terminal
# Équivalent de dmesg avec horodatage
journalctl -k
# Messages noyau du boot actuel
journalctl -k -b

journalctl propose plusieurs formats avec l’option -o :

FormatUsage
shortFormat par défaut (similaire à syslog)
short-preciseAvec microsecondes
verboseTous les champs structurés
jsonJSON (pour parsing automatisé)
json-prettyJSON indenté (lecture humaine)
catUniquement le message (sans métadonnées)
Fenêtre de terminal
# Format verbeux (tous les champs)
journalctl -u nginx -n 1 -o verbose
Sat 2026-06-28 06:32:15.123456 CEST [s=abc123;i=1;b=def456;m=789...]
_TRANSPORT=syslog
_UID=0
_GID=0
_SYSTEMD_UNIT=nginx.service
MESSAGE=Starting A high performance web server...
PRIORITY=6
SYSLOG_FACILITY=3
Fenêtre de terminal
# Format JSON pour un outil de centralisation
journalctl -u nginx -n 5 -o json

Le fichier de configuration principal est /etc/systemd/journald.conf :

Fenêtre de terminal
sudo nano /etc/systemd/journald.conf
[Journal]
# Persistance du journal (persistent, volatile, auto, none)
Storage=persistent
# Taille maximale du journal
SystemMaxUse=500M
# Taille maximale par fichier
SystemMaxFileSize=50M
# Durée maximale de rétention
MaxRetentionSec=3month
# Compression des anciens fichiers
Compress=yes
# Taux de limitation (messages par intervalle par service)
RateLimitIntervalSec=30s
RateLimitBurst=10000
OptionEffet
Storage=persistentLe journal survit aux reboots
SystemMaxUseTaille totale maximale du journal
SystemMaxFileSizeTaille maximale de chaque fichier journal
MaxRetentionSecDurée maximale de conservation
RateLimitBurstNombre max de messages par intervalle (par service)

Après modification :

Fenêtre de terminal
sudo systemctl restart systemd-journald
Fenêtre de terminal
# Réduire le journal à 200 Mo
sudo journalctl --vacuum-size=200M
Fenêtre de terminal
# Supprimer les logs de plus de 2 semaines
sudo journalctl --vacuum-time=2weeks
Fenêtre de terminal
# Garder uniquement les 5 derniers fichiers
sudo journalctl --vacuum-files=5
Fenêtre de terminal
# Vérifier l'espace après nettoyage
journalctl --disk-usage

Par défaut, seuls root et les membres du groupe systemd-journal peuvent lire le journal complet :

Fenêtre de terminal
# Ajouter un utilisateur au groupe
sudo usermod -aG systemd-journal mon-utilisateur

Les utilisateurs non privilégiés ne voient que les logs de leurs propres services (timers/services utilisateur).

journald peut sceller (seal) les fichiers pour détecter toute altération :

/etc/systemd/journald.conf
[Journal]
Seal=yes

Pour utiliser journald en parallèle d’un serveur syslog traditionnel (rsyslog, syslog-ng) :

[Journal]
ForwardToSyslog=yes
SymptômeCause probableSolution
Journal vide après rebootPersistance non configuréeCréer /var/log/journal/ et configurer Storage=persistent
No entries pour un serviceMauvais nom d’unitéVérifier avec systemctl list-units | grep nom
Suppressed N messagesRate limiting actifAugmenter RateLimitBurst ou corriger le service
Journal trop volumineuxPas de limite configuréeConfigurer SystemMaxUse et MaxRetentionSec
Utilisateur ne voit pas les logsPas dans le groupesudo usermod -aG systemd-journal user
Logs des boots précédents absentsJournal volatilActiver Storage=persistent
Fenêtre de terminal
# Diagnostic rapide
journalctl --disk-usage # Espace utilisé
journalctl --list-boots # Boots disponibles
journalctl -p err -b # Erreurs du boot actuel
systemctl status systemd-journald # État du démon
  • Toujours activer la persistance — sans /var/log/journal/, les logs sont perdus au reboot
  • Configurer SystemMaxUse — éviter que le journal remplisse le disque (200-500 Mo est un bon compromis)
  • Configurer MaxRetentionSec — 1 à 3 mois selon les besoins de conformité
  • Commencer le diagnostic par journalctl -p err -b — les erreurs du boot actuel sont le point de départ
  • Utiliser -u service pour cibler un service — ne pas parcourir tout le journal
  • Planifier le nettoyagejournalctl --vacuum-size ou --vacuum-time régulièrement
  • Centraliser les logs en production — journald seul ne suffit pas pour un audit ou une corrélation multi-serveurs
  • journalctl consulte le journal binaire de systemd — c’est l’outil de diagnostic principal sous Linux
  • Filtrer par service (-u), par priorité (-p), par date (--since) et par boot (-b) pour cibler les informations utiles
  • La persistance nécessite /var/log/journal/ et Storage=persistent dans journald.conf
  • Les priorités vont de 0 (emerg) à 7 (debug) — commencer par -p err en cas de problème
  • SystemMaxUse et MaxRetentionSec contrôlent la taille et la rétention du journal
  • journalctl --vacuum-size et --vacuum-time permettent de nettoyer manuellement
  • Le format JSON (-o json) facilite la centralisation vers Loki, Elasticsearch ou Graylog

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn