Gestione dei log con Logrotate su CentOS 7
Configurazione di logrotate per tenere sotto controllo i log di sistema e delle applicazioni.
Logrotate è uno di quegli strumenti che lavorano in silenzio per mantenere il server in ordine. Impedisce ai file di log di crescere in modo incontrollato e di esaurire lo spazio su disco — il che è particolarmente importante su VPS e server dedicati, dove lo spazio di archiviazione è limitato e la stabilità è fondamentale.
Verifica dell'installazione
Prima di passare alla configurazione, assicurati che logrotate sia effettivamente installato. Su CentOS 7 è preinstallato, ma un rapido controllo non fa mai male:
logrotate --version
Se viene visualizzato un numero di versione — ad esempio logrotate 3.18.0 — sei pronto a procedere.
Struttura della configurazione
La configurazione di logrotate si trova in due posti:
/etc/logrotate.conf— il file di configurazione principale con i valori predefiniti globali/etc/logrotate.d/— una directory con file di configurazione per singolo servizio, che sovrascrivono o estendono quei valori predefiniti
Insieme definiscono quali log vengono ruotati, con quale frequenza, quante copie archiviate conservare e se comprimerle.
Il file di configurazione principale
Apri /etc/logrotate.conf con il tuo editor preferito — vi, per esempio:
vi /etc/logrotate.conf
Un file tipico si presenta più o meno così:
# Rotazione dei log una volta a settimana
weekly
# Conserva 4 copie archiviate
rotate 4
# Crea un nuovo file di log vuoto dopo la rotazione
create
# Aggiunge la data ai nomi dei file archiviati
dateext
# Comprimi i log vecchi (decommentare se necessario)
#compress
# Includi le configurazioni per servizio da /etc/logrotate.d
include /etc/logrotate.d
# Impostazioni dei log di sistema
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
Ogni direttiva definita qui si applica globalmente — le configurazioni dei singoli servizi in /etc/logrotate.d/ possono sovrascriverle all'occorrenza.
Le principali direttive in sintesi
daily / weekly / monthly / size— frequenza di rotazione: secondo un calendario, oppure quando un file raggiunge una certa dimensionerotate N— numero di copie archiviate da conservare prima che quelle più vecchie vengano eliminatecreate— crea un nuovo file di log vuoto dopo la rotazione, mantenendo il proprietario e i permessi originalicompress— comprime i log archiviati (gzip per impostazione predefinita)dateext— include la data nel nome del file archiviato, es.access.log-20250918missingok— non genera un errore se il file di log non esistenotifempty— salta la rotazione se il file di log è vuotopostrotate ... endscript— esegue un blocco di comandi dopo la rotazione (utile per ricaricare un servizio)maxage N— elimina automaticamente gli archivi più vecchi di N giorni
Configurare la rotazione per un'applicazione specifica
Supponiamo che la tua applicazione my-app scriva i suoi log in /var/log/my-app/. Crea un file di configurazione dedicato:
vi /etc/logrotate.d/my-app
Un buon punto di partenza:
/var/log/my-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload my-app
endscript
}
Cosa fa ogni riga:
daily— rotazione ogni giornorotate 14— conserva due settimane di archivicompress— comprime i log vecchi con gzipnotifempty— nessuna rotazione se il file di log è vuotocreate 0640 www-data www-data— crea il nuovo file di log con permessi0640e proprietariowww-datapostrotate ... endscript— ricarica l'applicazione dopo ogni rotazione in modo che utilizzi il nuovo file di log
I nostri prodotti e servizi
Testare la configurazione
Prova a secco (nessuna modifica applicata, mostra solo cosa accadrebbe):
sudo logrotate /etc/logrotate.conf --debug
Testa la configurazione di un servizio specifico:
sudo logrotate -d /etc/logrotate.d/my-app
Forza una rotazione immediata:
sudo logrotate /etc/logrotate.conf --force
Rotazione dei log in directory personalizzate
Se la tua applicazione scrive i log in un percorso non standard — ad esempio /home/user/logs/ — puoi gestirla comunque con un file di configurazione locale:
vi /home/user/logrotate.conf
/home/user/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Crea la directory e un file di log di prova:
mkdir ~/logs
touch ~/logs/access.log
Poi esegui una rotazione forzata, puntando a un file di stato personalizzato:
logrotate /home/user/logrotate.conf \
--state /home/user/logrotate-state \
--verbose --force
--state— indica a logrotate dove salvare il registro dell'ultima esecuzione--verbose— stampa un log dettagliato di tutto ciò che viene eseguito
Automatizzare con Cron
Per eseguire logrotate automaticamente secondo un calendario, aggiungi un job cron:
crontab -e
Ad esempio, per eseguirlo ogni ora al 14° minuto:
14 * * * * /usr/sbin/logrotate /home/user/logrotate.conf --state /home/user/logrotate-state
Aiuto
Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!