GNU/Linux >> Linux Esercitazione >  >> Linux

Come ruotare e comprimere i file di registro in Linux con Logrotate

In un sistema Linux e praticamente in tutti i sistemi, i file di registro sono fondamentali quando si tratta di esaminare e risolvere gli errori. Forniscono indizi importanti su cosa potrebbe essere andato storto con vari servizi di sistema prima del guasto.

Qualsiasi servizio installato sui tuoi sistemi Linux come il server Web Apache o il server di database MySQL genera file di registro che di solito vengono archiviati in /var/log directory. Se controlli i contenuti di questa directory, vedrai contenuti simili a quelli che abbiamo di seguito:

Con il passare del tempo, man mano che vengono registrate informazioni aggiuntive, i file di registro aumentano di dimensioni e occupano più spazio sul disco rigido. Prima ancora che tu te ne accorga, i file di registro si saranno gonfiati di dimensioni, divorando gran parte dello spazio sul disco rigido e, se non stai attento, puoi facilmente esaurire lo spazio su disco.

Con questo in mente, diventa prudente mantenere i file di registro a una dimensione gestibile ed eliminare le vecchie voci di registro che occupano spazio prezioso su disco. Ed è qui che entra in gioco la rotazione dei log.

Cos'è la rotazione dei registri?

Rotazione log è un processo che crea nuovi file di registro e archivi e rimuove quelli vecchi per risparmiare spazio su disco. Il processo rinomina un file di registro corrente. Ad esempio, apport.log diventa apport.log.1 e un nuovo apport.log log viene creato per registrare le nuove voci di registro. I file di registro meno recenti sono generalmente compressi e vengono visualizzati come  apport.log.2.gz , apport.log.3.gz , apport.log.4.gz , e così via.

Il processo di rotazione dei log è facilitato utilizzando un'utilità chiamata logrotate . Questo è uno strumento che facilita la rotazione dei file di registro e l'archiviazione e la rimozione di quelli vecchi per liberare spazio su disco. In sintesi, logrotate realizza quanto segue:

  • Creazione di nuovi file di registro dopo aver ruotato quelli vecchi.
  • Archiviazione di vecchi file di registro.
  • Eliminazione dei file di registro meno recenti che sono stati ruotati per risparmiare spazio.

La rotazione del registro viene solitamente attivata quando la dimensione dei file di registro aumenta e supera un determinato limite.

Come funziona l'utilità logrotate

Prima di esaminare il funzionamento dell'utilità logrotate, assicurarsi che logrotate sia installato sul sistema. Per farlo, dai il comando:

Per il sistema Debian/Ubuntu:

$ sudo apt-get install logrotate -y

Per sistema CentOS/RHEL/Fedora:

$ sudo yum install logrotate -y
or 
$ sudo dnf  install logrotate -y

Esegui il comando seguente per verificare la versione logrotate,

linuxtech[email protected]:~$ logrotate --version
logrotate 3.14.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
[email protected]:~$

Dall'output, possiamo vedere chiaramente che abbiamo logrotate versione 3.14.0. Per impostazione predefinita, logrotate viene preinstallato nelle moderne distribuzioni Linux e quindi non è necessario installarlo.

Registra i file di configurazione

Logrotate viene eseguito quotidianamente come un processo cron, esaminando vari file di registro, ruotandoli ed eliminando i file di registro meno recenti come definito nel file di configurazione. Ci sono due fonti di configurazione principali a cui devi prestare molta attenzione:

/etc/logrotate.conf – Questo è il file di configurazione principale per lo strumento logrotate. Contiene le impostazioni predefinite e facilita la rotazione dei registri per i registri dei pacchetti non di sistema. In particolare, utilizza un "include ' direttiva per il pull delle configurazioni che si trova in '/etc/logrotate.d ' directory. Diamo un'occhiata al file di configurazione.

$ cat /etc/logrotate.conf

Dalla configurazione mostrata, il file /etc/logrotate.conf ruota i file di registro su una settimana base come indicato nella riga 3 .

  • Riga 7 indica che l'utente root e il gruppo adm possiedono i file di registro.
  • Riga 10 indica che viene eseguito il backup di solo 4 settimane di file di registro, dopodiché quelli più vecchi verranno eliminati o rimossi per creare più spazio su disco.
  • Riga 13 indica la creazione di un nuovo file di registro dopo la rotazione del file di registro corrente.
  • L'istruzione include alla riga 22 estrae le configurazioni dei file dell'applicazione che sono elencati nella directory /etc/logrotate.d.

/etc/logrotate.d – Questa è una directory che contiene la configurazione logrotate dei pacchetti installati i cui file di registro richiedono la rotazione del registro. In genere, è probabile che trovi anche file di configurazione di strumenti di sistema come apt &dpkg (per i sistemi Debian), rsyslog, ufw e cups-daemon. Ecco cosa troverai:

