Voltar ao Diminua Blog

Artigo

Dominando o Comando `journalctl` no Linux: A Chave para Entender o Systemd

Desvende a fundo os logs do seu sistema e resolva problemas com este poderoso utilitário do systemd.

Dominando o Comando `journalctl` no Linux: A Chave para Entender o Systemd

O Que é o `journalctl` e Por Que Ele é Essencial?

No universo Linux moderno, o systemd se tornou o sistema de inicialização e gerenciador de serviços padrão na maioria das distribuições. Uma de suas funcionalidades mais importantes é o journal, um sistema de logging centralizado que coleta logs de todo o sistema, desde o boot até a operação de serviços e aplicações. O comando journalctl é a sua porta de entrada para interagir com este vasto repositório de informações.

Entender o journalctl é crucial para administradores de sistemas, desenvolvedores e qualquer pessoa que precise diagnosticar problemas, monitorar o desempenho ou simplesmente entender o que está acontecendo em um servidor Linux. Ele substitui, em grande parte, o antigo sistema de logs baseado em arquivos de texto (como /var/log/syslog), oferecendo mais flexibilidade, capacidade de busca e filtragem.

Comandos Básicos para Começar

A forma mais simples de usar o journalctl é sem nenhum argumento. Isso exibirá todos os logs do sistema em ordem cronológica reversa (do mais recente para o mais antigo).

journalctl

Para visualizar os logs em tempo real, como o comando tail -f faria com um arquivo de log tradicional, use a opção -f:

journalctl -f

Isso é extremamente útil para monitorar a atividade do sistema enquanto você executa uma tarefa ou tenta reproduzir um problema.

Filtrando Logs para Análise Eficaz

A verdadeira força do journalctl reside em suas poderosas opções de filtragem. Saber como isolar as informações que você precisa pode economizar horas de depuração.

Filtrando por Unidade (Serviço)

Para ver os logs de um serviço específico, como o Nginx ou o PHP-FPM, utilize a opção -u:

journalctl -u nginx.service
journalctl -u php-fpm.service

Substitua nginx.service ou php-fpm.service pelo nome da unidade de serviço que você deseja inspecionar. Se você não tem certeza do nome exato, pode listar todas as unidades ativas com systemctl list-units --type=service.

Filtrando por Data e Hora

É comum precisar de logs de um período específico. O journalctl permite filtrar por data e hora de diversas maneiras:

  • Últimas N horas: Use --since e --until com intervalos de tempo. Por exemplo, para ver logs das últimas 2 horas:
journalctl --since "2 hours ago"
  • Intervalo específico: Defina datas e horários precisos.
journalctl --since "2023-10-27 10:00:00" --until "2023-10-27 12:00:00"
  • Logs desde um boot específico: Se você reiniciou o servidor, pode querer ver logs desde o último boot ou um boot anterior.
journalctl -b
journalctl -b -1

-b mostra logs do boot atual. -b -1 mostra logs do boot anterior, -b -2 do penúltimo, e assim por diante.

Filtrando por Prioridade

Logs são categorizados por níveis de prioridade (emergência, alerta, crítico, erro, aviso, notificação, informativo, depuração). Você pode filtrar por eles:

journalctl -p err..alert

Este comando exibirá logs com prioridade de erro (err) até emergência (alert). Você pode especificar uma única prioridade como -p err.

Combinando Filtros

A combinação de filtros é onde o journalctl realmente brilha. Por exemplo, para ver erros do Nginx nas últimas 24 horas:

journalctl -u nginx.service -p err --since "24 hours ago"

Opções Avançadas e Dicas de Uso

O journalctl oferece muitas outras funcionalidades úteis:

Exibindo Logs em Formato de Tabela (-o table)

Para uma visualização mais estruturada, especialmente quando se combina múltiplos filtros, o formato de tabela pode ser mais legível:

journalctl -u nginx.service -o table

Exportando Logs (-o json, -o cat)

Você pode exportar logs em diferentes formatos, o que é útil para processamento posterior com outras ferramentas, como o jq.

journalctl -u nginx.service -o json
journalctl -u nginx.service -o cat

-o json exporta cada entrada como um objeto JSON, e -o cat exporta apenas o campo de mensagem, sem metadados.

Visualizando Logs de Outros Sistemas (-M)

Se você gerencia múltiplos servidores, pode usar o journalctl com a opção -M para se conectar a outros sistemas via SSH e visualizar seus journals. Certifique-se de que o acesso SSH esteja configurado corretamente.

journalctl -M user@host -u nginx.service

Limpeza e Gerenciamento do Tamanho do Journal

O journal pode crescer consideravelmente com o tempo. O systemd oferece mecanismos para gerenciar seu tamanho. Você pode configurar limites no arquivo /etc/systemd/journald.conf. Para limpar manualmente logs antigos, você pode usar o comando journalctl --vacuum-time= ou --vacuum-size=.

# Remover logs com mais de 7 dias
journalctl --vacuum-time=7d

# Manter apenas os últimos 500MB de logs
journalctl --vacuum-size=500M

Aviso: Use os comandos de vacuum com cautela, pois eles removem dados de log permanentemente. Certifique-se de que você não precisa desses logs para auditoria ou diagnóstico antes de executá-los.

Integração com Outras Ferramentas

O journalctl se integra perfeitamente com outras ferramentas de linha de comando do Linux. Por exemplo, você pode usar o grep para buscas mais específicas dentro dos logs filtrados:

journalctl -u nginx.service | grep "client denied"

Ou, como mencionado, o jq para processar logs exportados em formato JSON:

journalctl -o json | jq '.message'

Conclusão

Dominar o journalctl é um passo fundamental para quem administra sistemas Linux baseados em systemd. Ele não é apenas um visualizador de logs, mas uma ferramenta poderosa para diagnóstico, monitoramento e análise do comportamento do seu sistema. Ao aprender a filtrar, buscar e gerenciar seus logs de forma eficaz, você estará mais preparado para identificar e resolver problemas rapidamente, garantindo a estabilidade e a segurança dos seus servidores.

Para aprofundar seus conhecimentos em administração de sistemas Linux e linha de comando, confira outros artigos em nosso catálogo, como o guia sobre Entendendo o `chmod` no Linux: Controle de Permissões de Arquivos ou Dominando o `systemctl` no Linux: Gerenciando Serviços e Unidades do Systemd.

Foto de Rafael Minguet Delgado no Pexels.