Rotação de log acionada por espaço livre no linux?

8

Alguém acabou de me perguntar "por quanto tempo devemos manter registros para nosso aplicativo", e minha resposta foi "até que o disco esteja cheio", já que não há motivo para descartá-los além de ficar sem espaço.

No entanto, o logrotate padrão nos quer especificar um período específico + número de rotações. Existe algo semelhante que nos permite dizer "rodar diariamente e manter a história que quiser até que haja apenas 5% de espaço livre"?

A plataforma é Redhat Linux.

    
por kdt 23.03.2012 / 18:05

3 respostas

9

Você pode, talvez, usar as diretivas firstaction ou lastaction para chamar um script de shell que testa o espaço livre em disco e, em seguida, executar uma exclusão nos arquivos mais antigos.

   firstaction/endscript
          The lines between firstaction and endscript (both of which must appear on lines by themselves) are
          executed (using /bin/sh) once before all log files that match the wildcarded pattern are  rotated,
          before  prerotate  script  is  run  and  only if at least one log will actually be rotated.  These
          directives may only appear inside a log file definition. Whole pattern is passed to the script  as
          first  argument.  If  the script exits with error, no further processing is done. See also lastac-
          tion.

Atualização:

Aqui está uma postagem do Stackoverflow sobre o tipo de script que você pode executar:

link

    
por 23.03.2012 / 18:11
1

logrotate em si não tem essa opção. Você pode adicionar um script cron que encontre o log mais antigo a ser removido sempre que o espaço livre ficar abaixo dos seus critérios. Você pode fazer outra validação também. No entanto, obter disco muito cheio o tempo todo não é uma boa ideia porque o sistema não poderá criar arquivos temporários grandes e pode causar falhas no aplicativo.

    
por 23.03.2012 / 18:10
0

Eu só queria salientar que há casos em que você não deseja que seus logs preencham todo o espaço disponível em disco. Eu lidei com vários hosts com diretórios thin provisioned / var e manter os logs em um determinado tamanho foi crucial. Usamos um trabalho de cronies em conjunto com logrorate para manter o tamanho baixo. Algo semelhante poderia ser usado em seu ambiente, embora um servidor de log central como o splunk ou o syslog-ng provavelmente seria uma opção melhor.

    
por 24.03.2012 / 03:25