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 »Par défaut sur la plupart des distributions, le journal est persistant si /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 :
sudo mkdir -p /var/log/journalsudo systemd-tmpfiles --create --prefix /var/log/journalsudo systemctl restart systemd-journaldConsulter les logs
Section intitulée « Consulter les logs »Logs du dernier boot
Section intitulée « Logs du dernier boot »# 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 »# 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 »# Équivalent de tail -fjournalctl -f
# Suivre un service spécifiquejournalctl -fu nginxFiltrer par date
Section intitulée « Filtrer par date »# 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 »# 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 »# É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 de configuration principal est /etc/systemd/journald.conf :
sudo nano /etc/systemd/journald.confOptions essentielles
Section intitulée « Options essentielles »[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 :
sudo systemctl restart systemd-journaldNettoyage du journal
Section intitulée « Nettoyage du journal »Réduire par taille
Section intitulée « Réduire par taille »# Réduire le journal à 200 Mosudo journalctl --vacuum-size=200MRéduire par ancienneté
Section intitulée « Réduire par ancienneté »# 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 »# 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é »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 »| Symptôme | Cause probable | Solution |
|---|---|---|
| Journal vide après reboot | Persistance non configurée | Créer /var/log/journal/ et configurer Storage=persistent |
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 »- 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
À 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/etStorage=persistentdansjournald.conf - 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