Gestione dei log con Logrotate su Debian
Come configurare correttamente la rotazione dei log per mantenere il sistema pulito e prevenire il riempimento del disco.
Logrotate è uno degli strumenti fondamentali per l'amministrazione di sistema Linux. Ruota, comprime e rimuove automaticamente i vecchi file di log, aiutandoti a mantenere l'ordine nel sistema e a prevenire il riempimento del disco. Che tu gestisca server privati virtuali o server dedicati, una corretta configurazione della rotazione dei log garantisce stabilità e prevedibilità dei tuoi servizi.
Su Debian 9 e versioni successive, logrotate è installato per impostazione predefinita e già configurato per la maggior parte dei servizi di sistema.
Verifica dell'installazione
logrotate --version
Output atteso:
logrotate 3.11.0
Struttura della configurazione
Logrotate utilizza due posizioni principali:
/etc/logrotate.conf— file di configurazione principale con i parametri globali predefiniti/etc/logrotate.d/— directory contenente i file di configurazione individuali per servizi e applicazioni specifici
Esempio di configurazione per APT (in /etc/logrotate.d/apt):
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Il file contiene due blocchi — per term.log e history.log. Qualsiasi parametro non specificato in un blocco viene ereditato da /etc/logrotate.conf.
Descrizione delle direttive:
rotate 12— conservare 12 copie archiviatemonthly— ruotare una volta al mesecompress— comprimere i log vecchi con gzipmissingok— non generare un errore se il file di log è assentenotifempty— ignorare la rotazione se il log è vuoto
Metodo 1: configurazione standard (consigliata)
È l'approccio migliore per la maggior parte dei casi. I file di configurazione vengono collocati in /etc/logrotate.d/ e vengono eseguiti quotidianamente da cron.
Esempio: crea una configurazione per un'applicazione personalizzata che scrive i log in /var/log/example-app/:
sudo nano /etc/logrotate.d/example-app
/var/log/example-app/*.log {
daily
rotate 14
compress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Descrizione delle direttive:
create 0640 www-data www-data— crea un nuovo file di log dopo la rotazione con i permessi0640, proprietario e gruppowww-datasharedscripts— lo scriptpostrotateviene eseguito una sola volta dopo l'elaborazione di tutti i file, non per ogni file separatamentepostrotate ... endscript— blocco di comandi eseguiti dopo la rotazione; nell'esempio viene ricaricata l'applicazione
Dopo la configurazione, verifica le impostazioni in modalità debug:
sudo logrotate /etc/logrotate.conf --debug
Il comando mostra informazioni dettagliate sui file elaborati da logrotate, senza applicare effettivamente le modifiche.
I nostri prodotti e servizi
Metodo 2: configurazione personalizzata con Cron (per pianificazioni non standard)
Usa questo metodo se hai bisogno di una rotazione oraria o vuoi gestire i log di un utente specifico.
Supponiamo che l'applicazione sia in esecuzione con l'utente testing e scriva i log in /home/testing/logs/. Crea un file di configurazione:
nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
hourly
rotate 24
compress
missingok
create
}
File di configurazione logrotate
Questa configurazione ruota i file ogni ora, conserva 24 copie archiviate e crea un nuovo file di log dopo ogni rotazione.
Crea un file di log di test:
cd ~
mkdir logs
touch logs/access.log
Esegui logrotate manualmente specificando il file di stato:
logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force
Output:
reading config file /home/testing/logrotate.conf
Handling 1 logs
rotating pattern: /home/testing/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
log does not need rotating
--state— indica dove memorizzare le informazioni sull'ultima rotazione.--verbose— mostra un log di esecuzione dettagliato.--force— forza la rotazione anche se non è ancora necessaria secondo la pianificazione.
Verifica il contenuto del file di stato:
cat /home/testing/logrotate-state
Logrotate registra in questo file quando e quali log sono stati elaborati l'ultima volta.
Automazione tramite Cron
Per eseguire la rotazione automaticamente ogni ora, aggiungi un'attività a cron:
crontab -e
Aggiungi la seguente riga alla fine del file:
14 * * * * /usr/sbin/logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state
Attività cron per logrotate
L'attività verrà eseguita al 14° minuto di ogni ora, ogni giorno.
Consigli utili
- Testa sempre le modifiche alla configurazione con
--debugprima di applicarle. - Usa la direttiva
createper garantire i permessi corretti sui nuovi file di log. - Per i servizi ad alto traffico, considera periodi di rotazione più brevi e la compressione.
- Non impostare mai i permessi
666o777su file di log o directory — rappresenta un serio rischio per la sicurezza.
Aiuto
Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!