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
# apt-get install logrotate
# yum install 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"
/etc/logrotate.conf
Um diretório, no qual podem ser inseridos arquivos específicos para determinados aplicativos:
/etc/logrotate.d
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
}
# 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
}
/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
}
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
weekly semanalmente
monthly mensalmente
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
# logrotate --force /etc/logrotate.conf
# logrotate --force --verbose /etc/logrotate.conf
Créditos: Naira Kaieski