Introdução
O Logrotate é uma utilidade do sistema que gerencia a rotação automática e a compressão de arquivos de log. Se os arquivos de log não forem rotacionados, comprimidos e periodicamente podados, eles eventualmente poderiam 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 o rsyslog
, o processador de log do sistema padrão.
Neste artigo, vamos explorar a configuração padrão do Logrotate e, em seguida, configurar 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 serão aplicáveis, 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.
Faça login no seu servidor como seu usuário sudo para começar.
Passo 1 — Confirmando a Versão do Logrotate
O Logrotate é instalado por padrão no Ubuntu. No entanto, se você 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 esteja instalado solicitando informações de 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 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 examinar 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 instruçãoinclude
para puxar configurações de qualquer arquivo no diretório/etc/logrotate.d
./etc/logrotate.d/
: Aqui é onde qualquer pacote que você instalar que precise de ajuda com rotação de logs colocará sua configuração do 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, 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
. cat
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 herdará os valores padrão ou aqueles definidos em /etc/logrotate.conf
. Qualquer configuração em um arquivo do logrotate substituirá os valores padrão do logrotate, que são configurados em /etc/logrotate.conf
. As opções definidas para os logs do apt
são:
rotate 12
: mantenha doze arquivos de log antigos. Isso substitui a configuração padrão derotate 4
.monthly
: faça a rotação uma vez por mês. Isso substitui a configuração padrão deweekly
.compress
: comprima os arquivos rotacionados. Isso utiliza ogzip
por padrão e resulta em arquivos com a extensão.gz
. O comando de compressão pode ser alterado usando a opçãocompresscmd
.missingok
: não exiba uma mensagem de erro se o arquivo de log estiver ausente.notifempty
: não faça a rotação do arquivo de log se ele estiver vazio.
Esses arquivos de configuração também herdam o comportamento padrão de create
, que instrui o Logrotate a criar novos logs após a rotação. Isso poderia ser substituído com nocreate
, embora isso efetivamente desabilitasse 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 de manual do Logrotate.
Em seguida, vamos configurar um arquivo de configuração para lidar com os logs de um serviço fictício chamado seu-aplicativo
.
Passo 3 — Configurando um Exemplo de Configuração
Para gerenciar arquivos de log usando o 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 só é executada uma vez por dia).
Vamos percorrer estas 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 your-app
em /etc/logrotate.d/
, primeiro abra um novo arquivo no diretório /etc/logrotate.d
usando o nano
ou seu editor preferido:
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 qualquer script adicionado à configuração é executado 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 processa um arquivo de log sem esta 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 recém-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 então 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 faria com eles. Se tudo parecer bem, você terminou. 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 use 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 doméstico. 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 atender à sua aplicação, mas este é um bom começo.
Para testar se a configuração está funcionando, vamos criar um arquivo de log. Primeiro, cd
para o diretório pessoal 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 concluir essas etapas:
Agora que temos um arquivo de log em branco no local 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 executou da última vez que foi executado, para que saiba o que fazer na próxima vez. Esse rastreamento de estado é tratado para nós ao usar a configuração padrão do /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 diretamente em nosso diretório pessoal 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 flag --verbose
imprimirá informações detalhadas sobre o que o Logrotate está fazendo. Neste caso, não foi feita nenhuma rotação. 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 ele viu e quando os considerou pela última vez para rotação. Se executarmos o 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 postrotate
e outros scripts.
Finalmente, precisamos configurar um trabalho cron 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ê usa o cron, poderá ser solicitado a escolher um editor de texto padrão. Se você não tiver uma 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 para 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 seu caminho completo de /usr/sbin/logrotate
para garantir segurança. É uma boa prática usar caminhos completos ao escrever trabalhos cron. 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 no horário especificado.
Se revisarmos nosso diretório de logs em cerca de uma hora, devemos encontrar o arquivo de log rotacionado e comprimido access.log.1.gz
(ou .2.gz
se você executou o Logrotate com a flag --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 do manual executando man logrotate
no seu terminal ou visitando a documentação online.