Configuration avancée de journald¶
La page Journal et logging présente les commandes journalctl et les paramètres de base. Cette page couvre la configuration fine de /etc/systemd/journald.conf : stratégies de stockage, limites de taille, rate-limiting, forwarding, compression et scellement cryptographique.
Le fichier de référence est /etc/systemd/journald.conf. Des surcharges peuvent être placées dans /etc/systemd/journald.conf.d/*.conf pour une gestion modulaire (recommandé en production).
# Voir la configuration effective (valeurs réelles après fusion des surcharges)
systemd-analyze cat-config systemd/journald.conf
Stratégie de stockage (Storage=)¶
| Valeur | Comportement |
|---|---|
auto | Persistant si /var/log/journal/ existe, volatile sinon (défaut) |
persistent | Toujours dans /var/log/journal/, crée le dossier si nécessaire |
volatile | Uniquement dans /run/log/journal/ (RAM, perdu au reboot) |
none | Aucun stockage ; les messages sont quand même transmis aux sockets |
Activer la persistance de façon propre¶
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Surcharge minimale recommandée
Plutôt que de modifier le fichier principal, créer :
Limites de taille¶
Deux ensembles de limites coexistent : l'un pour le stockage persistant (/var/log/journal/), l'autre pour le stockage volatile (/run/log/journal/).
[Journal]
# --- Stockage persistant ---
# Taille totale maximale des fichiers journal sur disque
SystemMaxUse=2G
# Espace libre minimum à conserver sur la partition
SystemKeepFree=1G
# Taille maximale d'un seul fichier journal
SystemMaxFileSize=128M
# Nombre maximal de fichiers journal archivés
SystemMaxFiles=100
# --- Stockage volatile ---
RuntimeMaxUse=256M
RuntimeKeepFree=512M
RuntimeMaxFileSize=32M
RuntimeMaxFiles=10
Priorité des limites
systemd-journald applique la plus restrictive entre SystemMaxUse et la taille laissée libre par SystemKeepFree. Si la partition est déjà bien remplie, le journal peut occuper moins que SystemMaxUse.
Calibrer les limites selon le contexte¶
| Contexte | SystemMaxUse | MaxRetentionSec | Remarques |
|---|---|---|---|
| Serveur de production | 4-8 G | 3 mois | Garder suffisamment pour les audits |
| Container / VM légère | 128-256 M | 1 semaine | Espace disque limité |
| Poste de travail | 1-2 G | 1 mois | Valeurs raisonnables par défaut |
| Serveur de logs centralisé | 50-200 G | 1 an | Adapter à la rétention réglementaire |
Rotation et rétention¶
[Journal]
# Durée maximale de rétention des entrées
MaxRetentionSec=1month
# Intervalle de rotation des fichiers
MaxFileSec=1week
# Rotation manuelle (signal ou commande)
# journalctl --rotate
Les valeurs acceptées pour les durées : s (secondes), min, h, days, weeks, months, years.
# Forcer une rotation immédiate sans redémarrer journald
sudo journalctl --rotate
# Puis nettoyer les anciens fichiers
sudo journalctl --vacuum-time=30d
Rate-limiting¶
Le rate-limiting protège journald contre les services qui génèrent un volume excessif de messages en rafale. Il fonctionne par service (par cgroup).
[Journal]
# Fenêtre de temps pour le calcul du débit
RateLimitIntervalSec=30s
# Nombre maximum de messages par fenêtre et par service
RateLimitBurst=10000
Quand un service dépasse la limite, journald émet un message de synthèse indiquant combien de messages ont été supprimés, puis reprend la collecte.
Adapter selon le type de service¶
# Pour un serveur très verbeux (ex. base de données, proxy)
RateLimitIntervalSec=30s
RateLimitBurst=50000
# Pour désactiver le rate-limiting (déconseillé en production)
RateLimitIntervalSec=0
Rate-limiting par service
Il est possible de surcharger le rate-limiting pour un service spécifique directement dans l'unité systemd :
Compression et scellement¶
[Journal]
# Compresser les entrées volumineuses (> quelques Ko)
Compress=yes
# Scellement cryptographique Forward Secure Sealing (FSS)
# Permet de détecter toute altération des fichiers journaux
Seal=yes
Forward Secure Sealing (FSS)¶
Le scellement FSS utilise une clé de vérification publique/privée pour garantir l'intégrité des entrées passées. Une fois une entrée scellée, la supprimer ou la modifier est détectable.
# Générer une paire de clés FSS
sudo journalctl --setup-keys
# Vérifier l'intégrité d'un journal scellé
sudo journalctl --verify
La clé de vérification (publique) peut être stockée hors du système pour les audits de conformité.
Forwarding — envoi vers d'autres destinations¶
[Journal]
# Transmettre à syslog (rsyslog, syslog-ng…)
ForwardToSyslog=no
# Transmettre au buffer noyau kmsg (/dev/kmsg)
ForwardToKMsg=no
# Afficher sur la console (utile pour le debug boot)
ForwardToConsole=no
# TTY cible si ForwardToConsole=yes
TTYPath=/dev/console
# Afficher les messages critiques sur tous les terminaux connectés (wall)
ForwardToWall=yes
Cohabitation avec rsyslog ou syslog-ng¶
Si rsyslog ou syslog-ng est présent sur la machine, deux configurations sont possibles :
Option A — journald collecte tout, syslog lit depuis le journal (recommandé)
rsyslog utilise son module imjournal pour lire directement depuis le journal sans duplication.
Option B — double pipeline (compatibilité maximale)
journald retransmet chaque message sur le socket /run/systemd/journal/syslog. Attention à la duplication potentielle dans les fichiers syslog.
Niveaux de log maximaux par destination¶
[Journal]
# Niveau maximum stocké dans le journal
MaxLevelStore=debug
# Niveau maximum retransmis à syslog
MaxLevelSyslog=warning
# Niveau maximum retransmis à kmsg
MaxLevelKMsg=notice
# Niveau maximum retransmis à la console
MaxLevelConsole=info
# Niveau maximum diffusé via wall
MaxLevelWall=emerg
Cela permet par exemple de stocker tous les niveaux dans le journal persistant tout en n'envoyant que les erreurs vers syslog.
Paramètres réseau (journal distant entrant)¶
Ces paramètres concernent systemd-journald lorsqu'il est configuré pour recevoir des logs depuis le réseau (mode journal distant). La configuration détaillée de systemd-journal-remote et systemd-journal-upload est documentée dans Journal centralisé.
Recettes de configuration par profil¶
Serveur de production minimal¶
# /etc/systemd/journald.conf.d/production.conf
[Journal]
Storage=persistent
Compress=yes
Seal=yes
SystemMaxUse=4G
SystemKeepFree=2G
SystemMaxFileSize=256M
SystemMaxFiles=50
MaxRetentionSec=3months
RateLimitIntervalSec=30s
RateLimitBurst=20000
ForwardToSyslog=no
ForwardToWall=yes
Container ou VM légère¶
# /etc/systemd/journald.conf.d/container.conf
[Journal]
Storage=volatile
Compress=yes
RuntimeMaxUse=64M
RuntimeKeepFree=32M
MaxRetentionSec=1week
RateLimitIntervalSec=30s
RateLimitBurst=1000
ForwardToSyslog=no
ForwardToWall=no
Debug temporaire (à ne pas laisser en production)¶
# /etc/systemd/journald.conf.d/debug.conf
[Journal]
MaxLevelStore=debug
RateLimitIntervalSec=0
ForwardToConsole=yes
TTYPath=/dev/tty12
# Activer temporairement, puis supprimer après diagnostic
sudo systemctl restart systemd-journald
# ... investigation ...
sudo rm /etc/systemd/journald.conf.d/debug.conf
sudo systemctl restart systemd-journald
Vérifier la configuration effective¶
# Valeurs finales après fusion de tous les fichiers .conf.d
systemd-analyze cat-config systemd/journald.conf
# Afficher les paramètres du journal en cours d'exécution
journalctl --header
# Espace occupé
journalctl --disk-usage
# Statut du démon
systemctl status systemd-journald
Appliquer un changement sans reboot¶
# Redémarrage propre de journald (peut provoquer une courte interruption de collecte)
sudo systemctl restart systemd-journald
# Rechargement de configuration (sans interruption, pour certains paramètres)
sudo systemctl reload systemd-journald
Changement de Storage=
Passer de volatile à persistent (ou l'inverse) nécessite de créer ou supprimer /var/log/journal/ et de redémarrer systemd-journald. Un simple reload ne suffit pas.
Voir aussi¶
- Journal et logging — vue d'ensemble et commandes
journalctl - Journal centralisé —
systemd-journal-remoteetsystemd-journal-upload man journald.conf— référence complète de toutes les optionsman systemd-journald.service— documentation du démon