Utilizando Logrotate

A ferramenta logrotate tem como objetivo rotacionar automaticamente logs de aplicativos segundo a necessidade e a organização que o administrador de sistemas (SysAdmin) deseje. Todo administrador experiente reconhece a importância dos logs e principalmente o quão relevante é ter os logs disponíveis e organizados para um momento onde é necessária uma rápida consulta aos mesmos. Esta ferramenta é muito útil para os SysAdmin e possui recursos flexíveis que por vezes não são explorados. É relevante salientar que alguns aplicativos possuem seu desempenho comprometido quando seus arquivos de log chegam a tamanhos muito grandes.

Instalar logrotate

Para instalar o logrotate basta efetuar o procedimento padrão da distribuição Linux que está sendo utilizada.

Gentoo

  # emerge -va app-admin/logrotate

Ubuntu

  # apt-get install logrotate

CentOS

  # yum install logrotate

Arquivos de configuração do logrotate

Depois de instalado é preciso efetuar a personalização da configuração do logrotate.

O logrotate é executado automaticamente segundo o agendamento desejado, no entanto além de permitir um ajuste mais detalhando no próprio arquivo de configuração do logrotate a ferramenta também possui sua execução vinculada ao cron. Dessa forma ao listar o conteúdo do cron.daily devemos encontrar o script do logrotate que foi adicionado automaticamente no momento da instalação da ferramenta.

  # ls /etc/cron.daily        é esperado encontrar na lista de scripts localizadas neste diretório o "logrotate"

O logrotate possui basicamente um arquivo de configuração geral/global:

  /etc/logrotate.conf

Neste arquivo são inseridas as configurações “padrão” de rotacionamento de logs para todos os arquivos de log que foram especificados nas confgirações do logrotate.

Um diretório, no qual podem ser inseridos arquivos específicos para determinados aplicativos:

  /etc/logrotate.d

Neste diretório podem ser criados arquivos com configurações específicas de rotacionamento de logs para determinados aplicativos segundo a necessidade do administrador. Muitos aplicativos ao serem instalados, como por exemplo o Apache, geram um arquivo de rotacionamento de logs dentro do diretório /etc/logrotate.d com configurações próprias mas que podem ser facilmente personalizadas, bastando apenas editar o arquivo referente ao aplicativo.

Configurar logrotate

Inicialmente vamos analisar o arquivo de configuração geral/global do logrotate (/etc/logrotate.conf), conforme mencionado anteriormente a execução do logrotate está vinculada ao cron (agendamento) do sistema operacional diário, no entanto é necessário personalizar o período de rotacionamento dos logs diretamente no logrotate.

