Como Gerenciar Arquivos de Log com o Logrotate no Ubuntu 22.04

Introdução

O Logrotate é um utilitário do sistema que gerencia a rotação automática e compressão de arquivos de registro. Se os arquivos de registro não forem rotacionados, comprimidos e periodicamente podados, eventualmente poderão consumir todo o espaço em disco disponível em um sistema.

O Logrotate é instalado por padrão no Ubuntu 22.04 e está configurado para lidar com as necessidades de rotação de log de todos os pacotes instalados, incluindo rsyslog, o processador de log do sistema padrão.

Neste artigo, exploraremos a configuração padrão do Logrotate e em seguida configuraremos a rotação de log para uma aplicação personalizada fictícia.

Pré-requisitos

Este tutorial pressupõe que você tenha um servidor Ubuntu 22.04, com um usuário sudo habilitado, conforme descrito em Configuração Inicial do Servidor com Ubuntu 22.04.

O Logrotate está disponível em muitas outras distribuições Linux também, mas a configuração padrão pode ser bastante diferente. Outras seções deste tutorial ainda se aplicarão, desde que sua versão do Logrotate seja semelhante à do Ubuntu 22.04. Siga o Passo 1 para determinar a versão do seu Logrotate.

Conecte-se ao seu servidor como seu usuário sudo habilitado para começar.

Passo 1 — Confirmando Sua Versão do Logrotate

O Logrotate é instalado por padrão no Ubuntu. No entanto, se precisar instalá-lo, execute os seguintes comandos para atualizar sua lista de pacotes e obter o pacote:

  1. sudo apt update
  2. sudo apt install logrotate

Se estiver usando um servidor não-Ubuntu, primeiro certifique-se de que o Logrotate está instalado solicitando informações sobre sua versão:

  1. logrotate --version
Output
logrotate 3.19.0 Default mail command: /usr/bin/mail Default compress command: /bin/gzip Default uncompress command: /bin/gunzip Default compress extension: .gz Default state file path: /var/lib/logrotate/status ACL support: yes SELinux support: yes

Se o Logrotate estiver instalado, mas o número da versão for significativamente diferente, você pode ter problemas com algumas das opções de configuração exploradas neste tutorial. Consulte a documentação para a sua versão específica do Logrotate lendo sua página manual (man):

  1. man logrotate

Você também pode consultar a versão online da documentação do Logrotate. Em seguida, vamos analisar a estrutura de configuração padrão do Logrotate no Ubuntu.

Passo 2 — Explorando a Configuração do Logrotate

As informações de configuração do Logrotate geralmente podem ser encontradas em dois lugares no Ubuntu:

  • /etc/logrotate.conf: este arquivo contém algumas configurações padrão e configura a rotação para alguns logs que não são de propriedade de nenhum pacote do sistema. Ele também usa uma declaração include para puxar a configuração de qualquer arquivo no diretório /etc/logrotate.d.
  • /etc/logrotate.d/: aqui é onde qualquer pacote que você instale que precise de ajuda com a rotação de logs colocará sua configuração de Logrotate. Em uma instalação padrão, você já deve ter arquivos aqui para ferramentas principais do sistema como apt, dpkg, rsyslog e assim por diante.

Por padrão, logrotate.conf configurará rotações de log semanais, com arquivos de log de propriedade do usuário root e do grupo syslog, com quatro arquivos de log sendo retidos de cada vez (rotate 4), e novos arquivos de log vazios sendo criados após o atual ser rotacionado (create).

Vamos dar uma olhada no arquivo de configuração do Logrotate de um pacote em /etc/logrotate.d. Exiba o arquivo para a utilidade de pacote apt:

  1. cat /etc/logrotate.d/apt
Output
/var/log/apt/term.log { rotate 12 monthly compress missingok notifempty } /var/log/apt/history.log { rotate 12 monthly compress missingok notifempty }

Este arquivo contém blocos de configuração para dois arquivos de log diferentes no diretório /var/log/apt/: term.log e history.log. Ambos têm as mesmas opções. Qualquer opção não definida nesses blocos de configuração herda os valores padrão ou aqueles definidos em /etc/logrotate.conf. Qualquer configuração em um arquivo de logrotate substituirá os valores padrão do logrotate, que estão configurados em /etc/logrotate.conf. As opções definidas para os logs do apt são:

  • rotacionar 12: mantenha doze arquivos de log antigos. Isso substitui o padrão rotacionar 4.
  • mensalmente: rotacionar uma vez por mês. Isso substitui o padrão semanalmente.
  • comprimir: comprimir os arquivos rotacionados. Isso usa o gzip por padrão e resulta em arquivos com extensão .gz. O comando de compressão pode ser alterado usando a opção compresscmd.
  • missingok: não escrever uma mensagem de erro se o arquivo de log estiver ausente.
  • notifempty: não rotacionar o arquivo de log se estiver vazio.

