Como evitar que os logs fiquem muito grandes?

2

Eu tenho um cronjob que executa alguns scripts Python e eles geram um arquivo de log massivo. Como evito que eles fiquem tão grandes? Seria perfeito se o arquivo fosse excluído assim que atingisse um determinado tamanho. Porque a cada poucos dias, o arquivo é de 50MB agora, mas fica muito maior e leva uma eternidade para baixar e analisar um bug em uma conexão de internet lenta. Eu realmente só quero ver as últimas 1000 linhas para ver onde o script deu errado.

Eu sei que eu poderia codificar algo para fazer isso, mas eu só estava me perguntando se o Linux tinha algo que eu não conhecia. Eu imagino que grandes arquivos de log são um problema comum. Obrigado.

    
por User 22.03.2014 / 03:10

3 respostas

4

Geralmente, você deve registrar apenas a atividade de seu interesse e configurar o programa para que seja menos detalhado, se possível.

Como sugerido, usar logrotate é a maneira usual de lidar com arquivos de log. Mas, em vez de adicionar conteúdo a /etc/logrotate.conf , você deve adicionar sua própria tarefa a /etc/logrotate.d/ , caso contrário, você teria que procurar mais tipos de arquivos de configuração durante os upgrades de versão.

Aqui está um exemplo que criei para um script php:

/var/log/some-php-app/*.log {
        daily
        rotate 10
        delaycompress
        compress
        notifempty
        missingok
}
  • /var/log/some-php-app/*.log - É o caminho onde o (s) arquivo (s) de log está localizado e seu nome. Como você pode ver, você também pode usar curingas para aplicar a regra a mais de um arquivo de log.
  • daily - Rotaciona arquivos de log diariamente. Alternativas: por hora, semanalmente, mensalmente, anualmente, maxsize, maxage
  • rotate count - Os arquivos são rotacionados antes de serem removidos ou enviados para o endereço especificado em uma diretiva de correio.
  • delaycompress - adia a compactação do arquivo de log anterior para o próximo ciclo de rotação.
  • compress - Compacta versões antigas de arquivos de log com gzip. Você pode usar zless em vez de less para visualizar os arquivos.
  • notifempty - Não gira o log se estiver vazio.
  • missingok - Passa para o próximo trabalho rotativo sem emitir uma mensagem de erro, quando o arquivo de log estiver faltando.

Dê uma olhada no logrotate manpage para mais opções.

    
por LiveWireBT 22.03.2014 / 19:25
1

Você vai querer definir um tamanho em /etc/logrotate.conf

O arquivo existe por padrão e é executado diariamente. A única coisa que você precisa fazer é adicionar alguns parâmetros adicionais ao logrotate.conf.

/path/to_big.log {
        size 1k
        create 700 user group
        rotate 1
}

Neste exemplo, especificamos o caminho para nosso log, o tamanho para o qual queremos limitar, as permissões para o log de substituição e quantas cópias devem ser mantidas. Girar 1 manterá uma cópia.

    
por user2714289 22.03.2014 / 04:44
1

Se seus logs estão crescendo muito rápido, você não pode esperar que o cron rode o logrotate uma vez por dia, como é o padrão depois de definir o limite de tamanho como mencionado na resposta anterior, você pode fazer um symlink em / etc / cron. de hora em hora para a tarefa cron do logrotate em /etc/cron.daily com este comando:

sudo ln -s /etc/cron.daily/logrotate /etc/cron.hourly/

A única coisa que você precisa lembrar é ter certeza e excluir o link quando o problema que está criando os logs excessivos for resolvido. Isto é, se você tem algo fora de seu controle, criando logs excessivos, você precisa relatar um bug sobre o problema, porque ele pode estar afetando outros sem perceber. Esse tipo de erro pode fazer com que o volume raiz fique sem espaço e, em seguida, as pessoas verão todos os tipos de problemas e nunca perceberão que é porque estão ficando sem espaço na raiz.

    
por oatkinson 23.06.2014 / 03:36