Vamos analisar algumas opções do arquivo de configuração geral /etc/logrotate.conf (o conteúdo abaixo está personalizado):

  # See "man logrotate" for details
  # período em que os arquivos de log devem ser rotacionados
  daily
  rotate 35
  compress
  dateext
  size 5M
  copytruncate
  notifempty
  nomail
  noolddir
  
  # administrador ou aplicativos podem inserir seus arquivos de configuração específicos de rotacionamento de log neste diretório
  include /etc/logrotate.d
  
  # também podem ser inseridas configurações de rotacionamento de logs diretamente neste arquivo.
  # para isso basta definir o nome do arquivo de log a ser rotacionado e suas configurações específicas que sobrescrevem as gerais definidas anteriormente.
  /var/log/wtmp {
         monthly
         create 0664 root utmp
         rotate 1
  }
  
  # é preciso especificar os arquivos a serem rotacinados pelo logrotate
  /var/log/mail.info /var/log/mail.log /var/log/mail.err {
         rotate 31
  }
  
  # outra forma de especificar os arquivos a serem rotacionados pelo logrotate
  /var/log/*log {
         rotate 31
  }
  

Apenas para verificarmos, na instalação do Apache no Ubuntu foi gerado o arquivo /etc/logrotate.d/apache2 com o seguinte conteúdo:

  /var/log/apache2/*.log {
         weekly
         missingok
         rotate 52
         compress
         delaycompress
         notifempty
         create 640 root adm
         sharedscripts
         postrotate
                 /etc/init.d/apache2 reload > /dev/null
         endscript
  }
  

Analisando algumas diretivas de configuração disponíveis no logrotate:

  • Período em que os arquivos de log devem ser rotacionadosAs opções para esta configuração são:
daily diariamente
weekly semanalmente
monthly mensalmente
  • rotate 35 – indica o número de arquivos de log rotacionados a serem mantidos, o arquivo rotacionado mais velho sempre é substituído.
  • compress – comprimir os arquivos de log rotacionados (padrão é o gzip).
  • create – imediatamente após rotacionar um arquivo de log o arquivo de log é recriado com o mesmo nome e com as permissões especificadas. Exemplo de sintaxe: create 640 root adm
  • delaycompress – comprimir o arquivo de log rotacionado apenas no próximo rotacionamento. Útil quando um aplicativo continua escrevendo um arquivo de log por um determinado tempo após o rotacionamento. Esta diretiva deve ser utilizada de forma concomitante com a diretiva compress.
  • dateext – inserir a data em que os arquivos foram rotacionado como parte do nome do arquivo de log rotacionado. Um exemplo de arquivo rotacionado gerado com a data no nome: /var/log/syslog-20111218.gz
  • size 5M – tamanho que o arquivo de log deve ter para ser rotacionado, o “M” indica megabytes, também pode ser utilizado “k” que indica kilobytes. Neste exemplo o arquivo de log só será rotacionado se tiver o tamanho mínimo de 5 megabytes.
  • copytruncate – esta opção é muito útil pois permite “limpar” o conteúdo de um arquivo de log depois que uma cópia dele é gerada para o rotacionamento, dessa forma não se perde o arquivo “original” de log. Caso o arquivo original de log seja rotacionado será preciso gerar um novo arquivo de log com as pemissões corretas para que o aplicativo possa escrever nele novamente, por vezes isso é um problema.
  • notifempty – não rotacionar o arquivo de log se ele estiver vazio.
  • ifempty – rotacionar o arquivo de log mesmo que este esteja vazio. Esta é a opção padrão.
  • nomail – não enviar o arquivo de log por e-mail.
  • mail – quando os arquivos de logs forem rotacionados com o número máximo de versões (diretiva rotate) estipulado os arquivos de log serão enviados por e-mail para o endereço definido nesta diretiva. Exemplo de sintaxe: mail <logs (a) dominio com br>
  • missingok – se o arquivo de log não existir o logrotate passa para a interpretação do próximo arquivo sem gerar mensagens de erro.
  • noolddir – manter os arquivos de log no diretório de origem, é possível mover os arquivos de log rotacionados para um outro diretório desde que no mesmo dispositivo físico.
  • olddir – diretório para onde os arquivos de log rotacionados devem ser movidos. Exemplo de sintaxe: olddir /var/log/logs_antigos
  • postrotate/endscript – os comandos definidos entre estas duas diretivas são executadas logo após o arquivo de log ser rotacionado. Este conjunto de diretivas só deve ser configurado para uma definição específica de rotacionamento de log, não pode ser configurado nas diretivas globais do logrotate.
  • prerotate/endscript – os comandos definidos entre estas duas diretivas são executadas antes o arquivo de log ser rotacionado. Este conjunto de diretivas só deve ser configurado para uma definição específica de rotacionamento de log, não pode ser configurado nas diretivas globais do logrotate.
  • sharedscripts – geralmente os script definidos nas diretivas postrotate e prerotate são executados para cada um dos logs rotacionados no padrão definido previamente, isso significa que um mesmo script pode ser executado várias vezes. Quando esta diretiva é especificada os script definidos nas diretivas postrotate e prerotate são executados uma única vez. No entanto, caso não haja necessidade de rotacionar os arquivos de log definidos no padrão, os scripts não serão executado. Esta diretiva requer a configuração da diretiva create.

Executando manualmente o logrotate

É possível executar manualmente o logrotate caso se queira efetuar algum teste inicial, por exemplo com uma configuração específica para os arquivos de log de um determinado aplicativo.

No terminal, preferencialmente logado com o usuário root execute:

  # logrotate /etc/logrotate.conf

Para forçar a execução do rotacionamento execute:

  # logrotate --force /etc/logrotate.conf

Para verificar com mais detalhes o que está sendo executado pelo logrotate vamos ativar o modo “verbose” na execução manual

  # logrotate --force --verbose /etc/logrotate.conf
Rolar para cima