Una delle directory più interessanti (e forse anche una delle più importanti) in un sistema Linux è /var/log
. Secondo il Filesystem Hierarchy Standard, l'attività della maggior parte dei servizi in esecuzione nel sistema viene scritta in un file all'interno di questa directory o in una delle sue sottodirectory.
Tali file sono noti come registri e sono la chiave per esaminare come funziona il sistema (e come si è comportato in passato). Registri sono anche la prima fonte di informazioni in cui gli amministratori e i tecnici cercano durante la risoluzione dei problemi.
Se osserviamo il contenuto di /var/log
su CentOS/RHEL/Fedora e Debian/Ubuntu (per varietà) vedremo i seguenti file di registro e sottodirectory.
Tieni presente che il risultato potrebbe essere leggermente diverso nel tuo caso a seconda dei servizi in esecuzione sui tuoi sistemi e dal tempo in cui sono stati eseguiti.
In RHEL/CentOS e Fedora
# ls /var/log
In Debian e Ubuntu
# ls /var/log
In entrambi i casi, possiamo osservare che alcuni nomi di log terminano come previsto in "log" , mentre altri vengono rinominati utilizzando una data (ad esempio, maillog-20160822 su CentOS ) o compresso (considera auth.log.2.gz e mysql.log.1.gz su Debian ).
Questo non è un comportamento predefinito basato sulla distribuzione scelta ma può essere modificato a piacimento utilizzando le direttive nei file di configurazione, come vedremo in questo articolo.
Se i log fossero conservati per sempre, finirebbero per riempire il filesystem in cui /var/log risiede. Per evitare che ciò accada, l'amministratore di sistema può utilizzare una simpatica utilità chiamata logrotate per ripulire i registri su base periodica.
In poche parole, logrotate rinominerà o comprimerà il registro principale quando viene soddisfatta una condizione (ne parleremo più in un minuto) in modo che l'evento successivo venga registrato su un file vuoto.
Inoltre, rimuoverà "vecchio" log e manterrà quelli più recenti. Naturalmente, possiamo decidere cosa "vecchio" significa e quanto spesso vogliamo che logrotate ripulisca i registri per noi.
Installazione di Logrotate in Linux
Per installare logrotate , usa il tuo gestore di pacchetti:
---------- On Debian and Ubuntu ---------- # aptitude update && aptitude install logrotate ---------- On CentOS, RHEL and Fedora ---------- # yum update && yum install logrotate
Vale la pena notare che il file di configurazione (/etc/logrotate.conf
) può indicare che altre impostazioni più specifiche possono essere inserite in singoli .conf
file all'interno di /etc/logrotate.d .
Questo sarà il caso se e solo se la seguente riga esiste e non è commentata:
include /etc/logrotate.d
Rimarremo fedeli a questo approccio, poiché ci aiuterà a mantenere le cose in ordine e a utilizzare Debia n casella per i seguenti esempi.
Configura Logrotate in Linux
Essendo uno strumento molto versatile, logrotate fornisce molte direttive per aiutarci a configurare quando e come verranno ruotati i log e cosa dovrebbe accadere subito dopo.
Inseriamo i seguenti contenuti in /etc/logrotate.d/apache2.conf (nota che molto probabilmente dovrai creare quel file) ed esamina ogni riga per indicarne lo scopo:
apache2.conf/var/log/apache2/* { weekly rotate 3 size 10M compress delaycompress }
La prima riga indica che le direttive all'interno del blocco si applicano a tutti i log all'interno di /var/log/apache2 :
- settimanale significa che lo strumento tenterà di ruotare i registri su base settimanale. Altri valori possibili sono giornalieri e mensili.
- ruota di 3 indica che devono essere conservati solo 3 registri ruotati. Pertanto, il file più vecchio verrà rimosso alla quarta esecuzione successiva.
- dimensione=10M imposta la dimensione minima per la rotazione su 10M. In altre parole, ogni registro non verrà ruotato finché non raggiunge i 10 MB.
- comprimi e compressione ritardata sono usati per indicare che tutti i log ruotati, ad eccezione del più recente, devono essere compressi.
Eseguiamo un test di prova per vedere cosa farebbe logrotate se fosse effettivamente eseguito ora. Usa -d
opzione seguita dal file di configurazione (puoi effettivamente eseguire logrotate omettendo questa opzione):
# logrotate -d /etc/logrotate.d/apache2.conf
I risultati sono mostrati di seguito:
Invece di comprimere i log, potremmo rinominarli dopo la data quando sono stati ruotati. Per farlo, useremo il dateext
direttiva. Se il nostro formato della data è diverso da quello predefinito aaaammgg , possiamo specificarlo utilizzando dateformat .
Tieni presente che possiamo anche impedire che la rotazione avvenga se il registro è vuoto con notifempty . Inoltre, diciamo a logrotate di inviare per posta il registro ruotato all'amministratore di sistema ([email protected] in questo caso) per suo riferimento (questo richiederà la configurazione di un server di posta, che esula dallo scopo di questo articolo).
Se vuoi ricevere e-mail su logrotate, puoi configurare il server di posta Postfix come mostrato qui:Installa il server di posta Postfix
Questa volta useremo /etc/logrotate.d/squid.conf per ruotare solo /var/log/squid/access.log :
squid.conf/var/log/squid/access.log { monthly create 0644 root root rotate 5 size=1M dateext dateformat -%d%m%Y notifempty mail [email protected] }
Come possiamo vedere nell'immagine qui sotto, questo registro non ha bisogno di essere ruotato. Tuttavia, quando la condizione relativa alla dimensione è soddisfatta (size=1M ), il registro ruotato verrà rinominato access.log-25082020 (se il log è stato ruotato il 25 agosto 2020 ) e il registro principale (access.log ) verrà ricreato con le autorizzazioni di accesso impostate su 0644 e con root come proprietario e proprietario del gruppo.
Infine, quando il numero di log raggiunge finalmente 6 , il registro meno recente verrà inviato a [email protected] .
Supponiamo ora di voler eseguire un comando personalizzato quando avviene la rotazione. Per farlo, posiziona la riga con tale comando tra le direttive postrotate ed endscript.
Ad esempio, supponiamo di voler inviare un'e-mail a root quando uno qualsiasi dei log all'interno di /var/log/myservice viene ruotato. Aggiungiamo le linee in rosso a /etc/logrotate.d/squid.conf :
squid.conf/var/log/myservice/* { monthly create 0644 root root rotate 5 size=1M postrotate echo "A rotation just took place." | mail root endscript }
Ultimo, ma non meno importante, è importante notare che le opzioni presenti in /etc/logrotate.d/*.conf
sovrascrivi quelli nel file di configurazione principale in caso di conflitti.
Logrotate e Cron
Per impostazione predefinita, l'installazione di logrotate crea un file crontab all'interno di /etc/cron.daily denominato logrotate . Come nel caso degli altri file crontab all'interno di questa directory, verrà eseguito ogni giorno a partire dalle 6:25 se anacron non è installato.
Lettura consigliata :11 Esempi di attività di pianificazione Cron in LinuxIn caso contrario, l'esecuzione inizierà intorno alle 7:35 . Per verificare, osserva la riga contenente cron.daily in /etc/crontab o /etc/anacrontab .
Riepilogo
In un sistema che genera diversi registri, l'amministrazione di tali file può essere notevolmente semplificata utilizzando logrotate. Come abbiamo spiegato in questo articolo, ruoterà, comprimerà, rimuoverà e spedirà automaticamente i registri su base periodica o quando il file raggiunge una determinata dimensione.
Assicurati solo che sia impostato per essere eseguito come cron job e logrotate renderà le cose molto più facili per te. Per maggiori dettagli, fare riferimento alla pagina man.
Hai domande o suggerimenti su questo articolo? Sentiti libero di farcelo sapere utilizzando il modulo di commento qui sotto.