![Alterando a maneira padrão do LogRotate de girar os arquivos de log](https://rvso.com/image/632775/Alterando%20a%20maneira%20padr%C3%A3o%20do%20LogRotate%20de%20girar%20os%20arquivos%20de%20log.png)
Minha observação sobre logrotation é que para girar qualquer arquivo de log, o processo logrotate, na seguinte ordem
- copia o arquivo de log em questão (vamos chamá-lo de arquivo1.log) com um novo nome (adicionando carimbo de data/hora ou um número ao nome existente para que ele se torne arquivo1.log-20140513),
- exclui o arquivo existente (arquivo1.log) e cria um novo arquivo de log em branco com o nome original (arquivo1.log),
- 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,
- exclui o arquivo girado (file1.log-20140513) e, finalmente,
- vá para o próximo arquivo para fazer o mesmo acima de 4 etapas.
Estou tendo o seguinte problema neste processo:
- Meus arquivos de log são enormes (mais de 10 Gb cada) e tenho cerca de 42 desses arquivos de log.
- Os processos que gravam nesses arquivos funcionam em sincronia,
- O DiskIO no servidor é bom, mas ainda assim a cópia leva tempo, a compactação também leva tempo e a compactação também consome CPU.
- Quero que todos os arquivos de log recém-criados tenham logs começando no mesmo horário.
Para fazer isso, quero que o logrotate seja movido, algo que o comando mv faz, que renomeia os arquivos em vez de copiá-los. Quanto à compactação, posso desativá-la e acioná-la por meio de um script diferente agendado via cron. Mas quero que o logrotate mova os arquivos em vez de copiá-los.
Agora, tenho certeza de que isso é algo que os autores do logrotate também teriam pensado, pois obviamente economiza E/S do disco e o tempo necessário para concluir toda a operação do logrotate, então quero saber por que os arquivos estão sendo copiados em vez de serem movidos ou renomeados, e como eu consigo isso via logrotate.
NOTA: Tentei fazer isso manualmente, ou seja, mover o arquivo para o qual um processo em execução estava gravando também, e criar um novo arquivo em branco com o mesmo nome e as mesmas permissões (que é root, que também é a permissão que o processo é executando com), mas depois de mover e criar um novo arquivo, vi que o processo não estava gravando nada nele, então tive que reiniciar o processo para fazê-lo gravar naquele arquivo. Alguém pode explicar esse comportamento também por que o logrotate consegue fazer o processo gravar no mesmo arquivo, mas não consigo usar as etapas simples.
Responder1
O comportamento que você está descrevendo só acontece se o logrotate tiver sido explicitamente instruído a fazê-lo por meio da copytruncate
diretiva. A documentação alerta sobre a possibilidade de perda de alguns dados de log devido a este comportamento. Essa directiva só deverá ser utilizada como último recurso.
O método padrão de rotação de arquivos de log é renomear e enviar um sinal ao processo para permitir que ele abra o novo arquivo de log. Isso é mais rápido e não corre o risco de 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 desligada ou adiada até a próxima rotação. Se a compress
diretiva for usada, os arquivos de log antigos serão compactados. Se essa diretiva não for usada, eles não serão compactados.
Se ambos compress
e delaycompress
forem usados, a compressão será adiada até a próxima rotação. Dessa forma, após cada rotação, os dois arquivos de log mais recentes ainda não terão sido compactados.
Responder2
depois de mover e criar um novo arquivo, vi que o processo não estava gravando nada nele, então tive que reiniciar o processo para fazê-lo gravar naquele arquivo
O processo está gravando no mesmo arquivo, é por isso que registra a cópia em vez de mover. Quando você exclui o 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 liberará espaço em disco.
considerar
- escreva menos nos logs, todas as informações registradas são necessárias?
- leia a documentação, por exemplo:http://www.thegeekstuff.com/2010/07/logrotate-examples/