Configuration des limites du journal systemd : Optimisation de l'utilisation du disque et rotation des logs
Configurez la taille et les limites de rétention du journal systemd avec `journald.conf`, `journalctl` et des commandes sécurisées de nettoyage des logs.
Configuration des limites du journal systemd : Optimisation de l'utilisation du disque et rotation des logs
Les logs système sont utiles jusqu'à ce qu'ils remplissent silencieusement le disque. Sur les systèmes Linux utilisant systemd, systemd-journald stocke les logs indexés et peut imposer des limites de taille et d'âge afin que votre journal conserve suffisamment d'historique sans encombrer le reste du système.
Ce guide montre où configurer les limites du journal systemd, en quoi le stockage persistant et volatil diffèrent, et comment vérifier le nettoyage avec journalctl.
Comprendre les modes de stockage du journal
Avant de définir des limites, il est essentiel de comprendre où le journal stocke ses logs. systemd-journald prend en charge deux modes de stockage principaux, définis par la directive Storage= dans journald.conf.
1. Stockage volatil (/run/log/journal)
Le stockage volatil conserve les logs dans un système de fichiers temporaire, généralement tmpfs ou un répertoire basé sur la mémoire. Les logs stockés ici sont perdus lors du redémarrage du système.
- Cas d'utilisation : Logs hautement temporaires, environnements à ressources limitées où un historique persistant n'est pas nécessaire.
- Configuration : Définissez
Storage=volatile.
2. Stockage persistant (/var/log/journal)
Le stockage persistant garantit que les logs survivent aux redémarrages du système, ce qui en fait le choix standard pour les serveurs et les systèmes de production. Le répertoire /var/log/journal est créé s'il n'existe pas déjà.
- Cas d'utilisation : Systèmes de production nécessitant des pistes d'audit et une analyse historique.
- Configuration : Définissez
Storage=persistentouStorage=auto(par défaut, qui active le stockage persistant si/var/log/journalexiste).
Astuce : Si le système est configuré pour
Storage=autoet que/var/log/journaln'existe pas, les logs seront par défaut stockés de manière volatile jusqu'à ce que le répertoire persistant soit créé.
Le fichier de configuration principal
Toutes les limites et comportements principaux de systemd-journald sont contrôlés via le fichier de configuration principal, généralement situé dans /etc/systemd/journald.conf.
# Modifier le fichier de configuration principal
sudo nano /etc/systemd/journald.conf
Pour garantir que les futures mises à jour du paquet n'écrasent pas vos personnalisations, il est recommandé de créer un fichier de remplacement dans le répertoire /etc/systemd/journald.conf.d/. Par exemple, créez /etc/systemd/journald.conf.d/01-custom-limits.conf.
Implémenter les limites de taille pour l'optimisation du disque
La méthode la plus courante pour contrôler la croissance du journal consiste à définir des limites maximales d'utilisation du disque. Lorsque la taille spécifiée est dépassée, journald commence automatiquement à supprimer les fichiers journaux archivés les plus anciens jusqu'à ce que la limite soit atteinte.
SystemMaxUse (La limite persistante absolue)
Cette directive définit l'espace disque total maximum que les fichiers journaux persistants (/var/log/journal) peuvent occuper. C'est le mécanisme principal pour contrôler l'utilisation persistante du disque.
Les fichiers journaux seront pivotés et nettoyés si la taille totale dépasse cette valeur. Les unités courantes incluent K (kilooctets), M (mégaoctets), G (gigaoctets) et T (téraoctets).
| Directive | Description | Exemple de valeur |
|---|---|---|
SystemMaxUse |
Taille max pour les données persistantes du journal. | 500M ou 2G |
Exemple de configuration :
Pour limiter le stockage persistant du journal à un maximum de 1 Gigaoctet :
[Journal]
SystemMaxUse=1G
SystemKeepFree (Tampon de sécurité du disque)
Alors que SystemMaxUse définit un plafond, SystemKeepFree agit comme une mesure de sécurité cruciale. Il spécifie la quantité minimale d'espace disque qui doit rester libre sur le système de fichiers contenant les fichiers journaux.
Si l'espace libre disponible descend en dessous de la valeur SystemKeepFree, journald nettoiera les logs, même si la limite SystemMaxUse n'a pas encore été atteinte. Cela empêche la croissance des logs de remplir complètement le disque et de bloquer les opérations critiques du système.
| Directive | Description | Exemple de valeur |
|---|---|---|
SystemKeepFree |
Espace libre minimum requis sur le système de fichiers du journal. | 10% ou 4G |
Meilleure pratique : Il est fortement recommandé de définir à la fois SystemMaxUse et SystemKeepFree. Utilisez un pourcentage (%) pour SystemKeepFree sur les grands disques pour une meilleure évolutivité.
RuntimeMaxUse (Limite de stockage volatil)
Si vous utilisez un stockage volatil (/run/log/journal), ou si vous souhaitez contrôler l'utilisation de la mémoire/tmpfs même avec un stockage persistant activé, utilisez RuntimeMaxUse. Cela contrôle l'espace disque utilisé par les fichiers journaux volatils, qui sont temporaires et résident en mémoire ou dans tmpfs.
| Directive | Description | Exemple de valeur |
|---|---|---|
RuntimeMaxUse |
Taille max pour les données volatiles du journal. | 300M |
Implémenter les limites de temps pour la rétention des logs
Les limites basées sur la taille garantissent que l'espace disque est maintenu, mais elles ne garantissent pas l'âge des logs. Si le volume de logs est faible, les logs peuvent persister indéfiniment. Les limites basées sur le temps garantissent que les logs sont supprimés après une durée spécifique, indépendamment de la taille totale.
MaxRetentionSec
Cette directive spécifie le temps maximum pendant lequel les logs doivent être conservés. Tous les logs plus anciens que cette durée seront automatiquement purgés, complétant ainsi les limites de taille.
| Directive | Description | Exemple de valeur |
|---|---|---|
MaxRetentionSec |
Âge maximum des logs à conserver. | 30 days, 1 month, 2 weeks |
Exemple de configuration :
Pour garantir que les logs ne soient jamais plus anciens que 30 jours et que le stockage persistant total ne dépasse jamais 5 Gigaoctets :
[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days
Remarque : Si
MaxRetentionSecest défini sur 30 jours etSystemMaxUsesur 5G, journald respectera la limite qui est atteinte en premier. Si la limite de 5G est atteinte en 10 jours, les logs plus anciens que 10 jours sont purgés, remplaçant la politique de rétention de 30 jours.
Étapes pratiques : Application et vérification de la configuration
1. Vérifier l'utilisation actuelle du journal
Avant d'apporter des modifications, vérifiez l'utilisation actuelle du disque par le journal :
journalctl --disk-usage
Exemple de sortie :
Journals take up 3.4G of disk space.
2. Configurer les limites
Modifiez /etc/systemd/journald.conf (ou votre fichier de remplacement) et décommentez/définissez les directives souhaitées. Par exemple, pour garantir une utilisation maximale de 500 Mo et une rétention de 30 jours :
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days
3. Redémarrer le service de journal
Pour que les modifications prennent effet, le service systemd-journald doit être redémarré. Cela n'affecte pas la journalisation active, mais indique au démon d'appliquer immédiatement les nouvelles contraintes de taille et de démarrer le processus de nettoyage.
sudo systemctl restart systemd-journald
4. Forcer manuellement le nettoyage
Si de l'espace disque doit être récupéré immédiatement en fonction des nouvelles limites, le redémarrage du service est souvent suffisant. Alternativement, vous pouvez nettoyer explicitement les fichiers en utilisant journalctl.
Pour nettoyer les logs et libérer de l'espace, en ne laissant que les 500 derniers Mo :
sudo journalctl --vacuum-size=500M
Pour nettoyer les logs plus anciens que 7 jours :
sudo journalctl --vacuum-time=7d
Résumé des directives clés
| Directive | Portée | Objectif |
|---|---|---|
Storage |
Global | Définit l'emplacement de stockage (persistant, volatil, auto). |
SystemMaxUse |
Persistant (/var/log/journal) |
Taille totale maximale absolue pour les logs persistants. |
SystemKeepFree |
Persistant (/var/log/journal) |
Garantit qu'une quantité minimale d'espace disque libre reste disponible. |
RuntimeMaxUse |
Volatil (/run/log/journal) |
Taille totale maximale absolue pour les logs volatils (d'exécution). |
MaxRetentionSec |
Les deux | Définit l'âge maximum pour les logs conservés. |
À retenir
Définissez les limites du journal avant que les logs ne deviennent une panne. Pour la plupart des serveurs, utilisez un fichier de remplacement dans /etc/systemd/journald.conf.d/, définissez SystemMaxUse plus SystemKeepFree, ajoutez MaxRetentionSec si vous avez un objectif de rétention, redémarrez systemd-journald, et confirmez le résultat avec journalctl --disk-usage.