Servidor Ubuntu 16.04: Instalar e Configurar o logrotate
logrotate é uma ferramenta que substitui arquivos de log com base em condições de frequência ou tamanho e gerencia arquivos anteriores armazenando, compactando ou excluindo-os. No Ubuntu, ele pode gerenciar logs que crescem continuamente, mas o momento real da substituição depende do agendamento de execução do logrotate e das condições de configuração.
Suporte e preparação para o Ubuntu 16.04
A manutenção geral de segurança para o Ubuntu 16.04 LTS e a manutenção geral de segurança estendida (ESM) para o Ubuntu Pro foram encerradas. A Canonical oferece serviços adicionais separados de Legado, então verifique a cobertura e o custo no Guia de Suporte do Ubuntu 16.04, e planeje atualizar para uma versão suportada do Ubuntu, se possível. Os princípios básicos abaixo se aplicam também a outras versões, mas o comportamento detalhado pode variar dependendo da versão do logrotate instalada e do cronograma de execução.
Primeiro, verifique se está instalado e, se o pacote não estiver presente no Ubuntu, instale-o. Antes de alterar as configurações do servidor de produção, certifique-se de verificar os métodos de backup e recuperação para as configurações existentes e os logs necessários.
logrotate --version
sudo apt update
sudo apt install logrotate
Verifique as configurações padrão e o cronograma de execução
As configurações globais geralmente estão em /etc/logrotate.conf, e as configurações individuais são lidas se o arquivo estiver configurado para incluir /etc/logrotate.d/. Verifique os arquivos reais no servidor. Em ambientes onde o pacote Apache está instalado, /etc/logrotate.d/apache2 pode existir, mas o caminho do log e as configurações variam dependendo do ambiente de instalação.
cat /etc/logrotate.conf
ls -l /etc/logrotate.d/
cat /etc/logrotate.d/apache2
Em sistemas sem arquivos de configuração do Apache, o último comando pode falhar. Não gerencie o mesmo caminho de log de forma redundante em duas configurações. O logrotate não é executado continuamente por si só nem agenda sua própria execução. No Ubuntu 16.04, ele geralmente é executado periodicamente através do /etc/cron.daily/logrotate, então verifique esse arquivo e se ele é executado via cron. Em outras versões, os agendamentos reais podem diferir, como com timers do systemd.
Crie logs e configurações de teste independentes
O exercício a seguir usa um novo diretório temporário em vez dos logs de produção. Execute na ordem no mesmo shell e verifique os caminhos de saída. Ele utiliza um diretório temporário e arquivos de estado separados, portanto não modifica as configurações de logrotate existentes no sistema ou o estado.
demo_dir=$(mktemp -d)
printf 'first log line\n' > "$demo_dir/app.log"
cat > "$demo_dir/logrotate.conf" <<EOF
$demo_dir/app.log {
daily
rotate 3
missingok
notifempty
compress
delaycompress
create 0600
}
EOF
printf 'Test directory: %s\n' "$demo_dir"
cat "$demo_dir/logrotate.conf"
daily é uma condição de rotação diária, e rotate 3 é uma configuração que mantém logs anteriores por até três rotações. missingok evita erros quando um arquivo não existe, e notifempty não rota logs vazios. compress comprime logs anteriores, e delaycompress atrasa a compressão do log mais recentemente rotacionado até a próxima rotação. create 0600 define permissões ao criar novos arquivos de log após a rotação.
O arquivo de configuração neste exemplo não está registrado na programação do sistema, e nenhuma aplicação real escreve no log de teste. Configurar daily não cria um agendamento para execução por conta própria. Consulte o manual oficial do logrotate para verificar opções e condições apropriadas para a versão instalada.
Verificando execuções de teste e rotações reais
Primeiro, verifique as configurações e o comportamento esperado no modo de depuração. -d não altera logs nem atualiza arquivos de estado. Com um novo arquivo de estado, a saída pode indicar que ainda não é hora de rotação.
logrotate -d -s "$demo_dir/state" "$demo_dir/logrotate.conf"
Forçar uma rotação apenas no arquivo de prática e verificar os resultados. -f força a rotação mesmo que as condições não sejam atendidas, portanto, não deve ser usado descuidadamente em logs de operação reais.
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
cat "$demo_dir/app.log.1"
Se for bem-sucedido, o conteúdo original está em app.log.1 e um novo app.log é criado. A parte mais recente rotacionada ainda não está comprimida por causa do delaycompress. Após adicionar conteúdo ao novo log e forçar uma rotação mais uma vez, a parte rotacionada anterior é geralmente comprimida como app.log.2.gz.
printf 'second log line\n' >> "$demo_dir/app.log"
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
gzip -cd "$demo_dir/app.log.2.gz"
Você pode verificar a primeira linha do log do último comando. Este exercício não reproduz um serviço em execução que grava logs. Quando a prática for concluída, verifique o caminho temporário onde a saída foi salva e limpe quaisquer arquivos que você não precise mais.
Ao aplicar a um serviço de produção
Um programa em execução pode continuar a escrever no arquivo de log anterior mesmo depois que o arquivo foi renomeado. Verifique o procedimento fornecido para que o serviço reabra o arquivo de log e revise o script postrotate do pacote existente, e verifique se o proprietário, grupo e permissões do novo arquivo são apropriados para o serviço. Antes de alterar as regras existentes do Apache, revise a documentação da distribuição e do serviço e faça backup da sua configuração.
copytruncate copia o log e então trunca o original no local; ele pode ser usado para programas que não podem reabrir seus arquivos de log, mas logs podem ser perdidos entre a cópia e o truncamento. Sempre que possível, verifique primeiro se o serviço tem uma forma de reabrir o log. rotate 3 se refere ao número de rotações a serem mantidas, não a um limite em dias ou tamanho, portanto a política de retenção e o uso de disco devem ser verificados separadamente.
Verifique quando não estiver rotacionando
- Verifique se o arquivo de configuração está incluído nas configurações globais e se o caminho de destino corresponde ao log real. Arquivos vazios não rotacionam em
notifempty. - Verifique se o cron ou o timer está realmente em execução e se a rotação é necessária com base no arquivo de estado e nas condições periódicas.
dailynão garante a rotação no exato horário diário em ambientes verificados apenas uma vez por dia. - Procure problemas com permissões, propriedade, sintaxe e caminhos duplicados na saída de depuração e nos logs de erro do agendador. Revise os resultados e planos de recuperação antes de aplicar
-faos logs operacionais.




