Gerenciamento de logs no Linux com logrotate



Por   

 01/09/2019 

Atuando desde 2005 com tecnologia e internet, concebendo e desenvolvendo processos de inovação.

Quantas vezes você já se deparou com uma mensagem No space left on device no Ubuntu ou outra versão do Linux? Nenhuma??

Então você fez muito bem o dever de casa, ou ainda não chegou nesse momento. Mas se você está aqui, provavelmente o dia fatídico chegou! :)

Neste artigo vou demonstrar como os logs normalmente costumam ser os vilões desse problema e mostrar como resolver isso de forma bastante simples com o logrotate.

Encontrando arquivos de log

A grande maioria das aplicações web geram logs. Esses logs são gravados em arquivos texto, normalmente com a extensão *.log.

Então, se você não fizer de forma adequada um gerenciamento desses arquivos, inevitavelmente ele engolirá 100% do seu espaço em disco. Triste, não é?

Mas a grande questão é que, quando você se depara com esse erro, até uma simples navegação nos diretórios via SSH se demonstra uma tarefa árdua. Então você precisará logo encontrar o vilão e dar um jeito nele.

Para encontrar os maiores arquivos do sistema operacional e, por consequência, esses arquivos de log gigantescos, utilize o comando du.

$ du -a / | sort -n -r | head -n 5

Ele basicamente buscará os maiores arquivos, jogando no topo da lista os maiores, limitando-se a 5 resultados. Costuma ser o suficiente.

Configurando o logrotate

Encontrou o arquivo de log? Ótimo! Para este caso eu vou utilizar uma configuração de um arquivo de log fictício de uma aplicação web que gera o seguinte arquivo:

$ /var/log/foo/production.log

Então o passo 1 será ver se você tem o logrotate instalado em seu servidor. Descubra isso com:

$ logrotate --version

Deverá aparecer algo como o número da versão do aplicativo. Se você obtiver um erro, instale ele com o seu gerenciador de pacotes (apt, yum ou similar).

Agora iremos configurar nossas regras de gerenciamento de logs. Para este caso, eu quero gerar 1 arquivo de log por dia, deixando salvo no máximo 30 logs antigos.

Crie um arquivo com o nome da aplicação em /etc/logrotate.d/. Neste caso estou utilizando o vim como editor de textos:

$ vim /etc/logrotate.d/foo

Nesse arquivo, cole o seguinte conteúdo:

/var/log/foo/production.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
}

E, para testar a configuração, rode o debugger do logrotate:

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

Dê uma olhadinha nas mensagens que ele gerou e avalie se algum erro foi encontrado.

Simples, não é? Esse tipo de configuração poderá salvar horas do seu precioso tempo tendo que lidar com servidores com espaço esgotado e com "comportamentos misteriosos".

Até a próxima e, qualquer dúvida, escreva abaixo nos comentários!

Este arquivo foi construído a partir da documentação da Digital Ocean.



Assine nosso blog

Não perca nenhuma novidade!

Assine nosso blog

Não perca nenhuma novidade!