[email protected]:~$ ls -l /etc/logrotate.d/
total 60
-rw-r--r-- 1 root root 120 Sep  5  2019 alternatives
-rw-r--r-- 1 root root 126 Dec  4 20:25 apport
-rw-r--r-- 1 root root 173 Apr  9 11:21 apt
-rw-r--r-- 1 root root  91 Apr  1 10:49 bootlog
-rw-r--r-- 1 root root 130 Jan 21  2019 btmp
-rw-r--r-- 1 root root 181 Feb 17 08:19 cups-daemon
-rw-r--r-- 1 root root 112 Sep  5  2019 dpkg
-rw-r--r-- 1 root root 329 Feb  4  2019 nginx
-rw-r--r-- 1 root root  94 Feb  8  2019 ppp
-rw-r--r-- 1 root root 501 Mar  7  2019 rsyslog
-rw-r--r-- 1 root root 677 Nov 29 02:08 speech-dispatcher
-rw-r--r-- 1 root root 119 Mar 30 21:49 ubuntu-advantage-tools
-rw-r--r-- 1 root root 178 Jan 21 22:16 ufw
-rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades
-rw-r--r-- 1 root root 145 Feb 19  2018 wtmp
[email protected]:~$

Diamo un'occhiata al file di configurazione dello strumento di gestione dei pacchetti dpkg.

$ cat -n /etc/logrotate.d/dpkg

  • mensile :indica la rotazione dei file di registro una volta al mese
  • ruota di 12 :viene eseguito il backup di 12 vecchi file di registro.
  • comprimi :Ciò implica che i file ruotati devono essere compressi utilizzando la compressione gzip predefinita con file di registro con estensione .gz.
  • Crea 644 root root :Crea un nuovo file di registro non appena la rotazione del registro viene completata con i permessi del file ottale di 644 con la proprietà dell'utente e del gruppo di root.
  • manca bene :La direttiva elimina i messaggi di errore in caso di file di registro mancante.
  • notificato :Questo ignora la rotazione del file se il file di registro è vuoto.

Crea un file di configurazione logrotate di esempio

Supponiamo di avere un'applicazione in esecuzione come utente linuxtechi e che stia generando file di registro archiviati in /home/linuxtechi/logs directory. Dobbiamo impostare i file di registro in modo che ruotino su base settimanale.

Ma prima creeremo un file di configurazione logrotate nella home directory come mostrato:

$ vim /home/linuxtechi/logrotate.conf

Successivamente, incolleremo la configurazione mostrata:

