Come ruotare il registro in base a un intervallo a meno che il registro non superi una determinata dimensione?


20

Dalla pagina man di logrotate:

dimensione minima I
file di registro vengono ruotati quando diventano più grandi della dimensione dei byte, ma non prima dell'intervallo di tempo specificato in più (giornaliero, settimanale, mensile o annuale). L'opzione relativa alle dimensioni è simile, tranne per il fatto che si escludono a vicenda con le opzioni dell'intervallo di tempo e provoca la rotazione dei file di registro senza tener conto dell'ultimo tempo di rotazione. Quando si utilizza minsize, vengono prese in considerazione sia la dimensione che la data / ora di un file di registro.

size size I
file di registro vengono ruotati quando diventano più grandi dei byte di dimensione. Se la dimensione è seguita da k, si presume che la dimensione sia in kilobyte. Se si utilizza la M, la dimensione è in megabyte e, se si utilizza G, la dimensione è in gigabyte. Quindi taglia 100, taglia 100k, taglia 100M e taglia 100Gare tutti validi.

Ho impostato la dimensione come 5M e l' intervallo come settimanale pensando che i registri verrebbero ruotati su base settimanale e si verificherebbe una rotazione aggiuntiva se la dimensione del registro superasse 5M. Ma ciò che accade è che il registro non viene ruotato a meno che non superi 5M, il che sembra essere ciò che dovrebbe fare minsize .

Sto interpretando il manuale in modo errato? Come faccio a far ruotare il registro su base settimanale E se supera i 5 M?

MODIFICARE:

Non sono sicuro che le seguenti informazioni siano pertinenti, ma solo per integrare:

Sto usando rsyslog per fare la registrazione principale per i messaggi, sicuro, cron, maillog, avvio. Di seguito sono riportati la data di rotazione e la dimensione del file dei penultimo registri in cui la dimensione e l'intervallo sono impostati come descritto sopra:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Come si può vedere, solo i messaggi vengono ruotati.

EDIT2:

Dovrei controllare man logrotate. Lo hanno effettivamente aggiornato con l' opzione maxsize . Questo dovrebbe essere quello che sto cercando:

maxsize formato
file di log vengono ruotati quando crescono più grandi di dimensioni byte anche prima che l'intervallo di tempo in aggiunta specificato (giornaliera, settimanale, mensile o annuale). L'opzione relativa alle dimensioni è simile, tranne per il fatto che si escludono a vicenda con le opzioni dell'intervallo di tempo e provoca la rotazione dei file di registro indipendentemente dall'ultimo tempo di rotazione. Quando si utilizza maxsize, vengono prese in considerazione sia la dimensione che la data / ora di un file di registro.

Risposte:


24

Qui è possibile rispondere ad alcune domande: accedere quotidianamente e dimensioni?

In genere logrotateverrà eseguito solo una volta al giorno, quindi i limiti di dimensione non verranno rispettati esattamente. logrotateIl file di stato (possibilmente /var/lib/logrotate.status) memorizza solo le date (non i tempi), non è previsto per un uso più frequente, quindi non è possibile ruotare banalmente i file più frequentemente ( Aggiornamento : la versione 3.85 aggiunge il supporto orario e memorizza un timestamp completo nel file di stato .)

Non dici quale syslogdstai usando, rsyslog e syslog-ng supportano la rotazione basata sulla dimensione autogestita, quindi dovresti essere in grado di farli ruotare per dimensione e arrivare logrotatea ruotare settimanalmente (anche se alcuni pensieri potrebbero essere richiesti per denominazione dei file per assicurarsi che la rotazione simultanea dei file non elimini accidentalmente qualcosa).

Un'altra opzione è quella di utilizzare i log in pipe, proprio come Apache, infatti Apache-2.4 rotatelogs supporta esattamente questa funzione (le versioni precedenti supportavano solo dimensioni o tempo in modo indipendente). Non dici da dove provengono i log, ma potresti essere in grado di accedere a una pipe o a fifo e utilizzare rotatelogs, se supportato.

Con logrotate<= v3.8.0 i tre scenari supportati sono:

  1. dimensione ruota per dimensione, al massimo una volta al giorno, indipendentemente dal periodo di tempo trascorso
  2. timeperiod ruota incondizionatamente di timeperiod, indipendentemente dalle dimensioni
  3. minsize e timeperiod se la dimensione del file di registro supera minsize, quindi ruota per timeperiod. Un uso comune è "minsize 1" che significa che i registri a 0 byte non vengono ruotati, riducendo al minimo l'ingombro.

logrotate-3.8.1 aggiunge:

  1. maxsize e timeperiod ruotano quando entrambe le dimensioni superano maxsize o dopo un periodo di tempo trascorso. logrotatein questo caso potrebbe essere necessario eseguire più del valore predefinito una volta al giorno.

logrotate-3.8.5 aggiunge:

  1. supporto orario e memorizza un timestamp completo nel file di stato. Dovresti correre logrotate(almeno) ogni ora per questo.

Si prega di consultare il mio aggiornamento, grazie per il link. Sembra che siano richiesti alcuni script? minsize non sembra molto utile, mi chiedo perché ce l'hanno invece di maxsize.
Domanda Overflow

1
Sì, l'opzione maxsize è ora disponibile. Chiusura del caso :)
Overflow della domanda

notato che nei documenti prima di leggere il tuo aggiornamento ... risposta ora espansa. grazie.
mr.spuratic,

1
> Il file di stato di logrotate (possibilmente /var/lib/logrotate.status) memorizza solo le date (non le ore) Questa affermazione potrebbe non essere aggiornata. Ho appena controllato il mio file di stato logrotate e conteneva i timestamp con la seconda risoluzione: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair
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.