Como girar o log com base em um intervalo, a menos que o log exceda um determinado tamanho?

19

Da página man do logrotate:

minsize size
Log files are rotated when they grow bigger than size bytes, but not before the additionally specified time interval (daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated without regard for the last rotation time. When minsize is used, both the size and timestamp of a log file are considered.

size size
Log files are rotated when they grow bigger than size bytes. If size is followed by k, the size is assumed to be in kilobytes. If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100Gare all valid.

Defino tamanho como 5M e intervalo como semanalmente pensando que os logs seriam alternados semanalmente base e rotação adicional ocorreria se o tamanho do log excede 5M. Mas o que acontece é que o log não é rotacionado a menos que exceda 5M, o que parece ser o que minsize deve fazer.

Estou interpretando o manual errado? Como faço para que o log gire semanalmente E se exceder 5 milhões?

EDITAR:

Não tenho certeza se as seguintes informações são relevantes, mas apenas para complementar:

Estou usando o rsyslog para fazer o registro principal de mensagens, secure, cron, maillog, boot. A seguir estão a data de rotação e o tamanho do arquivo dos penúltimos registros em que tamanho e intervalo são definidos como descrito acima:

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

Como pode ser visto, somente as mensagens são rotacionadas.

EDIT2:

Eu deveria verificar com man logrotate . Eles realmente atualizaram com a opção maxsize . Isso deve ser o que estou procurando:

maxsize size
Log files are rotated when they grow bigger than size bytes even before the additionally specified time interval (daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated without regard for the last rotation time. When maxsize is used, both the size and timestamp of a log file are considered.

    
por Question Overflow 03.02.2013 / 14:46

1 resposta

20

Algumas perguntas são respondidas aqui:   logrotate diariamente e tamanho?

Normalmente, o logrotate será executado apenas uma vez por dia, portanto, os limites de tamanho não serão honrados exatamente. O arquivo de status de logrotate (possivelmente /var/lib/logrotate.status ) armazena apenas as datas (não as vezes), ele não deve ser usado com mais frequência, portanto você não pode rotacionar arquivos com mais frequência ( Atualizar : versão 3.85 adiciona suporte por hora e armazena um registro de data e hora completo no arquivo de estado.)

Você não diz quais syslogd você está usando, rsyslog e syslog-ng suportam rotação baseada em tamanho autogerenciado, então você deve ser capaz de faça com que eles girem por tamanho e faça com que logrotate gire semanalmente (embora alguns pensamentos possam ser necessários para a nomeação de arquivos para garantir que a rotação simultânea de arquivos não apague acidentalmente alguma coisa).

Uma outra opção é usar logs canalizados, assim como o Apache, na verdade, o rotatelogs do Apache-2.4 suporta exatamente esse recurso (versões anteriores suportavam apenas tamanho ou tempo independentemente). Você não diz de onde os logs são originários, mas você pode logar em um pipe ou fifo, e usar rotatelogs , se isso for suportado.

Com logrotate < = v3.8.0 os três cenários suportados são:

  1. tamanho  rotação por tamanho, uma vez por dia, no máximo, independentemente do tempo decorrido
  2. timeperiod   rotacionar incondicionalmente por período de tempo, independentemente do tamanho
  3. minsize & timeperiod   se o tamanho do arquivo de log exceder o tamanho mínimo, gire por tempo. Um uso comum é "minsize 1", o que significa que os logs de 0 byte não são rotacionados, minimizando a desordem.

logrotate-3.8.1 adiciona:

  1. maxsize & timeperiod  gire quando o tamanho exceder maxsize ou após o período de tempo decorrido. logrotate pode precisar ser executado mais do que o padrão uma vez por dia nesse caso.

logrotate-3.8.5 adiciona:

  1. suporte por hora e armazena um registro de data e hora completo no arquivo de estado. Você deve executar logrotate (pelo menos) por hora para isso.
por 03.02.2013 / 15:46