Como Usar o journalctl - Guia de Investigacao de Logs no Linux
O Que Voce Vai Aprender
- Superar a confusao "onde estao os logs?" no Ubuntu
- Usar
journalctlpara encontrar rapidamente causas de falha de servicos - Dominar padroes praticos: "ver apenas recentes", "filtrar por tempo", "acompanhar enquanto reproduz"
Resumo Rapido
Para investigacao de incidentes, geralmente comece com estes:
- Verificar se o servico morreu:
systemctl status <service> - Logs recentes:
journalctl -u <service> -n 200 - Acompanhar enquanto reproduz:
journalctl -u <service> -f - Problemas no nivel do SO (OOM, etc.):
journalctl -k | grep -i oom
Pre-requisitos
- SO: Ubuntu
- Publico: Iniciantes em servidores
- Ambiente systemd (maioria dos servidores Ubuntu)
- Acesso
sudo(alguns logs podem nao ser visiveis sem ele)
0. O Que e o journalctl? (Minimo)
Conclusao: journalctl le os logs do journald do systemd onde eventos de inicializacao e OOM aparecem.
No Ubuntu, logs de servicos podem nao estar em arquivos (/var/log/~) mas coletados no journald (journal).
journalctl e o comando para ler esse "log agregado".
Nginx/Apache tambem tem logs em arquivo, mas "falha na inicializacao do servico", "erro de configuracao", "morto por OOM" frequentemente aparecem no journal.
1. Primeiro, Identifique o Nome do Servico (Muitos Travam Aqui)
Conclusao: Identifique o nome exato do servico primeiro; systemctl status revela com seguranca.
Exemplos:
- nginx ->
nginx - apache ->
apache2 - ssh ->
ssh - php-fpm ->
php8.1-fpm, etc. (varia por ambiente)
Verifique o status primeiro para confirmar o nome:
$ sudo systemctl status nginx
O nome do servico aparece nesta saida.
2. Ver "Apenas Recentes" (Mais Usado por Iniciantes)
Conclusao: Execute journalctl -u <service> -n 200 para logs recentes; 200 linhas e um bom inicio.
2-1. Ultimas 200 Linhas (Servico Especifico)
$ sudo journalctl -u nginx -n 200
Para Apache:
$ sudo journalctl -u apache2 -n 200
2-2. Mais Curto (Ultimas 50 Linhas)
$ sudo journalctl -u nginx -n 50
Comece com 200 linhas. Poucas demais e "o erro principal nao aparece" acontece frequentemente.
3. "Acompanhar Enquanto Reproduz" e o Mais Poderoso (-f)
Conclusao: Use journalctl -u <service> -f e reproduza em outra aba para encontrar causas rapidamente.
Este e o caminho mais rapido ate a causa.
$ sudo journalctl -u nginx -f
Reproduza com curl ou navegador em outra aba -> observe o log.
Isso geralmente revela a causa imediatamente.
4. Filtrar por Tempo (Torna a Investigacao Muito Mais Rapida)
Conclusao: Filtre por tempo com --since/--until quando souber quando o problema comecou.
Se voce sabe "quando quebrou", sempre filtre por tempo.
4-1. Ultima Hora
$ sudo journalctl -u nginx --since "1 hour ago"
4-2. Apenas Hoje
$ sudo journalctl -u nginx --since "today"
4-3. Faixa de Tempo Especifica
$ sudo journalctl -u nginx --since "2025-12-15 13:00" --until "2025-12-15 14:00"
5. Encontrar Apenas Linhas de Erro (Alta Prioridade)
Conclusao: Quando os logs sao barulhentos, use grep -iE para error, fail e palavras similares primeiro.
Quando os logs sao muitos, primeiro filtre por "strings semelhantes a erro":
$ sudo journalctl -u nginx --since "today" | grep -iE "error|fail|fatal|panic|denied|refused|timeout"
grep nao e perfeito mas e otimo para investigacao inicial.
6. Problemas no Nivel do SO: OOM / Logs do Kernel (Frequentemente Decisivo)
Conclusao: Crashes de apps podem esconder problemas de OOM ou kernel; verifique com journalctl -k.
Quando apps travam, processos morrem, 502s aumentam... OOM Killer (falta de memoria) ou problemas de kernel podem estar por tras.
6-1. Logs do Kernel (-k)
$ sudo journalctl -k -n 200
6-2. Encontrar Apenas OOM
$ sudo journalctl -k | grep -i oom | tail -n 50 $ sudo journalctl -k | grep -i "killed process" | tail -n 50
7. Investigando "Falha na Inicializacao" (Comum)
Conclusao: Em falhas de inicializacao, leia systemctl status e journal juntos; -b limita o escopo.
Quando o servico nao inicia, verifique status e journal juntos:
7-1. status (Resumo)
$ sudo systemctl status nginx
7-2. Logs Recentes de Inicializacao (Servico Especifico)
$ sudo journalctl -u nginx -n 200
7-3. Apenas Boot Atual (-b)
Logs "desde o boot atual" apenas:
$ sudo journalctl -u nginx -b -n 200
-b significa "desde o boot atual".
8. Erros Comuns e Solucoes
Conclusao: Sem logs, muitos logs ou grep vazio sao tipicos; adicione sudo, filtre, leia logs brutos.
8-1. "Nenhum Log Aparecendo"
- O servico nao envia saida para o journald (apenas logs em arquivo)
- Permissoes insuficientes para leitura
Solucoes:
- Adicione
sudo - Para Nginx/Apache, verifique tambem
/var/log/nginx/ou/var/log/apache2/
8-2. "Muitos Logs Para Pesquisar"
Solucoes:
- Use
--sincepara filtro de tempo - Use
-npara limite de linhas - Use
-upara filtro de unidade - Reproduza +
-f(mais rapido)
8-3. "grep Nao Encontra Nada" Mas Ainda Esta Quebrado
Solucoes:
- Condicoes do grep muito restritas - primeiro verifique logs brutos com
-n 200 - Verifique linhas de erro na saida do status
Coisas a Evitar
- Reiniciar spam e limpar logs - Logs desaparecem e a causa fica invisivel. Primeiro
journalctl -u <service> -n 200. - Ler tudo sem filtro de tempo - Perde tempo.
--sincesozinho melhora dramaticamente a produtividade. - Verificar apenas logs do app, ignorar SO - Problemas de OOM e kernel nao aparecem nos logs do app. Sempre use
journalctl -k.
Template Copiar e Colar
# 1) Verifique o status primeiro sudo systemctl status <service> # 2) Logs recentes sudo journalctl -u <service> -n 200 # 3) Acompanhar enquanto reproduz (mais poderoso) sudo journalctl -u <service> -f # 4) Apenas hoje sudo journalctl -u <service> --since "today" # 5) Nivel do SO (OOM, etc.) sudo journalctl -k | grep -i oom | tail -n 50 sudo journalctl -k | tail -n 200