GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di Logrotate in Linux per gestire i file di registro (con esempi)

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 gruppo
  • rotate 4 quattro file di registro conservati (mantieni 4 settimane di backlog)
  • create nuovi file di registro vuoti creati dopo la rotazione di quello corrente
  • dateex usa la data come suffisso del file ruotato
  • compress 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 configurazione
  • missingok se il file non esiste, è ancora ok e logrotate non dovrebbe generare errori o registrare alcun errore
  • notifempty non ruotare il file di registro se è vuoto
  • maxsize se la dimensione supera i 30k, ruota
  • yearly correre una volta all'anno
  • create 0600 root root crea il nuovo file ruotato come root :root con autorizzazioni 0600

Alcune altre opzioni non elencate sopra:

  • rotate 30 conserva trenta file, elimina i più vecchi quando superano
  • monthly ruotare una volta al mese
  • compress comprimere i file ruotati. questo usa gzip per impostazione predefinita e genera file che terminano con .gz . Il comando di compressione può essere modificato utilizzando compresscmd 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 specificate 0640 e l'utente e il gruppo specificati centos
  • 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 in postrotate verrebbe eseguito due volte senza questa opzione
  • postrotate a endscript 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 che postrotate 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, usa lastaction 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 ruotato
  • dateext 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

Linux
  1. Comando wc Linux con esempi

  2. Ordina il comando in Linux con esempi

  3. Oltre 10 comandi VI Linux con esempi

  4. Come gestire i file di registro utilizzando Logrotate in Linux

  5. comando chattr in Linux con esempi

Comando Linux WC con esempi

Timestamp dei file Linux spiegati con esempi

Utilizzo del comando Linux mv con esempi

Comando di montaggio Linux con esempi

Comando gawk Linux con esempi

Linux make Command con esempi