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 archiviate
  • monthly — ruotare una volta al mese
  • compress — comprimere i log vecchi con gzip
  • missingok — non generare un errore se il file di log è assente
  • notifempty — 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 permessi 0640, proprietario e gruppo www-data
  • sharedscripts — lo script postrotate viene eseguito una sola volta dopo l'elaborazione di tutti i file, non per ogni file separatamente
  • postrotate ... 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

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

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 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 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 --debug prima di applicarle.
  • Usa la direttiva create per 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 666 o 777 su 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!

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