Gestione dei log con Logrotate
Come configurare Logrotate per la gestione dei log di sistema e delle applicazioni.
Quando si lavora con VPS o server dedicati, tenere traccia di eventi ed errori è essenziale per il monitoraggio e la diagnostica. I file di log di grandi dimensioni creano problemi concreti: sono difficili da analizzare, consumano CPU e memoria e possono causare interruzioni delle applicazioni quando il disco si riempie.
Logrotate risolve questo problema archiviando automaticamente i log correnti e creando nuovi file per i dati in arrivo.
Verificare l'installazione
Logrotate è preinstallato sulla maggior parte delle distribuzioni Linux e viene eseguito automaticamente tramite lo scheduler cron. Per verificare la versione:
logrotate --version
Esempio di output:
logrotate 3.21.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
L'output mostra quali strumenti Logrotate utilizza per la compressione e le notifiche, insieme al percorso del file di stato che registra la cronologia delle rotazioni.
Struttura della configurazione
Logrotate utilizza una struttura di configurazione gerarchica. I parametri globali sono definiti in /etc/logrotate.conf, mentre le impostazioni per singola applicazione si trovano in /etc/logrotate.d/.
Esempio di /etc/logrotate.conf su Ubuntu:
# rotate log files weekly
weekly
# use the adm group by default
su root adm
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
Parametri principali:
weekly— i log vengono ruotati una volta alla settimana.create— dopo la rotazione viene creato un nuovo file di log vuoto.rotate 4— vengono conservate quattro copie archiviate.su root adm— la rotazione viene eseguita come utenteroote gruppoadm, per evitare problemi di permessi con i log di sistema.compress— compressione degli archivi (disabilitata per impostazione predefinita).include /etc/logrotate.d— carica i file di configurazione per singola applicazione.
Per l'elenco completo delle direttive:
man logrotate
Configurazione per applicazione
I file in /etc/logrotate.d/ seguono la stessa struttura della configurazione globale, ma si applicano solo a log specifici. Le impostazioni in questi file sovrascrivono i valori globali di /etc/logrotate.conf. Se una direttiva non è specificata nella configurazione dell'applicazione, viene utilizzato il valore globale.
Esempio di /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
notifempty
}
Se
/etc/logrotate.confimpostarotate 4e la configurazione di un'applicazione non definiscerotate, i log di quell'applicazione continueranno a conservare quattro copie archiviate.
Pianificazione della rotazione
Per impostazione predefinita, Logrotate utilizza un approccio temporale: i log vengono ruotati secondo una pianificazione fissa. Intervalli supportati: hourly, daily, weekly, monthly, yearly.
Logrotate viene in genere eseguito una volta al giorno tramite /etc/cron.daily/logrotate. Per abilitare la rotazione oraria, sposta il job in cron.hourly:
sudo mv /etc/cron.daily/logrotate /etc/cron.hourly
Per esecuzioni ancora più frequenti, configura un cron job personalizzato.
Rotazione in base alla dimensione
Per i servizi con volumi di log imprevedibili, la rotazione può essere attivata dalla dimensione del file anziché dalla pianificazione.
size — la rotazione avviene solo quando il file raggiunge la dimensione specificata, indipendentemente dalla pianificazione:
/var/log/app/*.log {
size 50M
}
sizee le direttive temporali si escludono a vicenda — ha effetto sempre l'ultima opzione indicata. Sedailycompare doposize, i log vengono ruotati quotidianamente e la soglia di dimensione viene ignorata.
minsize — la rotazione segue la pianificazione, ma solo se il file ha raggiunto la dimensione minima:
/var/log/app/*.log {
daily
minsize 50M
}
maxsize — la rotazione avviene immediatamente non appena il file supera il limite di dimensione, anche se il momento pianificato non è ancora arrivato:
/var/log/app/*.log {
daily
maxsize 50M
}
Le dimensioni possono essere specificate in byte (predefinito), kilobyte (k), megabyte (M) o gigabyte (G).
Metodi di rotazione
Logrotate supporta due metodi principali per gestire i file di log attivi.
create (predefinito) — rinomina il file attivo (app.log → app.log.1) e crea un nuovo file vuoto con il nome originale. È il metodo consigliato e riduce al minimo il rischio di perdita dei dati di log:
/var/log/app/*.log {
create
# create 644 appuser group — imposta opzionalmente permessi, proprietario e gruppo
}
copytruncate — copia il contenuto del file corrente in un archivio, quindi svuota l'originale. Consente alle applicazioni di continuare a scrivere sullo stesso file descriptor. Consigliato solo per applicazioni legacy che non riescono a riaprire i file di log dopo la rotazione:
/var/log/app/*.log {
copytruncate
}
Denominazione dei file di archivio
Per impostazione predefinita, i file ruotati ricevono numeri sequenziali: app.log.1, app.log.2 e così via. Per aggiungere timestamp, usa dateext:
/var/log/app/*.log {
dateext
# predefinito: -%Y%m%d per daily, -%Y%m%d%H per hourly
}
Un log ruotato il 25 giugno 2025 si chiamerà app.log-20250625.
Per i log ruotati più volte al giorno, usa un timestamp Unix per garantire l'unicità:
/var/log/app/*.log {
dateformat -%Y%m%d-%s
}
La direttiva dateyesterday assegna al file la data del giorno precedente — utile quando la rotazione avviene dopo mezzanotte ma i dati appartengono al giorno prima.
Compressione
La direttiva compress abilita la compressione gzip:
/var/log/app/*.log {
compress
}
Per utilizzare uno strumento di compressione diverso:
/var/log/app/*.log {
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
}
delaycompress impedisce che il file ruotato più di recente venga compresso immediatamente — utile quando un'applicazione continua a scrivere sul vecchio file dopo la rotazione:
/var/log/app/*.log {
compress
delaycompress
}
compressoptions imposta il livello di compressione gzip da -1 (veloce, bassa compressione) a -9 (lento, compressione massima):
/var/log/app/*.log {
compress
compressoptions -9
}
Risoluzione dei problemi
Il file di stato di Logrotate mostra quando ogni file di log è stato ruotato l'ultima volta:
sudo cat /var/lib/logrotate/status
Per un'analisi dettagliata, esegui Logrotate in modalità debug:
sudo logrotate --debug /etc/logrotate.conf
Aiuto
Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!