Rotazione e compressione dei log utilizzando logrotate | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Rotazione e compressione dei log utilizzando logrotate

  • Livello: Intermedio
  • Tempo stimato: ~20 minuti
  • Obiettivo: Configurare logrotate per comprimere e ruotare automaticamente i file di log dell'applicazione per prevenire l'esaurimento dello spazio su disco.

Introduzione

I log sono una parte fondamentale della gestione di qualsiasi applicazione in produzione: senza di essi, comprendere in modo affidabile cosa è andato storto e cosa fare al riguardo sarebbe molto difficile. Un'applicazione molto attiva può generare migliaia di voci al minuto, e tutte queste vengono tipicamente memorizzate in file. Dobbiamo comprimere ed eliminare i log vecchi in modo tempestivo per evitare di esaurire lo spazio su disco. In questo tutorial, configureremo logrotate su un server Linux.

Cos'è logrotate?

logrotate è un'utilità Linux progettata per semplificare l'amministrazione di sistemi che generano un gran numero di file di log. Permette di comprimere, ruotare ed eliminare automaticamente i log. Viene tipicamente eseguito giornalmente, settimanalmente o mensilmente tramite cron o un timer systemd.

Prerequisiti

Prima di iniziare, assicurati che siano soddisfatte le seguenti condizioni:

  • Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12, o CentOS/RHEL 7+
  • logrotate: versione 3.x (controlla nel passaggio 1)
  • Accesso: accesso sudo o root al server
  • Conoscenze richieste: uso sicuro della riga di comando di Linux e modifica di file di base

Passaggio 1: Verificare l'installazione di logrotate

Per verificare l'installazione, esegui semplicemente:

logrotate --version

Output previsto:

logrotate 3.19.0 Comando di posta predefinito: /usr/bin/mail Comando di compressione predefinito: /bin/gzip Comando di decompressione predefinito: /bin/gunzip Estensione di compressione predefinita: .gz Percorso del file di stato predefinito: /var/lib/logrotate/status

Se il comando non viene trovato – logrotate non è installato. Installalo:

Debian/Ubuntu:

sudo apt install logrotate

CentOS/RHEL:

sudo yum install logrotate

Passaggio 2: Comprendere la struttura della configurazione

Il file di configurazione principale si trova in /etc/logrotate.conf – lo lasceremo invariato per ora. Le nostre regole per servizi specifici andranno in /etc/logrotate.d/ – un file separato dovrebbe essere posizionato lì per ciascun servizio.

Prima di aggiungere qualcosa, controlla se esiste già una configurazione per il tuo servizio:

ls /etc/logrotate.d/

Per servizi popolari come nginx o Apache, le configurazioni sono solitamente già presenti. Se nginx o apache2 è già lì – apri quel file e regola il conteggio delle rotazioni e le impostazioni di compressione in base alle tue esigenze, piuttosto che creare un duplicato.

Passaggio 3: Aggiungere una configurazione di servizio

Supponiamo che ci sia un'applicazione personalizzata e i suoi log si trovino in /opt/myapp/*.log.

Crea e apri il file:

sudo nano /etc/logrotate.d/myapp

Incolla il seguente contenuto all'interno:

/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }

Questa configurazione istruisce logrotate a:

  1. daily – ruotare i log giornalmente; puoi anche specificare weekly o monthly.
  2. missingok – non fallire con un errore se il file di log manca.
  3. rotate 14 – mantenere 14 copie ruotate prima dell'eliminazione.
  4. compress – comprimere i log ruotati usando gzip.
  5. delaycompress – non comprimere la rotazione più recente; utile se l'applicazione mantiene ancora il file aperto.
  6. notifempty – saltare la rotazione se il file di log è vuoto.
  7. create 0640 www-data adm – creare un nuovo file di log vuoto con i permessi, il proprietario e il gruppo specificati. Il proprietario dovrebbe corrispondere all'utente sotto cui l'applicazione viene eseguita (nei sistemi basati su Debian spesso www-data, nei sistemi basati su RHEL solitamente apache o nginx).
  8. sharedscripts – eseguire lo script postrotate una volta, anche se sono stati abbinati più file.
  9. postrotate – segnalare all'applicazione di riaprire i suoi handle di file dopo la rotazione.

