Linux - Serviço logrotate e Rotação de Logs
Se o sistema grava muitos arquivos de logs, encontrar a informação necessária pode se tornar bastante problemático. Para resolver este problema, é possível configurar o serviço logrotate
. O serviço logrotate
é executado como uma tarefa cron uma vez por dia e verifica os arquivos de configuração para determinar se é necessário realizar a rotação. Nestes arquivos de configuração, você pode definir quando um novo arquivo de log deve ser aberto e o que deve acontecer com o arquivo antigo: por exemplo, se ele deve ser compactado ou simplesmente deletado e, se for compactado, quantas versões do arquivo antigo devem ser mantidas.
O serviço logrotate
trabalha com dois tipos diferentes de arquivos de configuração. O arquivo principal de configuração é /etc/logrotate.conf
. Este arquivo define as configurações gerais de como o logrotate
deve executar suas tarefas:
programicio@Programicio:~$ cat /etc/logrotate.conf # veja "man logrotate" para mais detalhes # opções globais não afetam diretivas de inclusão precedentes # rotaciona arquivos de log semanalmente weekly # usa o grupo adm por padrão, já que este é o grupo proprietário # de /var/log/. su root adm # mantém 4 semanas de logs antigos rotate 4 # cria novos arquivos de log (vazios) após rotacionar os antigos create # usa a data como sufixo do arquivo rotacionado #dateext # descomente esta linha se quiser que seus arquivos de log sejam compactados #compress # pacotes colocam informações de rotação de logs neste diretório include /etc/logrotate.d # logs específicos do sistema também podem ser configurados aqui.
weekly
: indica que os arquivos de log devem ser criados semanalmente.rotate 4
: garante a manutenção de quatro versões antigas do arquivo. Se esta opção não for usada, os arquivos antigos são deletados.create
: o arquivo antigo é salvo com um novo nome e um novo arquivo é criado.compress
: compacta os arquivos de logs antigos.include
: adiciona ao arquivo de configuração a configuração de arquivos e pastas especificados. Por padrão, inclui o conteúdo do diretório/etc/logrotate.d
. Neste diretório existem arquivos que definem como tratar alguns arquivos de logs específicos.
O diretório /etc/logrotate.d
contém configurações de gerenciamento de logs específicas para vários serviços. Por exemplo:
programicio@Programicio:~$ ls -l /etc/logrotate.d total 68 -rw-r--r-- 1 root root 120 Jul 7 2023 alternatives -rw-r--r-- 1 root root 397 Jul 21 2023 apache2 -rw-r--r-- 1 root root 126 Oct 9 16:45 apport -rw-r--r-- 1 root root 173 Aug 2 2023 apt -rw-r--r-- 1 root root 91 Mar 24 2023 bootlog -rw-r--r-- 1 root root 130 Oct 14 2019 btmp -rw-r--r-- 1 root root 181 Mar 26 2023 cups-daemon -rw-r--r-- 1 root root 112 Jul 7 2023 dpkg -rw-r--r-- 1 root root 94 Aug 18 2022 ppp -rw-r--r-- 1 root root 248 Sep 4 2023 rsyslog -rw-r--r-- 1 root root 132 Sep 10 2020 sane-utils -rw-r--r-- 1 root root 174 May 18 2022 sssd-common -rw-r--r-- 1 root root 209 May 16 2023 ufw -rw-r--r-- 1 root root 145 Oct 14 2019 wtmp
Por exemplo, vejamos o arquivo /etc/logrotate.d/rsyslog
, que define a configuração para os logs do serviço rsyslog:
/var/log/syslog /var/log/mail.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/cron.log { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
Aqui vemos que as regras de rotação de logs são definidas para um conjunto de arquivos. As opções utilizadas incluem weekly
e rotate 4
, além de outras específicas:
notifempty
: não rotaciona o arquivo de log se estiver vazio.missingok
: se o arquivo de log não existir, passa para o próximo sem gerar mensagem de erro.postrotate
: define comandos que devem ser executados após ologrotate
processar o arquivo.endscript
: define o fim do bloco de comandos.
É importante notar que é possível criar arquivos logrotate
para arquivos que não são arquivos de log e configurá-los da mesma forma para rotação.