/home/linuxtechi/logs/*.log {
    weekly
    missingok
    rotate 14
    compress
    create
}

Mettiamo questo nel contesto:

I file di registro verranno ruotati su base settimanale, con la soppressione di eventuali messaggi di errore se uno qualsiasi dei file di registro è mancante. Nel corso del mese verrà eseguito il backup di 14 file di registro con la creazione di un nuovo file di registro dopo la rotazione del file di registro corrente.

Ora creeremo una directory di log che conterrà i file di log dell'applicazione e quindi creeremo un file di log chiamato app.log.

[email protected]:~$ mkdir logs && cd logs
[email protected]:~/logs$ touch app.log
[email protected]:~/logs$ ls
app.log
[email protected]:~/logs$

Ora eseguiremo il comando logrotate per creare un file di stato logrotate nella home directory per verificare se le voci di registro sono state create o meno.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose

Otterrai un output simile a questo:

Dall'output, il file di registro non è stato ruotato per il semplice motivo che la rotazione avviene settimanalmente e il file di registro ha appena un'ora.

Esamina il file logrotate per verificare se sono state registrate informazioni sull'esecuzione della rotazione del registro.

[email protected]:~$ cat logrotate-state
logrotate state -- version 2
"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0
[email protected]:~$

Dall'output, possiamo vedere che l'utilità logrotate ha riconosciuto l'ultima volta che ha considerato il file di registro per la rotazione e viene stampato il timestamp.

Ora forzeremo logrotate a ruotare il file di registro – cosa che altrimenti non farebbe per ora poiché l'intervallo di tempo specificato non è stato ancora superato – usando la –force flag come mostrato.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force

Se torni alla directory dei registri, osserverai un file di registro aggiuntivo che è stato ruotato e compresso come mostrato.

[email protected]:~$ cd logs/
[email protected]:~/logs$ ls
app.log  app.log.1.gz
[email protected]:~/logs$

Comprime e ruota i file di registro in base alle dimensioni

A volte, i file di registro possono ingrandirsi e inghiottire spazio anche prima dell'intervallo di tempo specificato per la rotazione, giornaliero, settimanale o mensile.

Un modo per risolvere il problema consiste nello specificare la dimensione massima del file che, una volta superata, attiverà la rotazione del file di registro. Per ottenere ciò, specifica la dimensione massima opzione nel file logrotate.

Ad esempio, per attivare la rotazione quando la dimensione del file supera i 40 Megabyte, includi l'opzione:

dimensione massima 40M

Supponiamo di creare un file di rotazione del registro personalizzato per la nostra applicazione nella cartella /etc/logrotate.d,

[email protected]:~$ cd /etc/logrotate.d/
[email protected]:/etc/logrotate.d$ sudo vi custom-app
/home/linuxtechi/logs/app-access.log
{
    daily
    missingok
    size 40M
    rotate 4
    compress
    create
}

Salva e chiudi il file,

Il suffisso M denota Megabyte , Per kilobyte usa k mentre G indica la dimensione in Gigabyte .

L'affermazione implica che i file di registro più grandi di 40 Megabyte verranno ruotati senza alcun riguardo per l'intervallo di tempo di rotazione. Ciò implica che per un file di registro la cui rotazione è prevista dopo 1 ora, verrà ruotato prima dell'intervallo specificato se supera la soglia di 40 MB.

Eseguiamo il dump di alcuni dati nel file di registro della nostra applicazione personalizzata e poi vediamo come logrotate ruoterà i file di registro,

[email protected]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=25
25+0 records in
25+0 records out
26214400 bytes (26 MB, 25 MiB) copied, 0.0422015 s, 621 MB/s
[email protected]:~$ du -sh /home/linuxtechi/logs/app-access.log
25M     /home/linuxtechi/logs/app-access.log
[email protected]:~$

Usa '-d ' opzione nel comando logrotate per eseguire il dry run di logrotate sul file di registro, eseguire il comando seguente,

$ logrotate -d /etc/logrotate.d/custom-app

Come possiamo vedere nell'output, logrotate non ruoterà il file di registro poiché la dimensione non supera i 40 MB.

Ora rendiamo la dimensione del file di registro superiore a 40 MB,

[email protected]:~$ cd logs/
[email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=45
45+0 records in
45+0 records out
47185920 bytes (47 MB, 45 MiB) copied, 0.136979 s, 344 MB/s
[email protected]:~/logs$ du -sh app-access.log
46M     app-access.log
[email protected]:~/logs$

Ora, prova a eseguire di nuovo il comando logrotate con l'opzione '-d',

L'output sopra conferma che logroate ruoterà il file di registro poiché la dimensione è superiore a 40 MB.

Oltre a migliorare la rotazione dei file di registro in base alle dimensioni, è prudente garantire che il file di configurazione logrotate venga chiamato a una frequenza regolare utilizzando un processo cron. Ciò è particolarmente critico per i file di registro che aumentano di dimensioni così rapidamente e rischiano di riempire lo spazio su disco.

Ci sono due modi per farlo:

È possibile copiare lo script logrotate dalla directory /etc/cron.daily nella posizione /etc/cron.hourly. Ciò cambierà la rotazione del registro su una base oraria anziché giornaliera.

Un altro modo è specificare un processo cron nel file /etc/crontab come mostrato

*/10 * * * * /etc/cron.daily/logrotate

Questo attiverà la rotazione ogni 10 minuti.

L'uso di crontab per chiamare lo script logrotate oltre a specificare la dimensione massima utilizzando la direttiva maxsize, costituisce una combinazione perfetta per garantire che i file di registro vengano ruotati in tempo utile per evitare di riempire il disco rigido.

Per ulteriori opzioni con lo strumento logrotate, visita le pagine man come mostrato:

Conclusione

In questa guida, abbiamo fatto luce sull'importanza dei file di registro, sulla minaccia che possono causare se lasciati aumentare di dimensioni e su come lo strumento logrotate può aiutare a gestire la dimensione dei file di registro sul tuo sistema. Abbiamo anche esaminato alcune delle opzioni disponibili per l'uso nella configurazione logrotate.


Linux
  1. Ruota e archivia i registri con il comando logrotate di Linux

  2. Come crittografare i file con gocryptfs su Linux

  3. Come trovare file con autorizzazioni SUID e SGID in Linux

  4. Come comprimere file e directory su Linux (con esempi)

  5. Come gestire i file di registro utilizzando Logrotate in Linux

Come rinominare file e directory in Linux

Come escludere file e directory con Rsync

Come comprimere file e directory in Linux

Come gestire i file ISO su Linux con Mount, AcetoneISO e Furious

Come installare e utilizzare Pigz per comprimere i file più velocemente in Linux

Elimina i file con logrotate