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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »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
Le journal systemd
Section intitulée « Le journal systemd »journald (systemd-journald) collecte les logs de trois sources :
| Source | Contenu |
|---|---|
| Messages du noyau | Équivalent de dmesg |
| Syslog | Messages des services via la socket /dev/log |
| stdout/stderr | Sorties 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).
# Vérifier l'espace utilisé par le journaljournalctl --disk-usageArchived and active journals take up 632.5M in the file system.Persistance du journal
Section intitulée « Persistance du journal »Sous le réglage par défaut Storage=auto, le journal devient persistant
dès que /var/log/journal/ existe :
# Vérifier que le répertoire existels -ld /var/log/journal/Si le répertoire n'existe pas, le journal est volatil (perdu au reboot). Pour activer la persistance, il faut quatre gestes, et le dernier est celui qu'on oublie :
sudo mkdir -p /var/log/journalsudo systemd-tmpfiles --create --prefix /var/log/journalsudo systemctl restart systemd-journaldsudo journalctl --flushConsulter les logs
Section intitulée « Consulter les logs »Sans aucun filtre, journalctl déverse la totalité du journal conservé, de l'entrée la plus ancienne à la plus récente, dans un pager (less) que l'on quitte avec q. Les options qui suivent servent à réduire ce flux à ce qui vous intéresse : un démarrage précis, une unité systemd, une fenêtre horaire. Elles se cumulent dans une même commande, chaque option ajoutée restreint un peu plus le résultat.
Logs du dernier boot
Section intitulée « Logs du dernier boot »journald numérote les démarrages du système : 0 désigne le boot en cours, -1 le précédent, et ainsi de suite vers le passé. L'option -b limite l'affichage à un démarrage donné, ce qui isole les messages d'un incident sans remonter tout l'historique. --list-boots affiche les démarrages conservés avec leur identifiant et leur plage horaire ; si cette liste ne contient qu'une seule ligne, le journal n'est pas persistant.
# Tous les logs depuis le dernier démarragejournalctl -b
# Logs du boot précédentjournalctl -b -1
# Lister les boots disponiblesjournalctl --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 CESTLogs d'un service
Section intitulée « Logs d'un service »L'option -u filtre sur une unité systemd, c'est-à-dire le nom du service tel que systemd le connaît (nginx.service, que l'on peut abréger en nginx). Répéter -u cumule plusieurs unités et affiche leurs messages entrelacés dans l'ordre chronologique, ce qui aide à corréler un serveur web et sa base de données pendant le même incident. Si la sortie affiche No entries, le nom de l'unité est presque toujours en cause.
# Logs de nginxjournalctl -u nginx
# Logs de nginx depuis le dernier bootjournalctl -u nginx -b
# Logs de plusieurs servicesjournalctl -u nginx -u postgresqlSuivre les logs en temps réel
Section intitulée « Suivre les logs en temps réel »L'option -f (follow) ne rend pas la main : elle affiche les nouvelles entrées au fur et à mesure que les services les écrivent, jusqu'à Ctrl+C. C'est le mode à lancer dans un second terminal avant de redémarrer un service, pour voir l'erreur au moment précis où elle se produit. Les options se combinent, -fu nginx suit un seul service en direct.
# Équivalent de tail -fjournalctl -f
# Suivre un service spécifiquejournalctl -fu nginxFiltrer par date
Section intitulée « Filtrer par date »--since et --until bornent la recherche dans le temps. Elles acceptent une date absolue au format AAAA-MM-JJ HH:MM comme une expression relative en anglais (1 hour ago, 30 min ago, yesterday, today), interprétée par rapport à l'heure courante de la machine. Si vous omettez --until, la borne haute est l'instant présent. C'est le moyen le plus rapide de cadrer un incident dont vous connaissez l'heure approximative.
# Depuis une datejournalctl --since "2026-06-28 08:00"
# Jusqu'à une datejournalctl --until "2026-06-28 12:00"
# Combinéjournalctl --since "1 hour ago"
# Les 30 dernières minutesjournalctl --since "30 min ago"
# Hierjournalctl --since yesterday --until todayFiltrer par priorité
Section intitulée « Filtrer par priorité »Le journal utilise les niveaux de priorité syslog (0 = le plus critique, 7 = le plus verbeux) :
| Niveau | Nom | Signification |
|---|---|---|
| 0 | emerg | Système inutilisable |
| 1 | alert | Action immédiate requise |
| 2 | crit | Erreur critique |
| 3 | err | Erreur |
| 4 | warning | Avertissement |
| 5 | notice | Normal mais significatif |
| 6 | info | Information |
| 7 | debug | Debug (très verbeux) |
# Erreurs et au-dessus (0 à 3)journalctl -p err
# Erreurs depuis le dernier bootjournalctl -p err -b
# Avertissements et au-dessus pour un servicejournalctl -u nginx -p warningRechercher dans les logs
Section intitulée « Rechercher dans les logs »--grep applique une expression régulière au champ MESSAGE des entrées, sans passer par un tube vers la commande grep. Le filtrage se fait pendant la lecture du journal binaire, donc plus vite, et les métadonnées de chaque entrée restent exploitables. La recherche est sensible à la casse dès que le motif contient une majuscule, et insensible sinon ; --case-sensitive=no force le comportement insensible dans tous les cas.
# Recherche textuelle (grep intégré)journalctl -b --grep "error|fail"
# Recherche insensible à la cassejournalctl -b --grep "timeout" --case-sensitive=noLogs du noyau
Section intitulée « Logs du noyau »L'option -k (alias --dmesg) restreint l'affichage aux messages émis par le noyau : détection du matériel au démarrage, erreurs de périphérique, manque de mémoire, paquets rejetés par le pare-feu. Là où dmesg numérote ses lignes en secondes écoulées depuis le boot, journalctl les horodate avec la date et l'heure réelles, ce qui permet de les recouper avec les logs applicatifs. Ajouter -b cible le démarrage en cours, indispensable après un incident matériel.
# Équivalent de dmesg avec horodatagejournalctl -k
# Messages noyau du boot actueljournalctl -k -bFormats de sortie
Section intitulée « Formats de sortie »journalctl propose plusieurs formats avec l'option -o :
| Format | Usage |
|---|---|
short | Format par défaut (similaire à syslog) |
short-precise | Avec microsecondes |
verbose | Tous les champs structurés |
json | JSON (pour parsing automatisé) |
json-pretty | JSON indenté (lecture humaine) |
cat | Uniquement le message (sans métadonnées) |
# Format verbeux (tous les champs)journalctl -u nginx -n 1 -o verboseSat 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# Format JSON pour un outil de centralisationjournalctl -u nginx -n 5 -o jsonConfiguration de journald
Section intitulée « Configuration de journald »Le fichier livré par la distribution est /usr/lib/systemd/journald.conf.
Sur AlmaLinux 10 et RHEL 10, /etc/systemd/journald.conf n'existe
pas : il ne faut donc pas l'éditer, mais déposer un drop-in.
sudo mkdir -p /etc/systemd/journald.conf.dsudo nano /etc/systemd/journald.conf.d/99-retention.confOptions essentielles
Section intitulée « Options essentielles »Le fichier suit le format INI : la section [Journal] en tête, puis une option par ligne. Une ligne commentée avec # n'est pas neutre au sens strict, elle laisse simplement l'option à sa valeur par défaut compilée dans systemd. Les réglages ci-dessous couvrent les quatre décisions à prendre sur un serveur : où stocker le journal, quelle taille lui accorder, combien de temps le conserver, et à quel rythme accepter les messages d'un service bavard.
[Journal]# Persistance du journal (persistent, volatile, auto, none)Storage=persistent
# Taille maximale du journalSystemMaxUse=500M
# Taille maximale par fichierSystemMaxFileSize=50M
# Durée maximale de rétentionMaxRetentionSec=3month
# Compression des anciens fichiersCompress=yes
# Taux de limitation (messages par intervalle par service)RateLimitIntervalSec=30sRateLimitBurst=10000| Option | Effet |
|---|---|
Storage=persistent | Le journal survit aux reboots |
SystemMaxUse | Taille totale maximale du journal |
SystemMaxFileSize | Taille maximale de chaque fichier journal |
MaxRetentionSec | Durée maximale de conservation |
RateLimitBurst | Nombre max de messages par intervalle (par service) |
Après modification, restart et pas reload :
sudo systemctl restart systemd-journaldsystemd-journald ne sait pas se recharger à chaud, et le dit :
Failed to reload systemd-journald.service: Job type reload is not applicablefor unit systemd-journald.service.SystemKeepFree peut annuler votre SystemMaxUse
Section intitulée « SystemKeepFree peut annuler votre SystemMaxUse »Le piège classique de cette section : SystemMaxUse fixe un plafond, mais
SystemKeepFree réserve une quantité d'espace libre sur le système de
fichiers, et c'est la contrainte la plus stricte des deux qui gagne.
Mesuré sur une racine offrant 16 434 Mo libres, avec SystemMaxUse=200M et
SystemKeepFree=16500M :
System Journal (/var/log/journal/4a8981f6...) is 16M, max 16M, 0B free.Le plafond effectif tombe à 16 Mo, alors que la configuration en demandait
200. Sans la ligne SystemKeepFree, la même machine annonce max 1.8G. Si
votre journal reste obstinément minuscule, c'est la première chose à vérifier.
Nettoyage du journal
Section intitulée « Nettoyage du journal »Les options --vacuum-* suppriment des fichiers journaux archivés, jamais le fichier actif en cours d'écriture. Le nettoyage est donc immédiat mais partiel : si un seul gros fichier actif occupe la place, forcez d'abord une rotation avec journalctl --rotate. Ces commandes exigent les droits root et n'ont aucun effet durable, le journal se remettra à grossir tant que SystemMaxUse n'est pas fixé dans la configuration.
Réduire par taille
Section intitulée « Réduire par taille »--vacuum-size supprime les fichiers archivés les plus anciens jusqu'à ce que le journal occupe au plus la taille demandée. La commande énumère chaque fichier supprimé puis annonce l'espace libéré, ce qui vous laisse une trace de ce que vous venez de perdre définitivement.
# Réduire le journal à 200 Mosudo journalctl --vacuum-size=200MRéduire par ancienneté
Section intitulée « Réduire par ancienneté »--vacuum-time raisonne sur la date des entrées et non sur le volume : tout fichier archivé dont la dernière entrée est plus ancienne que le délai indiqué est supprimé. Les unités acceptées vont de la seconde à l'année (s, m, h, days, weeks, months, years). C'est la variante à privilégier quand une politique de rétention vous impose une durée de conservation plutôt qu'une taille.
# Supprimer les logs de plus de 2 semainessudo journalctl --vacuum-time=2weeksRéduire par nombre de fichiers
Section intitulée « Réduire par nombre de fichiers »--vacuum-files ne garde que les N fichiers journaux les plus récents, sans considérer ni leur taille ni leur âge. Ce critère n'a de sens que si les fichiers ont une taille homogène, donc si SystemMaxFileSize est fixé. Les trois options --vacuum-* peuvent figurer dans la même commande, la contrainte la plus stricte l'emporte.
# Garder uniquement les 5 derniers fichierssudo journalctl --vacuum-files=5# Vérifier l'espace après nettoyagejournalctl --disk-usagePermissions
Section intitulée « Permissions »Par défaut, seuls root et les membres du groupe systemd-journal peuvent lire le journal complet :
# Ajouter un utilisateur au groupesudo usermod -aG systemd-journal mon-utilisateurLes utilisateurs non privilégiés ne voient que les logs de leurs propres services (timers/services utilisateur).
Journal et sécurité
Section intitulée « Journal et sécurité »Deux réglages de journald.conf concernent l'exploitation du journal en contexte d'audit. Le premier rend détectable toute modification du journal après coup, y compris par un attaquant qui aurait obtenu les droits root. Le second permet de continuer à alimenter une chaîne syslog existante, par exemple pour expédier les messages vers un collecteur distant que l'attaquant ne contrôle pas.
Vérifier l'intégrité
Section intitulée « Vérifier l'intégrité »journald peut sceller (seal) les fichiers pour détecter toute altération :
[Journal]Seal=yesForward vers syslog
Section intitulée « Forward vers syslog »Pour utiliser journald en parallèle d'un serveur syslog traditionnel (rsyslog, syslog-ng) :
[Journal]ForwardToSyslog=yesDépannage
Section intitulée « Dépannage »Les symptômes ci-dessous couvrent la quasi-totalité des blocages rencontrés sur le journal : plus rien après un redémarrage, service introuvable, messages supprimés, disque saturé. Lisez la colonne Cause probable avant d'appliquer la solution, plusieurs symptômes se ressemblent sans avoir la même origine. Deux commandes tranchent la plupart des cas : journalctl --list-boots pour savoir si le journal est persistant, et systemctl status systemd-journald pour vérifier que le démon tourne.
| Symptôme | Cause probable | Solution |
|---|---|---|
| Journal vide après reboot | Persistance non configurée | Créer /var/log/journal/, Storage=persistent, puis journalctl --flush |
/var/log/journal/ existe mais le journal reste volatil | journalctl --flush oublié, ou Storage=volatile | Lancer --flush ; vérifier systemd-analyze cat-config systemd/journald.conf |
Journal plafonné bien en dessous de SystemMaxUse | SystemKeepFree réserve plus d'espace libre que disponible | Lire la ligne is …, max …, … free au démarrage du service |
| Réglage sans effet, aucune erreur visible | Clé mal orthographiée, ignorée en silence | journalctl -u systemd-journald juste après le restart |
No entries pour un service | Mauvais nom d'unité | Vérifier avec systemctl list-units | grep nom |
Suppressed N messages | Rate limiting actif | Augmenter RateLimitBurst ou corriger le service |
| Journal trop volumineux | Pas de limite configurée | Configurer SystemMaxUse et MaxRetentionSec |
| Utilisateur ne voit pas les logs | Pas dans le groupe | sudo usermod -aG systemd-journal user |
| Logs des boots précédents absents | Journal volatil | Activer Storage=persistent |
# Diagnostic rapidejournalctl --disk-usage # Espace utiliséjournalctl --list-boots # Boots disponiblesjournalctl -p err -b # Erreurs du boot actuelsystemctl status systemd-journald # État du démonBonnes pratiques
Section intitulée « Bonnes pratiques »Ces réflexes évitent les deux ennuis les plus fréquents avec journald : un journal vidé au redémarrage juste au moment où vous en aviez besoin, et une partition /var saturée par des logs sans limite. Ils se posent à l'installation du serveur, pas pendant l'incident, car aucun de ces réglages ne reconstruit rétroactivement les entrées déjà perdues.
- 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 servicepour cibler un service, ne pas parcourir tout le journal - Planifier le nettoyage,
journalctl --vacuum-sizeou--vacuum-timerégulièrement - Centraliser les logs en production, journald seul ne suffit pas pour un audit ou une corrélation multi-serveurs
Mettre en pratique
Section intitulée « Mettre en pratique »Un journal qui disparaît au reboot, cela ne se constate qu'en redémarrant vraiment. Ce lab vous confie une VM au journal volatil : vous activez Storage=persistent, créez /var/log/journal/ et prouvez après un redémarrage que les boots précédents restent lisibles avec journalctl --list-boots.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- 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/,Storage=persistent, et surtoutjournalctl --flushque tout le monde oublie - Sur RHEL et AlmaLinux,
/etc/systemd/journald.confn'existe pas : passer par un drop-in sousjournald.conf.d/, sinon on masque tous les défauts SystemKeepFreepeut annulerSystemMaxUse: c'est la contrainte la plus stricte qui gagne- Les priorités vont de 0 (emerg) à 7 (debug), commencer par
-p erren cas de problème - SystemMaxUse et MaxRetentionSec contrôlent la taille et la rétention du journal
journalctl --vacuum-sizeet--vacuum-timepermettent de nettoyer manuellement- Le format JSON (
-o json) facilite la centralisation vers Loki, Elasticsearch ou Graylog