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
weekly
configurare le rotazioni dei log settimanali con i file di log di proprietà della root utente e il syslog grupporotate 4
quattro file di registro conservati (mantieni 4 settimane di backlog)create
nuovi file di registro vuoti creati dopo la rotazione di quello correntedateex
usa la data come suffisso del file ruotatocompress
comprimi 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.log
questa prima riga indica quale file è il target di configurazionemissingok
se il file non esiste, è ancora ok e logrotate non dovrebbe generare errori o registrare alcun errorenotifempty
non ruotare il file di registro se è vuotomaxsize
se la dimensione supera i 30k, ruotayearly
correre una volta all'annocreate 0600 root root
crea il nuovo file ruotato comeroot
:root
con autorizzazioni0600
Alcune altre opzioni non elencate sopra:
rotate 30
conserva trenta file, elimina i più vecchi quando superanomonthly
ruotare una volta al mesecompress
comprimere i file ruotati. questo usagzip
per impostazione predefinita e genera file che terminano con.gz
. Il comando di compressione può essere modificato utilizzandocompresscmd
opzione.
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
logrotate
comando 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 centos
crea un file di registro vuoto dopo la rotazione con le autorizzazioni specificate0640
e l'utente e il gruppo specificaticentos
sharedscripts
significa 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/*.log
corrisponde a più di un file di registro, lo script specificato inpostrotate
verrebbe eseguito due volte senza questa opzionepostrotate
aendscript
block 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 chepostrotate
viene 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, usalastaction
bloccare 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.
copytruncate
copia il contenuto di un file di registro in un nuovo file, quindi tronca il file di registro.dateformat
specifica il formato del file ruotatodateext
indica 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
--verbose
stamperà 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