Info

Se la directory /opt/myapp/ o i file di log non esistono ancora al momento della prima esecuzione, non è un problema. La direttiva missingok farà sì che logrotate salti silenziosamente il file senza generare un errore. La rotazione dei log inizierà automaticamente non appena l'applicazione creerà i log.

Passaggio 4: Testare la configurazione

4.1 Esecuzione di prova

Dopo aver scritto la configurazione, dovrebbe essere verificata. Il flag -d esegue logrotate in modalità debug – nulla viene effettivamente modificato:

sudo logrotate -d /etc/logrotate.d/myapp

Info

La modalità -d produce informazioni diagnostiche ma non modifica alcun file.

4.2 Esecuzione reale forzata

Se l'esecuzione di prova sembra corretta – forza una rotazione effettiva usando il flag -f:

sudo logrotate -f /etc/logrotate.d/myapp

Info

Importante: Il flag -f attiva una rotazione effettiva. Eseguilo solo dopo che l'esecuzione di prova sembra corretta.

Passaggio 5: Verificare il risultato

Dopo le prime rotazioni, controlla la directory dei log:

ls -lh /opt/myapp/

Output previsto:

total 28K -rw-r----- 1 www-data adm 0 Jan 17 12:00 app.log -rw-r----- 1 www-data adm 12K Jan 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Jan 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Jan 15 12:00 app.log.3.gz

La rotazione più recente (app.log.1) rimane non compressa a causa di delaycompress. Tutto ciò che è più vecchio è compresso con gzip. Questo è esattamente ciò che volevamo.

Passaggio 6: Verificare la pianificazione automatica

logrotate viene eseguito automaticamente – tramite cron o un timer systemd, a seconda della distribuzione.

Sistemi basati su Cron

cat /etc/cron.daily/logrotate

Se il file esiste – è il file che esegue logrotate giornalmente.

Sistemi basati su Systemd

Nei sistemi più recenti, logrotate può essere eseguito tramite un timer systemd invece di cron.

Controlla:

systemctl list-timers | grep logrotate

Dovresti vedere un timer con gli orari dell'ultima e della prossima esecuzione, qualcosa come:

Thu 2026-01-18 00:00:00 UTC 23h left Wed 2026-01-17 00:00:11 UTC 47 min ago logrotate.timer

Se logrotate.timer manca dall'output – il timer è disabilitato. Abilitalo:

sudo systemctl enable logrotate.timer

sudo systemctl start logrotate.timer

File di stato

Puoi controllare quando logrotate è stato eseguito l'ultima volta tramite il suo file di stato:

cat /var/lib/logrotate/status

Questa è la cronologia delle rotazioni di logrotate. Dopo la prima esecuzione reale, vedrai ogni file di log con la data della sua ultima rotazione:

"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17

Se un log non viene ruotato quando previsto – questo è il primo posto da controllare.

Rollback

Per annullare tutto ciò che è stato fatto, elimina semplicemente il file di configurazione da /etc/logrotate.d/:

sudo rm /etc/logrotate.d/myapp

Questo interromperà l'elaborazione dei log per la tua applicazione. I file già ruotati non vengono eliminati.

Per rimuovere completamente logrotate:

Debian/Ubuntu:

sudo apt remove logrotate

CentOS/RHEL:

sudo yum remove logrotate

Info

Importante: Rimuovere logrotate disabiliterà la rotazione dei log per l'intero sistema, inclusi nginx, rsyslog e altri servizi che ne dipendono.

Conclusione

Questo è tutto. Un file ben scritto in /etc/logrotate.d/, verificato con -d – ed è fatto. I log rimangono puliti, il disco rimane sano e non devi più pensarci.

Versione del documento: 1.2
Ultimo aggiornamento: Marzo 2026
Proprietario: Team di Documentazione Tecnica

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA