Como e onde os logs são armazenados em um servidor

Publicado em 2026-09-12 por frfrand

Dónde busca cada cosa, qué cambió con journald, por qué un log sin rotación llena el disco, y los comandos que resuelven la mayoría de las búsquedas.

Como e onde os logs são armazenados em um servidor

Quando algo falha, a resposta quase sempre já está escrita em algum lugar. O problema é saber em qual.

Dois sistemas convivendo

Em um Linux moderno, existem dois locais para os registros, e vale a pena entender a diferença.

journald (do systemd) armazena em um formato binário indexado, com metadados: de qual serviço vem cada linha, qual usuário, qual processo, com qual prioridade. É consultado com journalctl.

Os arquivos de texto em /var/log continuam existindo. Muitos serviços (nginx, por exemplo) escrevem seus próprios arquivos diretamente, e em muitas distribuições o rsyslog copia parte do journal para arquivos por compatibilidade.

Essa duplicação explica uma confusão frequente: a mesma mensagem pode aparecer nos dois lados.

Os comandos que vale a pena memorizar

Para um serviço:

journalctl -u miapp -f # ao vivo journalctl -u miapp --since "1 hour ago" journalctl -u miapp -n 200 # as últimas 200 linhas

Para erros do sistema:

journalctl -p err -S today

A opção -p filtra por prioridade, com a escala clássica do syslog: 0 emergência, 3 erro, 4 aviso, 6 informativo. Filtrar por err remove o ruído e mostra o que importa.

E para os arquivos de texto:

tail -f /var/log/nginx/error.log grep -i "timeout" /var/log/nginx/error.log | tail -50

Um atalho que economiza tempo

Se o nginx retornar 502, o problema quase nunca está no nginx: significa que sua aplicação não respondeu. O erro está no log da sua aplicação, não no do nginx.

Um 504 é diferente: sua aplicação respondeu, mas demorou mais do que o nginx esperava.

Saber essa diferença economiza muitas buscas no arquivo errado.

A rotação, e por que o disco enche

Um log cresce indefinidamente se ninguém o cortar. A rotação se encarrega disso: renomeia o arquivo, inicia um novo, comprime os antigos e exclui os que excedem a retenção.

Para arquivos de texto, quem faz isso é o logrotate, com sua configuração em /etc/logrotate.d/. Cada serviço deixa seu arquivo lá.

Para o journal, o limite se configura em /etc/systemd/journald.conf:

SystemMaxUse=500M

Sem esse limite, o journal pode crescer até ocupar um percentual considerável do disco.

E o comando que você vai querer no dia em que o disco encher:

journalctl --disk-usage journalctl --vacuum-time=7d # apaga o anterior a 7 dias

Dois detalhes que mordem

Um log rotado enquanto um processo o tem aberto. Se a rotação renomear o arquivo e o processo continuar escrevendo no descritor antigo, o espaço não é liberado e as novas linhas vão para um arquivo sem nome. Por isso a configuração de rotação inclui avisar o processo para reabrir seus arquivos. Quando você vê que o disco não é liberado após a rotação, costuma ser isso.

Os logs de aplicações em contêineres não vão para o journal por padrão: o motor de contêineres os captura. Se não configurar rotação lá, esses arquivos crescem sem controle. É uma causa muito frequente de discos cheios em servidores com Docker.

O que convém registrar

Mais não é melhor. Um log com tudo é tão inútil quanto um vazio, porque ninguém lê.

Três costumes que fazem os logs servirem:

  • Um identificador por requisição, que apareça em todas as linhas relacionadas. Permite reconstruir o que aconteceu em um caso concreto.
  • Formato estruturado (JSON) se for processá-los com ferramentas. Texto simples se for lê-los a olho nu.
  • Nunca dados sensíveis. Senhas, tokens e dados pessoais não vão ao log. É uma das formas mais comuns de vazamento, e acontece quase sempre por uma sessão de depuração que ficou ligada.

No ArduMaker, os logs de cada serviço e de cada implantação são vistos no painel, com seu histórico, sem precisar entrar por SSH para buscá-los.

  • logs
  • journalctl
  • rsyslog
  • rotación
  • ArduMaker

Continuar lendo

Todos os artigos · Planos VPS