1. O que procurar primeiro
Em incidente: horário aproximado, serviço afetado, e se o erro é de aplicação, rede ou sistema.
2. journalctl na prática
journalctl -u nginx -n 100 --no-pager
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx -f
journalctl -b
journalctl -p err..alert --since today
3. Event Viewer e PowerShell
Get-WinEvent -LogName System -MaxEvents 50 | Where-Object LevelDisplayName -eq 'Error'
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2; StartTime=(Get-Date).AddHours(-2)}
GUI: eventvwr.msc → Windows Logs → Application / System / Security.
4. Equivalências
- Últimas linhas:
journalctl -n 50/Get-WinEvent -MaxEvents 50 - Por serviço:
-u nginx/ filtrar por ProviderName
ATENÇÃO Logs de autenticação são sensíveis. Restrinja quem pode ler.
5. Checklist
- Saber o nome da unit / provider do serviço crítico
- Filtro por tempo + severidade
- Rotação e retenção configuradas
6. Comandos explicados
journalctl (Linux)
| Comando ou opção | O que faz |
|---|---|
journalctl -u nginx | -u filtra pelo serviço (unit), aqui o nginx. |
-n 100 | Mostra apenas as 100 últimas linhas. |
--no-pager | Imprime tudo direto no terminal, sem abrir o paginador. Bom para copiar ou usar em pipes. |
--since "1 hour ago" | Limita ao período. Aceita também today, yesterday e datas como "2026-09-20 10:00". |
-f | Acompanha as novas linhas em tempo real, como o tail -f. |
-b | Mostra só o boot atual. -b -1 mostra o boot anterior. |
-p err..alert | Filtra por prioridade, de err a alert. |
| Prioridade | Nome | Uso |
|---|---|---|
| 0 | emerg | sistema inutilizável |
| 1 | alert | ação imediata |
| 2 | crit | condição crítica |
| 3 | err | erro |
| 4 | warning | aviso |
| 5 | notice | normal, mas relevante |
| 6 | info | informativo |
| 7 | debug | depuração |
Get-WinEvent (Windows)
| Comando ou parâmetro | O que faz |
|---|---|
Get-WinEvent -LogName System -MaxEvents 50 | Lê os 50 eventos mais recentes do log System. |
Where-Object LevelDisplayName -eq 'Error' | Mantém só os eventos de nível Erro. |
-FilterHashtable @{LogName='Application'; Level=2; StartTime=...} | Filtra na origem, o que é mais rápido em logs grandes. Level=2 é Erro. |
(Get-Date).AddHours(-2) | Calcula "duas horas atrás" para o StartTime. |
| Nível no Windows | Significado |
|---|---|
| 1 | Crítico |
| 2 | Erro |
| 3 | Aviso |
| 4 | Informação |
7. Exemplo de investigação no Linux
Um site fora do ar depois de um deploy. A sequência de comandos, do mais amplo ao mais específico:
systemctl status nginx
journalctl -u nginx --since "30 min ago" -p warning --no-pagerUma linha típica de erro, ilustrativa, seria: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use). Ela indica que outra aplicação já ocupa a porta 80. O próximo passo é descobrir qual, com sudo ss -lntp | grep :80.
8. Erros comuns e como resolver
| Sintoma | Causa provável | Solução |
|---|---|---|
O journalctl mostra pouco ou nada | O usuário não tem permissão para ler o journal completo. | Use sudo ou adicione o usuário ao grupo systemd-journal. |
| Os logs somem depois de reiniciar | O journal está configurado como volátil. | Crie /var/log/journal ou use Storage=persistent no journald.conf. |
O Get-WinEvent demora muito | Sem filtro, ele percorre o log inteiro. | Use -FilterHashtable com LogName, Level e StartTime. |