GNU/Linux >> Linux Esercitazione >  >> Linux

Ruota e archivia i registri con il comando logrotate di Linux

I log sono ottimi per scoprire cosa sta facendo un'applicazione o per risolvere un possibile problema. Quasi tutte le applicazioni con cui ci occupiamo generano registri e vogliamo che anche le applicazioni che sviluppiamo noi stessi li generino. Più i log sono dettagliati, più informazioni abbiamo. Ma lasciati a se stessi, i tronchi possono crescere fino a raggiungere dimensioni ingestibili e possono, a loro volta, diventare un problema tutto loro. Quindi è una buona idea tenerli ridotti, mantenere quelli di cui avremo bisogno e archiviare il resto.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Nozioni di base

Il logrotate l'utilità è eccellente nella gestione dei registri. Può ruotarli, comprimerli, inviarli via e-mail, eliminarli, archiviarli e avviarne di nuovi quando ne hai bisogno.

Esecuzione di logrotate è piuttosto semplice:basta eseguire logrotate -vs state-file config-file . Nel comando precedente, il v l'opzione abilita la modalità dettagliata, s specifica un file di stato e il config-file finale menziona il file di configurazione, dove specifichi cosa devi fare.

Hands-on

Diamo un'occhiata a un logrotate configurazione che viene eseguita silenziosamente sul nostro sistema, gestendo la ricchezza di log che troviamo nel /var/log directory. Controlla i file correnti in quella directory. Vedi molti *.[number].gz File? Ecco cosa logrotate sta facendo. Puoi trovare il file di configurazione per questo in /etc/logrotate.d/rsyslog . Il mio si presenta così:

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

Il file inizia con la definizione delle istruzioni per ruotare il /var/log/syslog file e le istruzioni sono contenute tra parentesi graffe che seguono. Ecco cosa significano:

  • rotate 7 :Conserva i registri delle ultime sette rotazioni. Quindi inizia a eliminarli.
  • daily :ruota il registro ogni giorno. Insieme a rotate 7 , ciò significherebbe che i registri verrebbero conservati per gli ultimi sette giorni. Altre opzioni sono weeklymonthlyyearly . C'è anche una size parametro che ruoterà i file di registro se la loro dimensione aumenta oltre un limite specificato, ad esempio size 10ksize 10Msize 10G , ecc. Se non viene specificato nulla, i log verranno ruotati ogni volta che logrotate corre. Puoi persino eseguire logrotate in un cron per utilizzarlo a intervalli di tempo più specifici.
  • missingok :Va bene se manca il file di registro. Niente panico.
  • notifempty :non ruotare se il file di registro è vuoto.
  • delaycompress :Se la compressione è attiva, ritarda la compressione fino alla rotazione successiva. Ciò consente la presenza di almeno un file ruotato ma non compresso. Utile se si desidera che i registri di ieri non vengano compressi per la risoluzione dei problemi. È anche utile se qualche programma potrebbe ancora scrivere sul vecchio file finché non viene riavviato/ricaricato, come Apache.
  • compress :La compressione è attiva. Usa nocompress per spegnerlo.
  • postrotate/endscript :esegui lo script all'interno di questa sezione dopo la rotazione. Utile per la pulizia. C'è anche un prerotate/endscript per fare le cose prima che inizi la rotazione.

Riesci a capire cosa fa la prossima sezione per tutti quei file menzionati nella configurazione sopra? L'unico parametro aggiuntivo nella seconda sezione è sharedscripts , che indica logrotate per non eseguire la sezione all'interno di postrotate/endscript fino al completamento di tutta la rotazione del registro. Impedisce l'esecuzione dello script per ogni registro ruotato e viene eseguito una volta alla fine.

Qualcosa di nuovo

Sto usando la seguente configurazione per gestire l'accesso Nginx e i registri degli errori sul mio sistema.

/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

Lo script sopra può essere eseguito utilizzando:

logrotate -vs state-file /tmp/logrotate

L'esecuzione del comando per la prima volta fornisce questo output:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Ed eseguirlo una seconda volta:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Ed eseguirlo una terza volta:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Il contenuto del file di stato è simile al seguente:

logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

Scarica il cheat sheet di Linux logrotate.

Questo articolo è stato originariamente pubblicato sul blog personale dell'autore ed è stato adattato previa autorizzazione.


Linux
  1. Pianificazione delle attività con il comando cron di Linux

  2. Diagnostica i problemi di connettività con il comando ping di Linux

  3. Controlla i comandi e le attività con il comando watch di Linux

  4. Sostituisci le virgolette intelligenti con il comando sed di Linux

  5. Trova file e directory su Linux con il comando find

Come utilizzare il comando sleep di Linux con esempi

Come utilizzare il comando who in Linux con esempi

Comando tar in Linux con esempi

Come ruotare e comprimere i file di registro in Linux con Logrotate

Come trovare file con il comando fd in Linux

HowTo:l'esercitazione definitiva sui comandi Logrotate con 10 esempi