Introduzione
Logrotate è un’utilità di sistema che gestisce la rotazione automatica e la compressione dei file di registro. Se i file di registro non venissero ruotati, compressi e periodicamente ridotti, potrebbero consumare tutto lo spazio disponibile su un sistema.
Logrotate è installato per impostazione predefinita su Ubuntu 22.04 ed è configurato per gestire le esigenze di rotazione dei log di tutti i pacchetti installati, inclusi rsyslog
, il processore di log di sistema predefinito.
In questo articolo, esploreremo la configurazione predefinita di Logrotate, quindi configureremo la rotazione dei log per un’applicazione personalizzata fittizia.
Prerequisiti
Questo tutorial presuppone di avere un server Ubuntu 22.04, con un utente sudo non root abilitato, come descritto in Configurazione Iniziale del Server con Ubuntu 22.04.
Logrotate è disponibile su molte altre distribuzioni Linux, ma la configurazione predefinita potrebbe essere molto diversa. Altre sezioni di questo tutorial si applicheranno comunque purché la tua versione di Logrotate sia simile a quella di Ubuntu 22.04. Segui il Passaggio 1 per determinare la tua versione di Logrotate.
Accedi al tuo server come utente abilitato a sudo per iniziare.
Passo 1 — Conferma della tua versione di Logrotate
Logrotate è installato per impostazione predefinita su Ubuntu. Tuttavia, se è necessario installarlo, eseguire i seguenti comandi per aggiornare l’elenco dei pacchetti e recuperare il pacchetto:
Se si sta utilizzando un server non-Ubuntu, assicurarsi prima che Logrotate sia installato chiedendo le informazioni sulla sua versione:
Outputlogrotate 3.19.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
Se Logrotate è installato ma il numero di versione è significativamente diverso, potrebbero verificarsi problemi con alcune delle opzioni di configurazione esplorate in questo tutorial. Fare riferimento alla documentazione per la propria versione specifica di Logrotate leggendo la sua pagina manuale (man
):
È anche possibile consultare la versione online della documentazione di Logrotate. Successivamente, esamineremo la struttura di configurazione predefinita di Logrotate su Ubuntu.
Passo 2 — Esplorare la configurazione di Logrotate
Le informazioni di configurazione di Logrotate possono essere generalmente trovate in due posizioni su Ubuntu:
/etc/logrotate.conf
: Questo file contiene alcune impostazioni predefinite e configura la rotazione per alcuni log che non sono di proprietà di pacchetti di sistema. Utilizza anche un’istruzioneinclude
per importare la configurazione da qualsiasi file nella directory/etc/logrotate.d
./etc/logrotate.d/
: Qui è dove qualsiasi pacchetto che installi e che ha bisogno di aiuto con la rotazione dei log metterà la sua configurazione di Logrotate. In un’installazione standard dovresti già avere file qui per strumenti di sistema principali comeapt
,dpkg
,rsyslog
e così via.
Per impostazione predefinita, logrotate.conf
configurerà rotazioni dei log settimanali, con file di log di proprietà dell’utente root e del gruppo syslog, con quattro file di log conservati alla volta (rotate 4
), e nuovi file di log vuoti che vengono creati dopo che quello corrente è stato ruotato (create
).
Diamo un’occhiata al file di configurazione Logrotate di un pacchetto in /etc/logrotate.d
. cat
il file per l’utilità di pacchetto apt
:
Output/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Questo file contiene blocchi di configurazione per due diversi file di log nella directory /var/log/apt/
: term.log
e history.log
. Entrambi hanno le stesse opzioni. Qualsiasi opzione non impostata in questi blocchi di configurazione erediterà i valori predefiniti o quelli impostati in /etc/logrotate.conf
. Qualsiasi impostazione in un file di logrotate sovrascriverà i valori predefiniti di logrotate, che sono configurati in /etc/logrotate.conf
. Le opzioni impostate per i log di apt
sono:
rotate 12
: conserva dodici vecchi file di log. Questo sovrascrive il valore predefinitorotate 4
.monthly
: ruota una volta al mese. Questo sovrascrive il valore predefinitoweekly
.compress
: comprimi i file ruotati. Questo utilizza di defaultgzip
e produce file con estensione.gz
. Il comando di compressione può essere modificato utilizzando l’opzionecompresscmd
.missingok
: non scrivere un messaggio di errore se il file di log è mancante.notifempty
: non ruotare il file di log se è vuoto.
Questi file di configurazione ereditano anche il comportamento predefinito create
, che istruisce Logrotate a creare nuovi log dopo la rotazione. Questo potrebbe essere sovrascritto con nocreate
, anche se ciò disabiliterebbe efficacemente la maggior parte delle altre funzionalità.
Sono disponibili molte altre opzioni di configurazione. Puoi leggere tutte le informazioni digitando man logrotate
sulla riga di comando per visualizzare la pagina del manuale di Logrotate.
Successivamente, imposteremo un file di configurazione per gestire i log per un servizio fittizio chiamato your-app
.
Passaggio 3 — Configurazione di un Esempio
Per gestire i file di log utilizzando logrotate per applicazioni al di fuori dei servizi di sistema pre-confezionati e pre-configurati, abbiamo due opzioni:
- Crea un nuovo file di configurazione per Logrotate e posizionalo in
/etc/logrotate.d/
. Questo verrà eseguito giornalmente come utente root, insieme a tutti gli altri lavori standard di Logrotate. - Crea un nuovo file di configurazione e eseguilo al di fuori dell’impostazione predefinita di Logrotate di Ubuntu. Questo è davvero necessario solo se è necessario eseguire Logrotate come utente non root, o se si desidera ruotare i log più frequentemente di una volta al giorno (una configurazione
oraria
in/etc/logrotate.d/
sarebbe inefficace, poiché l’impostazione di Logrotate del sistema viene eseguita solo una volta al giorno).
Esaminiamo queste due opzioni con alcuni esempi di configurazione.
Aggiunta di Configurazione a /etc/logrotate.d/
Vogliamo configurare la rotazione dei log per un server web fittizio che inserisce un access.log
e error.log
in /var/log/your-app/
. Viene eseguito come utente e gruppo www-data
.
Per aggiungere una configurazione per i file di log di your-app
a /etc/logrotate.d/
, prima apri un nuovo file nella directory /etc/logrotate.d
utilizzando nano
o il tuo editor preferito:
Aggiungi le seguenti righe al tuo nuovo file di configurazione:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
Alcune delle nuove direttive di configurazione in questo file sono:
create 0640 www-data www-data
: questo crea un nuovo file di log vuoto dopo la rotazione, con le autorizzazioni specificate (0640
), proprietario (www-data
), e gruppo (anch’essowww-data
).sharedscripts
: questa opzione significa che gli script aggiunti alla configurazione vengono eseguiti solo una volta per esecuzione, invece che per ogni file ruotato. Poiché il percorso/var/log/your-app/*.log
include un carattere jolly*
, questa configurazione corrisponderebbe a qualsiasi numero di file di log nella directoryyour-app
. Senza l’opzionesharedscripts
, lo script specificato inpostrotate
verrebbe eseguito ogni volta che logrotate elabora un file di log senza questa opzione.postrotate
aendscript
: questo blocco contiene uno script da eseguire dopo che il file di log è stato ruotato. In questo caso stiamo ricaricando il nostro esempio di applicazione. Talvolta è necessario fare ciò per far passare la tua applicazione al nuovo file di log appena creato.
Nota chepostrotate
viene eseguito prima che i log vengano compressi. La compressione potrebbe richiedere molto tempo e il tuo software dovrebbe passare immediatamente al nuovo file di log. Per compiti che devono essere eseguiti dopo la compressione dei log, utilizzare il bloccolastaction
invece.
Per salvare ed uscire da nano
, premi Ctrl+X
, e quando richiesto, Y
e poi Invio
. Puoi testare il file di configurazione eseguendo una simulazione:
Questo comando chiama logrotate
, lo indirizza al file di configurazione standard e attiva la modalità di debug.
Verranno stampate informazioni sui file di log che Logrotate sta gestendo e su cosa avrebbe fatto con essi. Se tutto sembra a posto, hai finito. Il lavoro standard di Logrotate verrà eseguito una volta al giorno e includerà la tua nuova configurazione.
Successivamente, proveremo una configurazione che non utilizza affatto la configurazione predefinita di Ubuntu.
Passaggio 4 — Creazione di una configurazione indipendente di Logrotate
In questo esempio abbiamo un’app in esecuzione come nostro utente sammy
, che genera log che vengono memorizzati in /home/sammy/logs/
. Vogliamo ruotare questi log ogni ora, quindi dobbiamo configurare questo al di fuori della struttura /etc/logrotate.d
fornita da Ubuntu.
Innanzitutto, creeremo un file di configurazione nella nostra directory home. Aprilo in un editor di testo:
Quindi incolla la seguente configurazione:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Salva e chiudi il file. Abbiamo incontrato tutte queste opzioni nei passaggi precedenti, ma riassumiamo: questa configurazione ruoterà i file ogni ora, comprimendo e conservando ventiquattro vecchi log e creando un nuovo file di log per sostituire quello ruotato.
Dovrai personalizzare la configurazione per adattarla alla tua applicazione, ma questo è un buon punto di partenza.
Per testare che la configurazione funzioni, creiamo un file di registro. Innanzitutto, esegui il comando cd ~
per spostarti nella directory home dell’utente. Quindi crea una directory per i log usando il comando mkdir
. Infine, crea un file vuoto nella directory logs
usando il comando touch
. Esegui i seguenti comandi nell’ordine indicato:
Ora che abbiamo un file di registro vuoto nel posto giusto, eseguiamo il comando logrotate
.
Dato che i log sono di proprietà di sammy
, non abbiamo bisogno di utilizzare sudo
. Tuttavia, dobbiamo specificare un file di stato. Questo file registra ciò che logrotate
ha trovato e le azioni che ha eseguito l’ultima volta che è stato eseguito, in modo che sappia cosa fare la prossima volta che viene eseguito. Questo tracciamento dello stato è gestito per noi quando si utilizza la configurazione predefinita /etc/logrotate.conf
. Il file di stato è memorizzato in /var/lib/logrotate/status
. Poiché non stiamo utilizzando la configurazione predefinita, dovremo configurare manualmente la posizione del file di stato.
Faremo in modo che Logrotate metta il file di stato direttamente nella nostra directory home per questo esempio. Può essere collocato ovunque sia accessibile e conveniente. Esegui il seguente comando per utilizzare il /home/sammy/logrotate.conf
che hai creato e per registrare lo stato che logrotate incontra:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
Il flag --verbose
stamperà informazioni dettagliate su ciò che Logrotate sta facendo. In questo caso, non ha ruotato nulla. Questa è la prima volta che Logrotate incontra questo file di log e ha zero ore di età, quindi non dovrebbe essere ruotato.
Se esaminiamo il file di stato utilizzando l’utilità cat
, noteremo che Logrotate ha registrato alcune informazioni sull’esecuzione:
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0
Logrotate ha annotato i registri che ha visto e quando li ha considerati per la rotazione. Se eseguiamo lo stesso comando un’ora dopo, il registro verrà ruotato come previsto.
Se desideri forzare Logrotate a ruotare il file di registro quando altrimenti non lo farebbe, utilizza il flag --force
:
Questo è utile durante il test di postrotate
e altri script.
Infine, è necessario impostare un lavoro cron per eseguire Logrotate ogni ora. Apri il crontab del tuo utente:
Questo aprirà un file di testo. Se è la prima volta che utilizzi cron, potresti essere invitato a scegliere un editor di testo predefinito. Se non hai preferenze, ti consigliamo nano
per i nuovi utenti. Potrebbero già esserci alcuni commenti nel file che spiegano la sintassi di cron. Sposta il cursore su una nuova riga vuota alla fine del file e aggiungi quanto segue:
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Questo compito verrà eseguito al 14° minuto di ogni ora, ogni giorno. Esegue praticamente lo stesso comando logrotate
che abbiamo eseguito precedentemente, anche se abbiamo espanso logrotate
al suo percorso completo di /usr/sbin/logrotate
per sicurezza. È una buona pratica utilizzare percorsi completi quando si scrivono lavori cron. Per saperne di più su cron, puoi consultare i nostri altri tutorial.
Salva il file ed esci. Questo installerà il crontab e il nostro compito verrà eseguito secondo l’orario specificato.
Se ritorniamo alla nostra directory di registro tra circa un’ora, dovremmo trovare il file di registro ruotato e compresso access.log.1.gz
(o .2.gz
se hai eseguito Logrotate con il flag --force
).
Conclusione
In questo tutorial abbiamo verificato la nostra versione di Logrotate, esplorato la configurazione predefinita di Logrotate per Ubuntu e configurato due tipi diversi di configurazioni personalizzate. Per saperne di più sulle opzioni della riga di comando e di configurazione disponibili per Logrotate, puoi leggere la sua pagina di manuale eseguendo man logrotate
nel tuo terminale o visitando la documentazione online.