Desmistificando o journalctl: Seu Guia para Logs de Sistema Linux
A ferramenta journalctl é o comando central para visualizar e analisar os logs estruturados gerenciados pelo sistema de journaling do systemd. Sendo o padrão moderno de registro em muitas distribuições Linux, entender o journalctl é crucial para uma administração de sistema eficaz, gerenciamento de serviços e, especialmente, para a resolução de problemas.
Ao contrário dos arquivos de log tradicionais baseados em texto (como os encontrados em /var/log), o systemd captura os logs em um formato binário e indexado. Isso permite consultas poderosas baseadas em tempo, serviço, ID de inicialização e muito mais. Este guia o guiará pelos comandos essenciais necessários para liberar todo o potencial dos eventos históricos e em tempo real do seu sistema.
Entendendo o Journal do Systemd
Antes de mergulhar nos comandos, é útil saber o que o journalctl está gerenciando. O journal do systemd coleta logs do kernel, serviços (unidades), aplicações e até mesmo do processo de inicialização do sistema. Esses logs são tipicamente armazenados em arquivos binários estruturados, tornando-os muito mais rápidos de pesquisar e filtrar do que os arquivos planos tradicionais.
Conceitos Chave:
- Persistência: Os logs podem ser configurados para serem armazenados permanentemente através de reinicializações (modo persistente) ou apenas mantidos 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 cada entrada coletada pelo journal desde que o sistema começou a registrar logs, use o comando sem argumentos:
journalctl
Por padrão, essa saída é paginada usando uma ferramenta como less, permitindo que você navegue 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 os logs à medida que são gravados no journal. 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 é uma das características 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 desde o início do dia 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) systemd específica.
Filtrando por Nome de 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 (Boot ID)
O Systemd rastreia logs através de 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 (por exemplo, -1, -2, 0 para a inicialização atual). Você pode então usar o índice ou o Boot ID completo:
b# 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 ao uso de dmesg):
journalctl -k
# Ou, equivalentemente:
journalctl -b -k
Filtragem Avançada e Controle de Saída
A resolução de problemas eficaz geralmente requer a combinação de filtros e o controle do formato de saída.
1. Filtrando por Nível de Prioridade
Os logs são atribuídos a níveis de prioridade (0=emerg, 7=debug). Você pode usar a flag -p (ou --priority) para visualizar mensagens com uma severidade igual ou superior a um determinado nível:
| Nível de Prioridade | Valor Numérico |
|---|---|
err (Erro) |
3 |
warning (Aviso) |
4 |
notice (Notificação) |
5 |
info (Informação) |
6 |
# Mostrar todos os erros, mensagens críticas e de emergência do serviço SSH
journalctl -u sshd.service -p err
2. Procurando por Texto Específico
Quando a filtragem padrão não é suficiente, você pode direcionar a saída para grep, embora o journalctl tenha um mecanismo integrado para pesquisa de texto, que muitas vezes é mais eficiente para dados estruturados:
# Procurar em todos os logs por linhas que contenham a palavra 'failed'
journalctl | grep failed
# Ou, use a opção --grep para uma filtragem mais simples (se disponível/preferida)
journalctl --grep=failed
3. Alterando o Formato de Saída
Para scripts ou para 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 de journal brutas para arquivamento.
# Gerar logs recentes como JSON
journalctl -n 5 --output=json
4. Combinando Filtros
Os filtros se acumulam multiplicativamente. 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 Journal
Com o tempo, o journal pode consumir um espaço significativo em disco, especialmente se configurado para registro persistente. Administradores de sistema devem gerenciar seu tamanho.
Verificando o Uso Atual
Para ver quanto espaço em disco os arquivos de journal atuais 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 um máximo de 500 Megabytes
journalctl --vacuum-size=500M
Aviso: Tenha cautela ao excluir logs, especialmente aqueles de inicializações mais antigas (
-b). Certifique-se de que informações diagnósticas críticas não sejam removidas prematuramente.
Conclusão
journalctl é uma ferramenta poderosa e flexível que leva o registro de logs além dos simples arquivos de texto. Ao dominar a filtragem baseada em tempo (--since, --until), o isolamento de unidades (-u) e o monitoramento em tempo real (-f), você obtém controle granular sobre o monitoramento da saúde do sistema. Seja verificando o status de um serviço ou investigando um kernel panic da semana passada, o journalctl é sua interface principal para o moderno journal do sistema Linux.