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:
Se estiver usando um servidor não-Ubuntu, primeiro certifique-se de que o Logrotate está instalado solicitando informações sobre sua versão:
Outputlogrotate 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
):
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çãoinclude
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 comoapt
,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
:
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ãorotacionar 4
.mensalmente
: rotacionar uma vez por mês. Isso substitui o padrãosemanalmente
.comprimir
: comprimir os arquivos rotacionados. Isso usa ogzip
por padrão e resulta em arquivos com extensão.gz
. O comando de compressão pode ser alterado usando a opçãocompresscmd
.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:
- 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. - 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:
Adicione as seguintes linhas ao seu novo arquivo de configuração:
/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émwww-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órioyour-app
. Sem a opçãosharedscripts
, o script especificado empostrotate
seria executado cada vez que o logrotate processasse um arquivo de log sem essa opção.postrotate
paraendscript
: 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 quepostrotate
é 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 blocolastaction
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:
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:
Em seguida, cole a seguinte configuração:
/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:
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
Outputreading 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:
Outputlogrotate 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
:
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:
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:
crontab14 * * * * /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.