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
  • 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

Referências

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

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

Lançado oficialmente o 1º RC do siduction

Fonte: Notícias Linux

A criança acabou de nascer! Foi oficialmente publicado no distrowatch: "Ferdinand Thommes anunciou a disponibilidade do primeiro lançamento público do siduction, um distribuição orientada a desktop e live CD/DVD baseada no Debian "unstable", através de fork recente do aptosid. A distribuição vem na forma de 3 imagens live CD/DVD separadas (para arquiteturas i386 e x86_64) com desktop KDE, LXDE ou Xfce".



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

 

 

Opinião dos Leitores

Jihann
26 Out 2017, 10:47
Artigo muito bom.
Nadia
24 Abr 2017, 11:17
Super útil e bem explicado. Consegui aplicar imediatamente sem nenhuma dificuldade. Obrigada! :)
marcio
27 Jan 2016, 15:49
Parabens , muito bom
airton
04 Jul 2015, 22:27
Parabéns pelo material publicado.
Jefferson
14 Jan 2015, 12:10
Otimo artigo, parabens.
Estou com o problema que após rotacionar o log o mesmo para de gravar, estou rotacinando os logs de coleta de Garbage gerados por parametros JAVA no Weblogic 10.3.6
Alguem tem alguma idéia do que pode ser ?

Obrigado
Francisco Barros
14 Mai 2014, 08:21
Parabéns seu tutorial me ajudou muito, bem completo e tirou todas as minhas duvidas sobre LOGROTATE valeu obrigado!!!

Francisco Barros
Marcos
15 Mar 2014, 17:12
Excelente, sanou minhas dúvidas procurei por vários forums, muito obrigado, você explicou muito bem
Parabéns
Rafael de Paula Herrera
30 Out 2013, 13:18
Lembrando que o "copytruncate" é muito importante para daemons que não foram preparados para, por exemplo, receber um signal HUP após o rotate.

Quando você manda um "reload" em um daemon, em geral, ele faz essa tarefa. Inclusive re-associando a saída do log a um file descriptor (fd) novo, ou em linhas gerais, a um arquivo recém criado pré-existente (aberto por ele para escrita).

Nestes casos, sem o "copytruncate", corre-se o risco de se bloquar a execução do referido daemon, caso não exista tratamento de fall-back com timeout para escrita (ou saída std_out/std_err).
Carlos
14 Set 2012, 15:44
Ola!
Muito bom sua explicação!
Obrigado
Diones
08 Jan 2012, 02:46
Mega Artigo, valeu e parabéns.
Édipo Avanzo
04 Jan 2012, 10:05
Muuito boa dica do logrotate, muito bem detalhado e explicado, parabéns
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script