Quando utilizzare l'opzione delaycompress in logrotate?


33

La pagina man di logrotatedice che:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Sono confuso da questo. Se non si può dire a un programma di chiudere il suo file di registro, continuerà a scrivere per sempre , non per qualche tempo . Se la compressione viene posticipata al prossimo ciclo di rotazione, il programma continua a scrivere su quel file anche dopo il successivo ciclo di rotazione. In che modo il rinvio risolve il problema?

La mia comprensione è che copytruncatedovrebbe essere usato quando un programma non può essere detto di chiudere il file di registro. Sono consapevole che alcuni dati scritti nel file di registro vengono persi quando la copia è in corso.

Stavo guardando il file logrotate per CouchDB, ed è avuto sia copytruncatee delaycompressopzioni.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Sembra che non abbia senso usare delaycompressquando copytruncateè già lì. Cosa mi sto perdendo?

Risposte:


27

La tua comprensione copytruncateè corretta, ma la formulazione nella manpage per delaycompressè un po 'fuorviante. Più correttamente, dovrebbe essere indicato "quando non è possibile indicare a un programma di chiudere immediatamente il file di registro", ad esempio se si utilizzano script condivisi e lo script invia un segnale al processo utilizzando il registro quando tutti i file di registro sono stati ruotati .


1
Quando sto usando copytruncate, non è necessario dire al programma di chiudere il suo file di registro. Quindi non ha senso specificare delaycompressinsieme copytruncate?
Anand Chitipothu,

6
Non usare mai a copytruncatemeno che non sia assolutamente necessario, perché perde le voci del registro. È possibile utilizzare entrambe le opzioni se si desidera l'altra funzionalità che delaycompressoffre: la possibilità di leggere il file di registro precedente senza prima decomprimerlo.
womble

Esiste qualche altra opzione copytruncatese non posso dire al mio programma di ricaricare?
Anand Chitipothu,

5
No. È per questo che dovresti usare software che non fa schifo e che accetterà un segnale per dire "ricaricare i tuoi registri".
womble

3

Non sono sicuro di aver compreso completamente la tua domanda, ma se mi stai chiedendo cosa penso ... Uso questo:

postrotate
          killall -HUP syslog-ng
  endscript

È un modo carino (o almeno un) di uccidere il registro e passare al successivo. Per i "programmi" che fanno schifo, come la piattaforma ASA di Cisco che registra tonnellate di dati al secondo, funziona.


3

Noi usiamo:

  • quotidiano
  • delaycompress
  • nodateext

Questo crea una copia fissa di Apache in access_log access_log.1modo che possiamo quindi eseguire il nostro pacchetto Stat come script alla fine della giornata.

Il giorno seguente logrotate comprime la creazione del file access_log.2.zip

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.