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

20

Na página de manual do logrotate:

minsize tamanho
arquivos de log são giradas durante a crescer mais do que bytes de tamanho, mas não antes de o intervalo de tempo especificado adicionalmente (diário, semanal, mensal ou anual). A opção de tamanho relacionado é semelhante, exceto que é mutuamente exclusiva com as opções de intervalo de tempo e faz com que os arquivos de log sejam girados sem levar em consideração o último tempo de rotação. Quando minsize é usado, o tamanho e o carimbo de data e hora de um arquivo de log são considerados.

tamanho tamanho
arquivos de log são girados quando crescem mais que o tamanho bytes. Se tamanho for seguido por k, o tamanho será assumido em kilobytes. Se M for usado, o tamanho será em megabytes, e se G for usado, o tamanho será em gigabytes. Então, tamanho 100, tamanho 100k, tamanho 100M e tamanho 100, todos válidos.

Defino o tamanho como 5M e o intervalo como semanal, pensando que os logs seriam rotacionados semanalmente e ocorreria uma rotação adicional se o tamanho do log exceder 5M. Mas o que acontece é que o log não é rotacionado a menos que exceda 5M, o que parece ser o que o tamanho de min deveria fazer.

Estou interpretando o manual incorretamente? Como faço para que o registro 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, seguro, cron, maillog, inicialização. A seguir, estão a data de rotação e o tamanho do arquivo dos penúltimos logs 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, apenas as mensagens são rotacionadas.

EDIT2:

Eu deveria ter verificado man logrotate. Eles realmente fizeram o upgrade com a opção maxsize . Deve ser o que estou procurando:

tamanho maxsize Os
arquivos de log são girados quando crescem mais do que o tamanho de bytes mesmo antes do intervalo de tempo especificado adicionalmente (diário, semanal, mensal ou anual). A opção de tamanho relacionado é semelhante, exceto que é mutuamente exclusiva com as opções de intervalo de tempo e faz com que os arquivos de log sejam girados sem levar em consideração o último tempo de rotação. Quando maxsize é usado, o tamanho e o carimbo de data e hora de um arquivo de log são considerados.

Pergunta Overflow
fonte

Respostas:

24

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

Normalmente logrotate, só é executado uma vez por dia, portanto os limites de tamanho não serão respeitados exatamente. logrotateO arquivo de status (possivelmente /var/lib/logrotate.status) armazena apenas datas (não horas), não se destina a ser usado com mais frequência, portanto, você não pode rotacionar arquivos com mais frequência com frequência (a atualização : 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 o que syslogdestá usando, o rsyslog e o syslog-ng suportam a rotação autogerenciada com base em tamanho, portanto, você poderá fazer com que eles sejam rotacionados por tamanho e logrotatealternar semanalmente (embora possa ser necessário nomeação de arquivos para garantir que a rotação simultânea não exclua algo acidentalmente).

Uma outra opção é usar logs canalizados, assim como o Apache, de fato, o Apache-2.4 rotatelogs suporta exatamente esse recurso (as versões anteriores suportam apenas tamanho ou hora independentemente). Você não diz de onde os logs são originários, mas pode conseguir fazer logon em um pipe ou fifo e usá-lo rotatelogs, se for suportado.

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

  1. tamanho alternar por tamanho, uma vez por dia, no máximo, independentemente do período de tempo decorrido
  2. timeperiod gira incondicionalmente por timeperiod, independentemente do tamanho
  3. minsize e timeperiod se o tamanho do arquivo de log exceder o minsize e gire por timeperiod. Um uso comum é "tamanho minúsculo 1", o que significa que os logs de 0 byte não são girados, minimizando a desorganização.

logrotate-3.8.1 acrescenta:

  1. maxsize e timeperiod alternam quando qualquer tamanho excede o tamanho máximo ou após o período de tempo decorrido. logrotatepode ser necessário executar mais do que o padrão uma vez por dia nesse caso.

logrotate-3.8.5 acrescenta:

  1. suporte por hora e armazena um carimbo de data / hora completo no arquivo de estado. Você deve executar logrotate(pelo menos) a cada hora para isso.
mr.spuratic
fonte
Por favor, veja minha atualização, obrigado pelo link. Parece que é necessário algum script? minsize não parece muito útil, eu me pergunto por que eles o têm em vez de maxsize.
Pergunta Overflow
11
Yay, a opção maxsize já está disponível. Case close :)
estouro de pergunta
percebi isso nos documentos antes de ler sua atualização ... a resposta agora foi expandida. THX.
precisa saber é o seguinte
11
> o arquivo de status do logrotate (possivelmente /var/lib/logrotate.status) armazena apenas datas (não horas) Esta declaração pode estar desatualizada. Acabei de verificar meu arquivo de status de logrotate e ele continha carimbos de data e hora com segunda resolução: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair 13/03/18