Configurazione dei Limiti del Journal di Systemd: Ottimizzazione dell'Uso del Disco e Rotazione dei Log
Configura le dimensioni del journal di systemd e i limiti di conservazione con `journald.conf`, `journalctl` e comandi sicuri per la pulizia dei log.
Configurazione dei Limiti del Journal di Systemd: Ottimizzazione dell'Uso del Disco e Rotazione dei Log
I log di sistema sono utili finché non riempiono silenziosamente il disco. Sui sistemi Linux che utilizzano systemd, systemd-journald memorizza log indicizzati e può imporre limiti di dimensione e età in modo che il journal mantenga una cronologia sufficiente senza occupare spazio a scapito del resto del sistema.
Questa guida mostra dove configurare i limiti del journal di systemd, come differiscono l'archiviazione persistente e volatile, e come verificare la pulizia con journalctl.
Comprendere le Modalità di Archiviazione del Journal
Prima di impostare i limiti, è essenziale capire dove il journal memorizza i suoi log. systemd-journald supporta due modalità di archiviazione principali, definite dalla direttiva Storage= in journald.conf.
1. Archiviazione Volatile (/run/log/journal)
L'archiviazione volatile mantiene i log in un filesystem temporaneo, tipicamente tmpfs o una directory basata su memoria. I log memorizzati qui vengono persi al riavvio del sistema.
- Caso d'Uso: Log altamente temporanei, ambienti con risorse limitate dove non è necessaria una cronologia persistente.
- Configurazione: Imposta
Storage=volatile.
2. Archiviazione Persistente (/var/log/journal)
L'archiviazione persistente garantisce che i log sopravvivano ai riavvii del sistema, rendendola la scelta standard per server e sistemi di produzione. La directory /var/log/journal viene creata se non esiste già.
- Caso d'Uso: Sistemi di produzione che richiedono tracce di audit e analisi storiche.
- Configurazione: Imposta
Storage=persistentoStorage=auto(predefinito, che attiva l'archiviazione persistente se/var/log/journalesiste).
Suggerimento: Se il sistema è configurato per
Storage=autoe/var/log/journalnon esiste, i log verranno archiviati in modo volatile fino alla creazione della directory persistente.
Il File di Configurazione Principale
Tutti i limiti e i comportamenti principali per systemd-journald sono controllati tramite il file di configurazione principale, solitamente situato in /etc/systemd/journald.conf.
# Modifica il file di configurazione principale
sudo nano /etc/systemd/journald.conf
Per garantire che gli aggiornamenti futuri del pacchetto non sovrascrivano le tue personalizzazioni, è buona pratica creare un file di override nella directory /etc/systemd/journald.conf.d/. Ad esempio, crea /etc/systemd/journald.conf.d/01-custom-limits.conf.
Implementazione dei Limiti di Dimensione per l'Ottimizzazione del Disco
Il metodo più comune per controllare la crescita del journal è impostare limiti massimi di utilizzo del disco. Quando la dimensione specificata viene superata, journald inizia automaticamente a eliminare i log archiviati più vecchi fino a raggiungere il limite.
SystemMaxUse (Il Limite Persistente Assoluto)
Questa direttiva definisce lo spazio totale massimo su disco che i file di journal persistenti (/var/log/journal) possono occupare. Questo è il meccanismo principale per controllare l'uso persistente del disco.
I file di journal verranno ruotati e puliti se la dimensione totale supera questo valore. Le unità comuni includono K (kilobyte), M (megabyte), G (gigabyte) e T (terabyte).
| Direttiva | Descrizione | Valore di Esempio |
|---|---|---|
SystemMaxUse |
Dimensione massima per i dati di journal persistenti. | 500M o 2G |
Configurazione di Esempio:
Per limitare l'archiviazione persistente del journal a un massimo di 1 Gigabyte:
[Journal]
SystemMaxUse=1G
SystemKeepFree (Buffer di Sicurezza del Disco)
Mentre SystemMaxUse imposta un limite, SystemKeepFree funge da misura di sicurezza cruciale. Specifica la quantità minima di spazio su disco che dovrebbe rimanere libera sul filesystem contenente i file di journal.
Se lo spazio libero disponibile scende al di sotto del valore di SystemKeepFree, journald pulirà i log, anche se il limite di SystemMaxUse non è stato ancora raggiunto. Questo impedisce che la crescita dei log riempia completamente il disco e blocchi le operazioni critiche del sistema.
| Direttiva | Descrizione | Valore di Esempio |
|---|---|---|
SystemKeepFree |
Spazio libero minimo richiesto sul filesystem del journal. | 10% o 4G |
Buona Pratica: È altamente raccomandato impostare sia SystemMaxUse che SystemKeepFree. Utilizza una percentuale (%) per SystemKeepFree su dischi di grandi dimensioni per una migliore scalabilità.
RuntimeMaxUse (Limite di Archiviazione Volatile)
Se stai utilizzando l'archiviazione volatile (/run/log/journal), o se sei interessato a controllare l'uso della memoria/tmpfs anche con l'archiviazione persistente abilitata, utilizza RuntimeMaxUse. Questo controlla lo spazio su disco utilizzato dai file di journal volatili, che sono temporanei e risiedono in memoria o tmpfs.
| Direttiva | Descrizione | Valore di Esempio |
|---|---|---|
RuntimeMaxUse |
Dimensione massima per i dati di journal volatili. | 300M |
Implementazione dei Limiti di Tempo per la Conservazione dei Log
I limiti basati sulla dimensione garantiscono che lo spazio su disco sia mantenuto, ma non garantiscono l'età dei log. Se il volume dei log è basso, i log potrebbero persistere indefinitamente. I limiti basati sul tempo garantiscono che i log vengano ruotati dopo una durata specifica, indipendentemente dalla dimensione totale.
MaxRetentionSec
Questa direttiva specifica il tempo massimo per cui i log devono essere conservati. Qualsiasi log più vecchio di questa durata verrà automaticamente eliminato, complementando i limiti di dimensione.
| Direttiva | Descrizione | Valore di Esempio |
|---|---|---|
MaxRetentionSec |
Età massima dei log da conservare. | 30 days, 1 month, 2 weeks |
Configurazione di Esempio:
Per garantire che i log non siano mai più vecchi di 30 giorni e che l'archiviazione persistente totale non superi mai 5 Gigabyte:
[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days
Nota: Se
MaxRetentionSecè impostato a 30 giorni eSystemMaxUseè impostato a 5G, journald rispetterà il limite che viene raggiunto per primo. Se il limite di 5G viene raggiunto in 10 giorni, i log più vecchi di 10 giorni vengono eliminati, sovrascrivendo la politica di conservazione di 30 giorni.
Passaggi Pratici: Applicazione e Verifica della Configurazione
1. Controlla l'Uso Attuale del Journal
Prima di apportare modifiche, controlla l'uso attuale del disco del journal:
journalctl --disk-usage
Output di Esempio:
Journals take up 3.4G of disk space.
2. Configura i Limiti
Modifica /etc/systemd/journald.conf (o il tuo file di override) e decommenta/imposta le direttive desiderate. Ad esempio, per garantire un uso massimo di 500MB e una conservazione di 30 giorni:
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days
3. Riavvia il Servizio Journal
Affinché le modifiche abbiano effetto, il servizio systemd-journald deve essere riavviato. Questo non influisce sulla registrazione attiva, ma dice al demone di applicare immediatamente i nuovi vincoli di dimensione e avviare il processo di pulizia.
sudo systemctl restart systemd-journald
4. Forza Manualmente la Pulizia
Se lo spazio su disco deve essere recuperato immediatamente in base ai nuovi limiti, il riavvio del servizio è spesso sufficiente. In alternativa, puoi pulire esplicitamente i file utilizzando journalctl.
Per pulire i log e recuperare spazio, lasciando solo gli ultimi 500MB:
sudo journalctl --vacuum-size=500M
Per pulire i log più vecchi di 7 giorni:
sudo journalctl --vacuum-time=7d
Riepilogo delle Direttive Chiave
| Direttiva | Ambito | Scopo |
|---|---|---|
Storage |
Globale | Definisce la posizione di archiviazione (persistente, volatile, auto). |
SystemMaxUse |
Persistente (/var/log/journal) |
Dimensione totale massima assoluta per i log persistenti. |
SystemKeepFree |
Persistente (/var/log/journal) |
Garantisce che rimanga una quantità minima di spazio libero sul disco. |
RuntimeMaxUse |
Volatile (/run/log/journal) |
Dimensione totale massima assoluta per i log volatili (runtime). |
MaxRetentionSec |
Entrambi | Definisce l'età massima per i log conservati. |
Conclusione
Imposta i limiti del journal prima che i log diventino un problema di interruzione. Per la maggior parte dei server, utilizza un drop-in in /etc/systemd/journald.conf.d/, imposta SystemMaxUse più SystemKeepFree, aggiungi MaxRetentionSec se hai un obiettivo di conservazione, riavvia systemd-journald e conferma il risultato con journalctl --disk-usage.