você está aqui: Home  → Arquivo de Mensagens

Utilizando Logrotate

Colaboração: Naira Kaieski

Data de Publicação: 04 de janeiro de 2012

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 rotacionados

As opções para esta configuração são:

daily diariamente
weekly semanalmente
monthly mensalmente

Diretivas de configuração

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 scripts 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 executados. 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

Referências

http://linuxcommand.org/man_pages/logrotate8.html

Naira Kaieski é Administradora de Redes e Sistemas nas Faculdades Integradas de Taquara - Faccat


Veja a relação completa dos artigos de Naira Kaieski