Esses arquivos de configuração também herdam o comportamento padrão de criar, que instrui o Logrotate a criar novos logs após a rotação. Isso pode ser substituído por nocreate, embora isso efetivamente desabilite a maioria das outras funcionalidades.

Há muitas outras opções de configuração disponíveis. Você pode ler sobre todas elas digitando man logrotate na linha de comando para abrir a página do manual do Logrotate.

Em seguida, configuraremos um arquivo de configuração para lidar com logs de um serviço fictício chamado seu-aplicativo.

Passo 3 — Configurando um Exemplo de Configuração

Para gerenciar arquivos de log usando logrotate para aplicativos fora dos serviços de sistema pré-empacotados e pré-configurados, temos duas opções:

  1. Crie um novo arquivo de configuração do Logrotate e coloque-o em /etc/logrotate.d/. Isso será executado diariamente como o usuário root, juntamente com todos os outros trabalhos padrão do Logrotate.
  2. Crie um novo arquivo de configuração e execute-o fora da configuração padrão do Logrotate do Ubuntu. Isso só é realmente necessário se você precisar executar o Logrotate como um usuário não root, ou se quiser rotacionar logs com mais frequência do que diariamente (uma configuração hourly em /etc/logrotate.d/ seria ineficaz, porque a configuração do Logrotate do sistema é executada apenas uma vez por dia).

Vamos atravessar essas duas opções com alguns exemplos de configuração.

Adicionando Configuração ao /etc/logrotate.d/

Queremos configurar a rotação de logs para um servidor web fictício que coloca um access.log e error.log em /var/log/your-app/. Ele é executado como o usuário e grupo www-data.

Para adicionar uma configuração para os arquivos de log do your-app em /etc/logrotate.d/, primeiro abra um novo arquivo no diretório /etc/logrotate.d usando nano ou o editor de sua preferência:

  1. sudo nano /etc/logrotate.d/your-app

Adicione as seguintes linhas ao seu novo arquivo de configuração:

