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 dimensione
  • rotate N — numero di copie archiviate da conservare prima che quelle più vecchie vengano eliminate
  • create — crea un nuovo file di log vuoto dopo la rotazione, mantenendo il proprietario e i permessi originali
  • compress — comprime i log archiviati (gzip per impostazione predefinita)
  • dateext — include la data nel nome del file archiviato, es. access.log-20250918
  • missingok — non genera un errore se il file di log non esiste
  • notifempty — salta la rotazione se il file di log è vuoto
  • postrotate ... 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 giorno
  • rotate 14 — conserva due settimane di archivi
  • compress — comprime i log vecchi con gzip
  • notifempty — nessuna rotazione se il file di log è vuoto
  • create 0640 www-data www-data — crea il nuovo file di log con permessi 0640 e proprietario www-data
  • postrotate ... endscript — ricarica l'applicazione dopo ogni rotazione in modo che utilizzi il nuovo file di log

I nostri prodotti e servizi

Hosting WebServizi di hosting affidabili per siti web di qualsiasi dimensione.
Ordina
VPSInfrastruttura cloud flessibile con accesso root completo.
Ordina
Server DedicatiServer dedicati per le massime prestazioni.
Ordina

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!

Hai bisogno di aiuto?I nostri ingegneri ti aiuteranno gratuitamente con qualsiasi domanda in pochi minutiContattaci