Il sistema operativo Linux e le applicazioni in esecuzione generano spesso log in file. Questi file sono spesso archiviati in /var/log directory o qualsiasi altro file specificato dall'app. Se questi file di registro non vengono ruotati, compressi e periodicamente eliminati, alla fine consumeranno tutto lo spazio su disco disponibile causando il blocco del server.
In questa guida, daremo un'occhiata a come funziona logrotate, quindi esamineremo un esempio su come configurare la logrotation per la nostra app personalizzata.
Prerequisiti
Per seguire questa guida, hai bisogno di:
- Una moderna distribuzione Linux come Ubuntu, Debian, Centos, Rhel, Rocky Linux
- Accesso root al server o utente con privilegi sudo
Controlla la tua versione logrotate con questo comando:
logrotate --version Output dal mio sistema:
# logrotate --version
logrotate 3.8.6 Se Logrotate non è installato, riceverai un errore. Installa il software utilizzando il gestore di pacchetti della tua distribuzione Linux.
Lograta configurazione
La configurazione di logrotate può essere trovata in questo file /etc/logrotate.conf . Qui è dove si trovano le impostazioni predefinite. Troverai anche alcune configurazioni di rotazione per i log che non sono di proprietà di nessun pacchetto di sistema.
La riga più importante in questo file di configurazione è include /etc/logrotate.d . Questo indica a logrotate di controllare anche le configurazioni aggiunte in quella directory. Ciò significa che per le nostre applicazioni non è necessario aggiungere tutto in quel file principale, possiamo creare singoli file di configurazione e aggiungerli a /etc/logrotate.d directory. La maggior parte dei pacchetti che installi che necessitano di aiuto con la rotazione dei log inseriranno anche i loro file di configurazione logrotate in quella directory.
Questo è un contenuto dal /etc/logrotate.conf principale file:
weekly
rotate 4
create
dateext
compress weeklyconfigurare le rotazioni dei log settimanali con i file di log di proprietà della root utente e il syslog grupporotate 4quattro file di registro conservati (mantieni 4 settimane di backlog)createnuovi file di registro vuoti creati dopo la rotazione di quello correntedateexusa la data come suffisso del file ruotatocompresscomprimi i file ruotati
Per i singoli file in /etc/logrotate.d directory, diamo un'occhiata a uno come esempio:
cat /etc/logrotate.d/yum Uscita:
/var/log/yum.log {
missingok
notifempty
maxsize 30k
yearly
create 0600 root root
}
Ognuna di queste configurazioni erediterà le configurazioni predefinite in /etc/logrotate.conf directory.
Spiegazione:
/var/log/yum.logquesta prima riga indica quale file è il target di configurazionemissingokse il file non esiste, è ancora ok e logrotate non dovrebbe generare errori o registrare alcun errorenotifemptynon ruotare il file di registro se è vuotomaxsizese la dimensione supera i 30k, ruotayearlycorrere una volta all'annocreate 0600 root rootcrea il nuovo file ruotato comeroot:rootcon autorizzazioni0600
Alcune altre opzioni non elencate sopra:
rotate 30conserva trenta file, elimina i più vecchi quando superanomonthlyruotare una volta al mesecompresscomprimere i file ruotati. questo usagzipper impostazione predefinita e genera file che terminano con.gz. Il comando di compressione può essere modificato utilizzandocompresscmdopzione.
Logrotazione del file di registro dell'app personalizzato
Quando la nostra applicazione personalizzata genera e scrive registri in un file, è nostro compito configurare il modo in cui viene eseguita la rotazione per quel file.
- Se abbiamo l'accesso come root, idealmente collocheremmo il file di configurazione in
/etc/logrotate.d/directory e funzionerebbe come descritto sopra - Se non abbiamo accesso come root, dovremmo configurare un cron per eseguire
logrotatecomando che passa la configurazione che abbiamo definito - Se desideri ruotare i registri più frequentemente rispetto a ogni giorno, ad esempio ogni ora, perché la configurazione di Logrotate del sistema viene eseguita solo una volta al giorno
Configurazione in /etc/logrotate.d/
Supponiamo di avere i log di generazione delle app su /var/log/our-app/app.log e funziona come centos . Creiamo il nostro file di configurazione logrotate /etc/logrotate/ourapp.conf con alcune configurazioni di esempio:
sudo vim /etc/logrotate.d/ourapp.conf Configurazione:
/var/log/our-app/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 centos centos
sharedscripts
postrotate
systemctl reload our-app
endscript
} Alcune nuove direttive:
create 0640 centos centoscrea un file di registro vuoto dopo la rotazione con le autorizzazioni specificate0640e l'utente e il gruppo specificaticentossharedscriptssignifica che tutti gli script aggiunti alla configurazione vengono eseguiti solo una volta per esecuzione, invece che per ogni file ruotato. Se la direttiva/var/log/our-app/*.logcorrisponde a più di un file di registro, lo script specificato inpostrotateverrebbe eseguito due volte senza questa opzionepostrotateaendscriptblock contiene uno script da eseguire dopo la rotazione del file di registro. Nel nostro caso ricaricare l'app. Questo a volte è necessario per fare in modo che l'applicazione passi al file di registro appena creato. Nota chepostrotateviene eseguito prima che i registri vengano compressi. La compressione potrebbe richiedere molto tempo e il software dovrebbe passare immediatamente al nuovo file di registro. Per le attività che devono essere eseguite dopo i log sono compressi, usalastactionbloccare invece.
Per testare la configurazione sopra, usa questo comando:
sudo logrotate /etc/logrotate.conf --debug L'output riguarderà i file di registro che Logrotate sta gestendo e cosa avrebbe fatto loro. Il processo Logrotate standard verrà eseguito una volta al giorno e includerà la nuova configurazione.
Dati di esempio nell'output
...
rotating pattern: /var/log/our-app/*.log after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
... Utilizzo di logrotate comando per la configurazione personalizzata
Se non hai l'accesso come root al sistema e vuoi logrotare i tuoi file personalizzati, questa sezione ti offre un modo per farlo.
Diciamo un'app our-app sta generando file di registro e salvandoli in un percorso personalizzato all'interno della nostra home directory, ad es. ~/apps/our-app/logs/ . Se i log vengono generati frequentemente, vorremmo ruotarli hourly . Ma logrotate non funziona ogni ora?
Per prima cosa creiamo un file di configurazione logrotate. Metterò il file all'interno della directory conf dell'app in questo percorso ~/apps/our-app/conf/lorotate.conf con la seguente configurazione:
Modifica il file:
vim ~/apps/our-app/conf/lorotate.conf Con la seguente configurazione:
/home/centos/apps/our-app/logs/*.log {
rotate 30
hourly
compress
sharedscripts
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d-%s
copytruncate
}
La configurazione precedente ruota i file nella directory /home/centos/apps/our-app/logs/*.log ogni ora, comprimendo e conservando solo 30 vecchi log.
copytruncatecopia il contenuto di un file di registro in un nuovo file, quindi tronca il file di registro.dateformatspecifica il formato del file ruotatodateextindica a logrotate di includere l'estensione della data per i file ruotati.
Per testare:
mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log
Ora che abbiamo il file a posto, ora possiamo usare logrotate per ruotarlo. L'unica cosa che dobbiamo fare è specificare uno state file. Uno state file registra cosa logrotate visto l'ultima volta che è stato eseguito, quindi sa cosa fare. Per la configurazione dell'installazione del sistema, è già gestita in /var/lib/logrotate/status ma nel nostro caso bisogna specificare.
Possiamo usare la home directory per questo:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --verbosestamperà informazioni dettagliate su ciò che Logrotate sta facendo.
Dovresti vedere un output come questo:
$ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /home/centos/apps/our-app/logs/*.log hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
log does not need rotating (log has been already rotated)set default create context Alcune informazioni sono state registrate nel file di stato logrotate:
$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0 Logrotate ha annotato i tronchi che ha visto e l'ultima volta che li ha considerati per la rotazione. Se eseguiamo lo stesso comando un'ora dopo, il registro verrà ruotato come previsto.
Se vuoi forzare Logrotate a ruotare il file di registro quando altrimenti non lo farebbe, usa il --force bandiera:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force
Questo è utile quando si testa postrotate e altri script.
La prossima cosa è che il comando sopra venga eseguito automaticamente. Questo può essere ottenuto usando crons. Il crontab il comando è utile.
Per modificare cron in modo da poter utilizzare questo comando:
crontab -e Questo aprirà un file di testo. Potrebbero esserci già alcuni commenti nel file che spiegano la sintassi di base prevista. Sposta il cursore in basso su una nuova riga vuota alla fine del file e aggiungi quanto segue:
3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status
Quanto sopra eseguirà il comando logrotate ogni 3 minuti di ogni ora. Usiamo il percorso completo /usr/sbin/logrotate quindi non riceviamo l'errore Comando non trovato.
Salva il file ed esci. Questo installerà crontab e la nostra attività verrà eseguita secondo la pianificazione specificata.
Conclusione
Abbiamo esaminato logrotate in questa guida. Siamo stati in grado di verificarne la versione, controllare la configurazione predefinita e impostare la nostra configurazione personalizzata. Per saperne di più sulla riga di comando e sulle opzioni di configurazione disponibili per Logrotate, puoi leggere la sua pagina di manuale eseguendo man logrotate nel tuo terminale:
man logrotate