Alterando a maneira padrão do LogRotate de girar os arquivos de log

2

Minha observação de logrotation é que rotacionar qualquer arquivo de log, o processo logrotate, na seguinte ordem

  1. copia o arquivo de log em questão (permite chamá-lo de file1.log) com um novo nome (adicionando data e hora ou um número ao nome existente para que se torne file1.log-20140513),
  2. exclui o arquivo existente (file1.log) e cria um novo arquivo de log em branco com o nome original (file1.log),
  3. compacta o arquivo girado (file1.log-20140513), que cria um novo arquivo compactado (file1.log-20140513.gz), se a opção de compactação estiver definida,
  4. exclui o arquivo girado (file1.log-20140513) e, finalmente,
  5. vá para o próximo arquivo para fazer o mesmo acima de 4 etapas.

Estou com o seguinte problema com este processo:

  1. Meus arquivos de log são enormes em tamanho (mais de 10 Gb cada) e eu tenho cerca de 42 desses arquivos de log.
  2. Os processos que gravam nesses arquivos funcionam em sincronia
  3. O DiskIO no servidor é bom, mas ainda assim, copiar demora, e a compactação também leva tempo e a compactação também consome a CPU.
  4. Eu quero que todos os arquivos de log recém-criados tenham logs começando ao mesmo tempo.

Para fazer isso, quero que o logrotate se mova, algo que o comando mv faz, que renomeia os arquivos em vez de copiá-los. Quanto à compressão, posso desabilitar isso e acioná-lo através de um script diferente agendado via cron. Mas eu quero que o logrotate mova os arquivos em vez de copiá-los.

Agora, tenho certeza que isso é algo que os autores do logrotate também teriam pensado, pois obviamente economiza disco IO e tempo necessário para completar toda a operação logrotate, então eu quero saber porque os arquivos estão sendo copiados ao invés de serem movidos ou renomeados , e como faço para conseguir isso via logrotate.

NOTA: Eu tentei fazê-lo manualmente, que foi, mover o arquivo para o qual um processo em execução estava escrevendo também e criar um novo arquivo em branco com o mesmo nome e mesmas permissões (que é raiz, que também é a permissão que o processo está rodando com), mas depois de mover e criar um novo arquivo, vi que o processo não estava escrevendo nada para ele, então tive que reiniciar o processo para fazer com que ele escrevesse naquele arquivo. Alguém pode explicar esse comportamento também por que logrotate consegue fazer o processo gravar no mesmo arquivo, mas eu não sou capaz de usar as etapas simples.

    
por Gautam Somani 13.05.2014 / 16:24

2 respostas

1

O comportamento que você está descrevendo acontece apenas se logrotate tiver sido instruído explicitamente a fazê-lo através da diretiva copytruncate . A documentação alerta sobre a possibilidade de perder alguns dados de log devido a esse comportamento. Essa diretiva só deve ser utilizada como último recurso.

O método padrão de girar arquivos de log é renomear e enviar um sinal para o processo para permitir que ele abra o novo arquivo de log. Isso é mais rápido e não arrisca perder parte do log. Mas requer que o processo de escrita seja capaz de mudar para um novo arquivo de log.

A compressão pode ser desativada ou adiada até a próxima rotação. Se a diretiva compress for usada, os arquivos de log antigos serão compactados. Se essa diretiva não for usada, eles não serão compactados.

Se as opções compress e delaycompress forem usadas, a compactação será atrasada até a próxima rotação. Dessa forma, após cada rotação, os dois arquivos de log mais recentes ainda não foram compactados.

    
por 13.05.2014 / 18:37
0

after moving and creating a new file, I saw that the process was not writing anything to it, so had to restart the process to make it write to that file

O processo está sendo gravado no mesmo arquivo, por isso, a cópia da taxa de transferência, em vez da movimentação. Quando você exclui log, o processo ainda grava no log e você pode ver o uso do sistema de arquivos aumentando, mas nenhum arquivo. A reinicialização do processo irá liberar espaço em disco.

considere

  • escrever menos em registros, todas as informações registradas são necessárias?
  • leia a documentação, por exemplo: link
por 13.05.2014 / 17:48