Desmistificando o journalctl: Seu Guia para os Logs do Sistema Linux
Aprenda comandos do journalctl para visualizar, filtrar, acompanhar e limpar logs do diário systemd do Linux.
Desmistificando o journalctl: Seu Guia para os Logs do Sistema Linux
O utilitário journalctl é o principal comando para visualizar logs coletados pelo systemd-journald. Quando um serviço falha, uma inicialização trava ou uma mensagem do kernel passa rápido demais, o journalctl é geralmente onde você encontra os detalhes.
Diferente dos arquivos de log em texto simples em /var/log, o diário armazena entradas estruturadas com metadados como nome da unidade, prioridade, ID de inicialização e timestamp. Isso permite filtrar logs com precisão, em vez de abrir vários arquivos e adivinhar.
Entendendo o Diário do Systemd
Antes de mergulhar nos comandos, é útil saber o que o journalctl está gerenciando. O diário do systemd coleta logs do kernel, serviços (unidades), aplicativos e até mesmo do processo de inicialização do sistema. Esses logs são normalmente armazenados em arquivos binários estruturados, tornando a busca e filtragem muito mais rápidas do que arquivos planos tradicionais.
Conceitos-chave:
- Persistência: Os logs podem ser configurados para serem armazenados permanentemente entre reinicializações (modo persistente) ou mantidos apenas na memória (modo volátil).
- Dados Estruturados: Os logs contêm metadados (como nome da unidade, prioridade, ID de inicialização) que o
journalctlutiliza para filtragem.
Comandos Essenciais de Visualização
A necessidade mais comum é simplesmente visualizar os logs. Aqui estão os comandos fundamentais para começar a explorar o histórico do seu sistema.
1. Visualizando Todos os Logs
Para ver todas as entradas coletadas pelo diário desde que o sistema começou a registrar logs, use o comando sem argumentos:
journalctl
Por padrão, esta saída é paginada usando uma ferramenta como less, permitindo navegar para cima e para baixo usando as teclas de seta ou a barra de espaço.
2. Visualizando Logs em Tempo Real (Seguindo)
Semelhante ao uso de tail -f, você pode monitorar logs à medida que são escritos no diário. Isso é inestimável ao iniciar ou depurar um serviço específico:
journalctl -f
Para sair da visualização em tempo real, pressione Ctrl+C.
3. Limitando a Saída pelo Número de Linhas
Se você precisar apenas das entradas mais recentes, use a flag -n para especificar o número de linhas:
# Mostrar as últimas 20 entradas de log
journalctl -n 20
4. Visualizando Logs Desde um Horário Específico
Filtrar por tempo é um dos recursos mais fortes do journalctl. Você pode usar timestamps relativos ou absolutos.
Exemplos de Tempo Relativo:
| Comando | Descrição |
|---|---|
journalctl --since "1 hour ago" |
Logs da última hora. |
journalctl --since "yesterday" |
Logs do início do dia calendário anterior. |
journalctl --since "2023-10-26 14:30:00" |
Logs após uma data e hora específicas. |
Dica: Você pode combinar --since e --until para especificar um intervalo preciso, por exemplo: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".
Filtrando Logs por Unidade, Serviço ou Processo
Um dos usos mais críticos do journalctl é isolar mensagens relacionadas a uma unidade (serviço) específica do systemd.
Filtrando por Nome do Serviço
Use a flag -u (ou --unit) seguida pelo nome do serviço (ex.: sshd.service, nginx.service):
# Visualizar logs apenas para o serviço do servidor web Apache
journalctl -u apache2.service
# Seguir logs para o serviço Docker
journalctl -u docker.service -f
Filtrando por ID de Inicialização
O Systemd rastreia logs em diferentes inicializações do sistema. Para ver logs de uma inicialização anterior, primeiro liste as inicializações disponíveis:
journalctl --list-boots
Isso gera uma lista indexada (ex.: -1, -2, 0 para a inicialização atual). Você pode então usar o índice ou o ID completo da inicialização:
# Mostrar logs da inicialização imediatamente anterior
journalctl -b -1
# Mostrar logs de um ID de inicialização específico (use o ID longo listado acima)
journalctl -b a1b2c3d4e5f6...
Filtrando por Mensagens do Kernel
Para visualizar apenas mensagens originadas do kernel (semelhante a usar dmesg):
journalctl -k
# Ou, equivalentemente:
journalctl -b -k
Filtragem Avançada e Controle de Saída
A solução eficaz de problemas geralmente requer combinar filtros e controlar o formato de saída.
1. Filtrando por Nível de Prioridade
Os logs recebem níveis de prioridade de 0 (emerg) a 7 (debug). Você pode usar a flag -p ou --priority para visualizar mensagens na gravidade selecionada e níveis mais severos:
| Nível de Prioridade | Valor Numérico |
|---|---|
err ou error |
3 |
warning |
4 |
notice |
5 |
info |
6 |
# Mostrar todos os erros, mensagens críticas e de emergência do serviço SSH
journalctl -u sshd.service -p err
2. Pesquisando por Texto Específico
Quando a filtragem padrão não é suficiente, você pode canalizar a saída para grep ou usar --grep em sistemas cuja versão do journalctl suporta:
# Pesquisar em todos os logs por linhas contendo a palavra 'failed'
journalctl | grep failed
# Ou, use a opção --grep para filtragem mais simples (se disponível/preferida)
journalctl --grep=failed
3. Alterando o Formato de Saída
Para scripts ou mover logs para outras ferramentas, alterar o formato de saída é essencial. O padrão é pretty (legível por humanos).
--output=json: Gera entradas como objetos JSON estruturados.--output=short: Semelhante a pretty, mas menos colorido.--output=export: Gera entradas brutas do diário para arquivamento.
# Gerar logs recentes como JSON
journalctl -n 5 --output=json
4. Combinando Filtros
Os filtros se acumulam de forma multiplicativa. Para ver todos os erros do Nginx registrados nos últimos 10 minutos:
journalctl -u nginx.service --since "10 minutes ago" -p err
Gerenciando o Tamanho e a Persistência do Diário
Com o tempo, o diário pode consumir espaço significativo em disco, especialmente se configurado para registro persistente. Os administradores de sistema devem gerenciar seu tamanho.
Verificando o Uso Atual
Para ver quanto espaço em disco os arquivos atuais do diário estão ocupando:
journalctl --disk-usage
Limpando Logs Antigos
Você pode limpar logs com base no tempo ou no tamanho total.
Limpeza por Tempo:
# Manter apenas logs dos últimos 7 dias
journalctl --vacuum-time=7d
Limpeza por Tamanho:
# Reduzir o tamanho total do log para no máximo 500 Megabytes
journalctl --vacuum-size=500M
Aviso: Tenha cuidado ao excluir logs, especialmente aqueles de inicializações mais antigas (
-b). Certifique-se de que informações críticas de diagnóstico não sejam removidas prematuramente.
Conclusão
Para solução de problemas do dia a dia, comece com journalctl -u <serviço> -n 50 --no-pager, adicione -f quando precisar de saída ao vivo e use --since ou -b quando o problema estiver vinculado a uma janela de tempo ou inicialização. Antes de excluir logs, verifique journalctl --disk-usage e mantenha histórico suficiente para reversão e revisão de incidentes.