All for Joomla All for Webmasters
Linux

Gerenciando arquivos de log no Linux com o LogRotate

Em servidores de aplicação, especialmente para casos onde ocorre um alto número de interações, o registro (log) dessas ações no sistema pode acabar gerando arquivos muito extensos e por consequência ocupar muito espaço no disco. O LogRotate é um utilitário de sistema que gerencia a rotatividade (de forma a manter somente registros de um determinado período mais recente) e compactação automáticas de arquivos de log. O Logrotate é instalado por padrão no Ubuntu (e outras distros principais do Linux) e é configurado para lidar com as necessidades de rotatividade de log de todos os pacotes instalados, incluindo rsyslog, o processador de log padrão do sistema. Neste post, exploraremos a configuração padrão do Logrotate e, em seguida, definiremos a rotatividade para uma aplicação hipotética.

Confirmando sua versão do LogRotate

Antes de tudo, certifique-se de que o LogRotate está instalado em seu servidor, verificando sua versão:

Se não estiver instalado, o comando irá gerar um erro. Nesse caso, instale usando o gerenciador de pacotes da sua distro.

Explorando a configuração do LogRotate

Em geral, os arquivos de configuração podem estar localizados em algum destes destinos nos servidores Ubuntu:

  • /etc/logrotate.conf : este arquivo contém algumas configurações padrão e define a rotatividade para alguns logs que não pertencem a nenhum pacote de sistema. Também possui uma declaração de  include  para importar qualquer arquivo de configuração localizado no diretório /etc/logrotate.d/ .
  • /etc/logrotate.d/ : este é o diretório onde estarão localizadas quaisquer configurações de pacote que necessitem ser rotacionados. Por padrão, você já deve ter arquivos para utilitários comuns do sistema, como  apt e  dpkg , por exemplo.

Por padrão, o arquivo  logrotate.conf define uma rotatividade semanal do log, para arquivos pertencentes ao usuário root  e ao grupo syslog ( su root syslog ) com 4 arquivos de log sendo mantidos ( rotate 4 ), e novos arquivos vazios de log sendo criados assim que o atual é rotacionado ( create ).

Vamos dar uma olhada, por exemplo, no arquivo de configuração do utilitário apt :


Este arquivo contém blocos de configuração para dois logs diferentes:  term.log  e  history.log . Ambos possuem as mesms diretivas. Quaisquer configurações que não sejam definidas no bloco herdarão as configurações padrão ou as que estiverem definidas em  /etc/logrotate.conf . As diretivas mostradas acima são:

  • rotate 12: mantém 12 arquivos de log antigos.
  • monthly: rotaciona uma vez por mês.
  • compress: comprime os arquivos rotacionados. Utiliza o  gzip e por padrão os arquivos possuem a extensão .gz .
  • missingok: não escrever uma mensagem de erro se o arquivo de log não for encontrado.
  • notifempty: não rotacionar o arquivo de log se estiver vazio.

Existem inúmeras opções de configurações disponíveis. Você pode listá-las através do manual  man logrotate .

Definindo uma configuração de exemplo

Para gerenciar arquivos de log para aplicações que não estão inclusa nos exemplos padrão, temos duas opções:

To manage log files for applications outside of the pre-packaged and pre-configured system services, we have two options:

  1. Criar um novo arquivo de configuração do LogRotate em /etc/logrotate.d/ . A rotina será executada diariamente como o usuário  root , juntamente com as demais rotinas do LogRotate.
  2. Criar um novo arquivo de configuração e executá-lo fora da configuração padrão do LogRotate. Isto só é realmente necessário se por algum motivo você precisar executar  o LogRotate com um usuário não-root, ou se desejar executar a rotina mais frequentemente (de hora em hora, por exemplo).

Vamos explorar essas duas possibilidades com alguns exemplos.

Adicionando uma configuração ao /etc/logrotate.d/

Se nós quisermos configurar a rotação para um servidor web fictício que escreve nos arquivos access.log  e error.log , no diretório  /var/log/exemplo-app , por exemplo. Ele é executado como usuário e grupo www-data . Para adicionar uma nova configuração, criamos um novo arquivo no diretório:

Um exemplo de arquivo de configuração para gerenciar esses logs:

Algumas diretivas novas nesse arquivo são:

  • create 0640 www-data www-data : cria um novo arquivo de log vazio após a rotação, com as permissões especificadas, ( 0640 ), usuário root ( www-data ) e grupo (também www-data ).
  • sharedscripts : essa flag indica que quaisquer scripts adicionados à configuração são executados somente uma vez por rotina, em vez de reexecutá-los para cada arquivo rotacionado. Uma vez que essa configuração se aplica a dois arquivos no diretório, o script especificado em postrotate executaria duas vezes sem essa diretiva.
  • postrotate  até endscript: esse bloco contém um script que executa após a rotação do log. Nesse caso nós estamos recarregando nossa aplicação. Isso pode ser necessário para que o sistema troque para o ovo arquivo de log criado. Note que o trecho é executado antes de comprimir os arquivos de log.

Após personalizar a sua configuração conforme sua necessidade e salvar ela no diretório, você pode testá-la pelo comando de debug :

A saída exibirá quais os arquivos gerenciados pelo LogRotate e quais as diretivas indicadas. Se tudo correr bem, a rotina será executada diariamente e incluirá sua nova configuração.

Criando uma configuração independente

Neste exemplo nós temos um app executando com nosso usuário ronangerando logs que são armazenados em /home/ronan/logs . Nós queremos rotacionar esses logs de hora em hora, então precisamos configurá-los fora do diretório padrão. Primeiro, criamos nosso arquivo de configuração:

Então definimos as diretivas abaixo:

Salve o arquivo e feche.  Você precisará personalizar a configuração para atender à sua aplicação, mas esse é um bom ponto de partida.

Para testar se funciona, podemos criar um arquivo de log:

Agora que temos um arquivo em branco no lugar certo, vamos executar o comando logrotate .

Uma vez que os logs pertencem ao usuário ronan nós não temos que usar sudo , mas nós precisamos criar um arquivo de estado. Esse arquivo armazena o que o  logrotate leu e fez na última vez em que foi executado, de forma a saber de onde partir na execução seguinte. Isso é gerenciado por padrão no Ubuntu pelo arquivo  /var/lib/logrotate/status , mas agora nós precisamos fazê-lo manualmente:

O parâmetro  --verbose irá imprimir de forma detalhada as ações do logrotate . Neste caso, parece que ele não fez nada. É a primeira vez em qeu ele lê o arquivo, então até onde sabemos, o arquivo vazio não deveria ser rotacionado. Se verificarmos o arquivo de estado, entretanto:

 

Por fim, precisamos definir uma rotina no cron job para executar o LogRotate a cada hora:

Esse comando abrirá um arquivo de texto com as diretivas atuais. Abaixo de todas elas, insira a que corresponde ao LogRotate:

Essa rotina será executada todo 14º minuto de cada hora, cada dia, executando basicamente o comando que vimos anteriormente. Salve o arquivo e saia, isso atualizará o crontab .

Esses procedimentos são suficientes para ter o LogRotate operando em seu servidor. Quaisquer dúvidas ou sugestões, utilize a área de comentários ou entre em contato!

Você Também Pode Gostar

Nenhum Comentário

Deixe uma Resposta