Aller au contenu

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 :

timedatectl status

Vérifiez la sortie pour des lignes comme :

Local time: Thu 2025-11-07 15:32:11 
Time zone: Europe/Paris (PAR, +0100)

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

journalctl --utc           # toujours UTC
journalctl -b --utc        # démarrage actuel, 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 :

sudo nano /etc/systemd/journald.conf

Décommentez et modifiez :

[Journal]
Storage=persistent

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

# --vacuum-size=100M
journalctl --vacuum-size=100M

Nettoyage des logs

Par taille

# --vacuum-files=5
journalctl --vacuum-files=5

Par temps

# --vacuum-time=1d
journalctl --vacuum-time=1d

Note

Suffixes supportés : s, m, h, days, weeks, months, years.

Limites persistantes (dans la configuration)

Éditez /etc/systemd/journald.conf :

- SystemMaxUse=1G
+ SystemMaxUse=500M

Après les modifications :

systemctl restart systemd-journald

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)

journalctl -u nginx | grep "error"

Analyse de la fréquence des événements

journalctl --since "2023-01-01" --until "2023-01-31" | grep "error" | wc -l

Exporter et sauvegarder

journalctl -b -u docker --no-pager > docker_boot.log

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).