/etc/logrotate.d/your-app
/var/log/your-app/*.log {
	daily
	missingok
	rotate 14
	compress
	notifempty
	create 0640 www-data www-data
	sharedscripts
	postrotate
		systemctl reload your-app
	endscript
}

Algumas das novas diretivas de configuração neste arquivo são:

  • create 0640 www-data www-data: isso cria um novo arquivo de log vazio após a rotação, com as permissões especificadas (0640), proprietário (www-data) e grupo (também www-data).
  • sharedscripts: essa flag significa que quaisquer scripts adicionados à configuração são executados apenas uma vez por execução, em vez de para cada arquivo rotacionado. Como o caminho /var/log/your-app/*.log inclui um curinga *, esta configuração corresponderia a qualquer número de arquivos de log no diretório your-app. Sem a opção sharedscripts, o script especificado em postrotate seria executado cada vez que o logrotate processasse um arquivo de log sem essa opção.
  • postrotate para endscript: este bloco contém um script para ser executado após o arquivo de log ser rotacionado. Neste caso, estamos recarregando nosso exemplo de aplicativo. Isso às vezes é necessário para fazer com que sua aplicação mude para o novo arquivo de log criado.
    Observe que postrotate é executado antes que os logs sejam comprimidos. A compressão pode levar muito tempo e seu software deve mudar imediatamente para o novo arquivo de log. Para tarefas que precisam ser executadas após os logs serem comprimidos, use o bloco lastaction em vez disso.

Para salvar e sair do nano, pressione Ctrl+X, e quando solicitado, Y e depois Enter. Você pode testar o arquivo de configuração fazendo uma execução simulada:

  1. sudo logrotate /etc/logrotate.conf --debug

Este comando chama o logrotate, aponta para o arquivo de configuração padrão e ativa o modo de depuração.

As informações serão impressas sobre quais arquivos de log o Logrotate está manipulando e o que teria feito com eles. Se tudo parecer bem, você está pronto. O trabalho padrão do Logrotate será executado uma vez por dia e incluirá sua nova configuração.

Em seguida, tentaremos uma configuração que não utilize a configuração padrão do Ubuntu.

Passo 4 — Criando uma Configuração Independente do Logrotate

Neste exemplo, temos um aplicativo sendo executado como nosso usuário sammy, gerando logs que são armazenados em /home/sammy/logs/. Queremos rotacionar esses logs a cada hora, então precisamos configurar isso fora da estrutura /etc/logrotate.d fornecida pelo Ubuntu.

Primeiro, vamos criar um arquivo de configuração em nosso diretório pessoal. Abra-o em um editor de texto:

  1. nano /home/sammy/logrotate.conf

Em seguida, cole a seguinte configuração:

/home/sammy/logrotate.conf
/home/sammy/logs/*.log {
	hourly
	missingok
	rotate 24
	compress
	create
}

Salve e feche o arquivo. Encontramos todas essas opções nos passos anteriores, mas vamos resumir: esta configuração irá rotacionar os arquivos a cada hora, comprimindo e mantendo vinte e quatro logs antigos e criando um novo arquivo de log para substituir o rotacionado.

Você precisará personalizar a configuração para se adequar à sua aplicação, mas este é um bom começo.

Para testar se a configuração funciona, vamos criar um arquivo de log. Primeiro, cd para o diretório principal do usuário usando o comando cd ~. Em seguida, crie um diretório para os logs usando o comando mkdir. Por fim, crie um arquivo vazio no diretório logs usando o comando touch. Execute os seguintes comandos na ordem para completar essas etapas:

  1. cd ~
  2. mkdir logs
  3. touch logs/access.log

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

Como os logs são de propriedade do usuário sammy, não precisamos usar sudo. No entanto, precisamos especificar um arquivo de estado. Este arquivo registra o que o logrotate encontrou e quaisquer ações que ele realizou da última vez que foi executado, para que saiba o que fazer na próxima vez que for executado. Este rastreamento de estado é tratado para nós ao usar a configuração padrão /etc/logrotate.conf. O arquivo de estado é armazenado em /var/lib/logrotate/status. Como não estamos usando a configuração padrão, precisaremos configurar manualmente o local do arquivo de estado.

Vamos fazer o Logrotate colocar o arquivo de estado direto em nosso diretório principal para este exemplo. Ele pode ser colocado em qualquer lugar acessível e conveniente. Execute o seguinte comando para usar o /home/sammy/logrotate.conf que você criou e para registrar o estado que o logrotate encontra:

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Output
reading config file /home/sammy/logrotate.conf Handling 1 logs rotating pattern: /home/sammy/logs/*.log hourly (24 rotations) empty log files are rotated, old logs are removed considering log /home/sammy/logs/access.log log does not need rotating

A bandeira --verbose imprimirá informações detalhadas sobre o que o Logrotate está fazendo. Neste caso, não rotacionou nada. Esta é a primeira vez que o Logrotate encontra este arquivo de log e ele tem zero horas de idade, então não deve ser rotacionado.

Se examinarmos o arquivo de estado usando o utilitário cat, notaremos que o Logrotate registrou algumas informações sobre a execução:

  1. cat /home/sammy/logrotate-state
Output
logrotate state -- version 2 "/home/sammy/logs/access.log" 2022-07-2-19:0:0

O Logrotate observou os logs que viu e quando os considerou pela última vez para rotação. Se executarmos este mesmo comando uma hora depois, o log será rotacionado conforme esperado.

Se você quiser forçar o Logrotate a rotacionar o arquivo de log quando ele não o faria normalmente, use a opção --force:

  1. logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

Isso é útil ao testar scripts postrotate e outros.

Finalmente, precisamos configurar um cron job para executar o Logrotate a cada hora. Abra o crontab do seu usuário:

  1. crontab -e

Isso abrirá um arquivo de texto. Se for a primeira vez que você estiver usando o cron, poderá ser solicitado a escolher um editor de texto padrão. Se você não tiver preferência, recomendamos o nano para novos usuários. Pode haver alguns comentários já no arquivo que explicam a sintaxe do cron. Mova o cursor para baixo até uma nova linha em branco no final do arquivo e adicione o seguinte:

crontab
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state

Esta tarefa será executada no 14º minuto de cada hora, todos os dias. Ela executa praticamente o mesmo comando logrotate que executamos anteriormente, embora tenhamos expandido logrotate para o seu caminho completo de /usr/sbin/logrotate para garantir segurança. É uma boa prática usar caminhos completos ao escrever cron jobs. Para saber mais sobre o cron, você pode revisar nossos outros tutoriais.

Salve o arquivo e saia. Isso instalará o crontab e nossa tarefa será executada conforme o agendamento especificado.

Se revisitarmos nosso diretório de registros em cerca de uma hora, deveremos encontrar o arquivo de registro rotacionado e comprimido access.log.1.gz (ou .2.gz se você executou o Logrotate com a opção --force).

Conclusão

Neste tutorial, verificamos nossa versão do Logrotate, exploramos a configuração padrão do Logrotate no Ubuntu e configuramos dois tipos diferentes de configurações personalizadas. Para saber mais sobre as opções de linha de comando e configuração disponíveis para o Logrotate, você pode ler a página de manual executando man logrotate no seu terminal ou visitando a documentação online.

Source:
https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-22-04