Connexion dans systemd avec journalctl¶
Dans cet article
Dans les distributions Linux modernes (Ubuntu ≥ 16.04, Debian ≥ 8, RHEL/CentOS ≥ 7, Alma/Rocky ≥ 8), systemd ne gère pas seulement les services — il fournit également une journalisation centralisée via journald et l’utilitaire journalctl.
Le journal systemd collecte : - messages du noyau dmesg, - logs des services tels que nginx, sshd, docker, et d’autres, - flux standard stdoutstderr des daemons, - événements d’audit (si intégrés avec auditd).
Note
journald peut fonctionner en parallèle avec syslog (par ex., rsyslog ou syslog-ng) — les logs peuvent être dupliqués. Cependant, journald remplace souvent entièrement le syslog classique.
Démarrage rapide : commandes de base¶
| Tâche | Commande |
|---|---|
| Afficher tous les logs (avec paginage) | journalctl |
| Dernières 10 entrées | journalctl -n |
| Afficher les logs en temps réel | journalctl -f (analogue de tail -f) |
| Logs depuis le dernier démarrage | journalctl -b |
| Logs pour un service spécifique | journalctl -u nginx |
| Logs du noyau | journalctl -k |
| Espace disque utilisé par le journal | journalctl --disk-usage |
Temps et fuseaux horaires¶
Par défaut, journalctl affiche l’heure locale. Vérifiez qu’elle est correctement configurée :
Vérifiez la sortie pour des lignes comme :
Gestion du fuseau horaire¶
# Lister tous les fuseaux horaires disponibles
timedatectl list-timezones
# Définir (par ex., pour Berlin)
sudo timedatectl set-timezone Europe/Berlin
Affichage des logs en UTC¶
Historique du démarrage¶
Par défaut, les logs des démarrages précédents ne sont pas conservés (ils ne sont stockés que dans /run/log/journal/, qui est effacé au redémarrage). Pour les conserver, activez le stockage persistant :
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Ou modifiez la configuration manuellement :
Décommentez et modifiez :
Travailler avec les démarrages¶
# Lister tous les démarrages enregistrés
journalctl --list-boots
# Sortie :
# -2 abc123... Wed 2025-11-05 10:00:00 MSK—Wed 12:30:45 MSK
# -1 def456... Thu 2025-11-06 09:15:22 MSK—Thu 18:44:10 MSK
# 0 xyz789... Fri 2025-11-07 08:20:05 MSK—running
# Logs du démarrage précédent
journalctl -b -1
# Logs par ID de démarrage
journalctl -b xyz789...
Filtrage des logs¶
Par date¶
# Depuis un point spécifié jusqu'à maintenant
journalctl --since "2025-11-07 14:00:00"
# Pour une période
journalctl --since "2025-11-06" --until "2025-11-07 09:00:00"
# Mots-clés pratiques
journalctl --since today
journalctl --since yesterday
journalctl --since "2 hours ago"
journalctl --until now
Note
Formats supportés : YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, today, yesterday, 1 hour ago, 5min ago.
Par service (unité)¶
# Nginx logs
journalctl -u nginx
# With .service extension (optional but correct)
journalctl -u nginx.service
# Multiple services at once
journalctl -u nginx -u php-fpm --since today
# Only nginx errors from the last 2 hours
journalctl -u nginx -p err --since "2 hours ago"
Par processus, utilisateur, groupe¶
# By PID (e.g., nginx master process)
journalctl _PID=12345
# By UID of a user
journalctl _UID=33 # e.g., www-data
journalctl _UID=$(id -u nginx)
# List all UIDs with entries
journalctl -F _UID
# Similarly for GID
journalctl -F _GID
Par niveau de priorité (sévérité)¶
| Niveau | Code | Description |
|---|---|---|
emerg | 0 | Le système est inutilisable |
alert | 1 | Action immédiate requise |
crit | 2 | Erreurs critiques |
err | 3 | Erreurs |
warning | 4 | Avertissements |
notice | 5 | Événements significatifs |
info | 6 | Messages informatifs |
debug | 7 | Débogage |
Exemples :
# Only errors and higher (err, crit, alert, emerg)
journalctl -p err
# Same via numeric code
journalctl -p 3
# Nginx errors for the current boot
journalctl -u nginx -p err -b
Formatage de la sortie¶
Options principales
--no-pager # sortie vers stdout (pour grep, tee, redirection)
--no-full # ne pas tronquer les lignes longues (par défaut tronquées)
-n 50 # 50 dernières entrées
-f # suivre (vue en temps réel des nouvelles entrées)
Formatage de la sortie¶
Formats -o¶
| Format | Usage |
|---|---|
short (défaut) | Style classique syslog |
short-iso | Heure en ISO 8601 : 2025-01-07T15:30:45+03:00 |
short-precise | Heure avec microsecondes |
cat | Seulement le texte du message (sans métadonnées) — pratique pour les scripts |
json | JSON, une entrée par ligne (lisible par machine) |
json-pretty | JSON lisible par l’homme (pour le débogage/analyse) |
verbose | Tous les champs, y compris les champs cachés _SOURCE_REALTIME_TIMESTAMP, _BOOT_ID, etc. |
Exemples :
# JSON lisible par l’homme pour nginx
journalctl -u nginx -o json-pretty --since today
# Seulement le texte du message
journalctl -u nginx -p err -o cat
# Exporter vers un fichier pour analyse
journalctl -b -u docker --no-pager > docker_boot.log
Gestion de la taille du journal¶
Taille actuelle¶
Nettoyage des logs¶
Par taille¶
Par temps¶
Note
Suffixes supportés : s, m, h, days, weeks, months, years.
Limites persistantes (dans la configuration)¶
Éditez /etc/systemd/journald.conf :
Après les modifications :
Note
Les modifications apportées à journald.conf n’affectent pas les journaux déjà accumulés — utilisez --vacuum-* pour nettoyer.
Techniques avancées¶
Recherche par contenu (avec grep)¶
Analyse de la fréquence des événements¶
Exporter et sauvegarder¶
Questions fréquentes¶
Q : Pourquoi journalctl n'affiche-t-il pas les journaux des redémarrages précédents ?
A : Vérifiez si Storage=persistent est activé et si /var/log/journal/ existe. Sans cela, les journaux ne sont conservés que dans la RAM /run.
Q : Comment désactiver journald et revenir à rsyslog ?
A : Vous ne pouvez pas désactiver complètement journald (il fait partie de systemd), mais vous pouvez :
- Rediriger les journaux vers rsyslog via /etc/systemd/journald.conf ou en utilisant systemd-journald avec SystemMaxUse=0 pour désactiver la journalisation.
- Ou désactiver journald comme source pour rsyslog, ne laissant que celui-ci.
Q : Les journaux peuvent-ils être chiffrés ?
A : journald ne prend pas en charge le chiffrement hors de la boîte. Pour cela, utilisez :
- logrotate + gpg,
- Ou des systèmes SIEM tiers (Graylog, ELK, Loki + Promtail).