Come Gestire i Log con Logrotate su Ubuntu 22.04

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:

  1. sudo apt update
  2. sudo apt install logrotate

Se si sta utilizzando un server non-Ubuntu, assicurarsi prima che Logrotate sia installato chiedendo le informazioni sulla sua versione:

  1. logrotate --version
Output
logrotate 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):

  1. man logrotate

È 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’istruzione include 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 come apt, 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:

  1. cat /etc/logrotate.d/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 predefinito rotate 4.
  • monthly: ruota una volta al mese. Questo sovrascrive il valore predefinito weekly.
  • compress: comprimi i file ruotati. Questo utilizza di default gzip e produce file con estensione .gz. Il comando di compressione può essere modificato utilizzando l’opzione compresscmd.
  • 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:

  1. 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.
  2. 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:

  1. sudo nano /etc/logrotate.d/your-app

Aggiungi le seguenti righe al tuo nuovo file di configurazione:

/etc/logrotate.d/your-app
/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’esso www-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 directory your-app. Senza l’opzione sharedscripts, lo script specificato in postrotate verrebbe eseguito ogni volta che logrotate elabora un file di log senza questa opzione.
  • postrotate a endscript: 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 che postrotate 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 blocco lastaction 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:

  1. sudo logrotate /etc/logrotate.conf --debug

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:

  1. nano /home/sammy/logrotate.conf

Quindi incolla la seguente configurazione:

/home/sammy/logrotate.conf
/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:

  1. cd ~
  2. mkdir logs
  3. touch logs/access.log

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
Output
reading 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:

  1. cat /home/sammy/logrotate-state
Output
logrotate 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:

  1. logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --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:

  1. crontab -e

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:

crontab
14 * * * * /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.

Source:
https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-22-04