Usando o Journalctl

Aprenda como tirar o máximo proveito do journalctl, esta ferramenta de registro de logs da maioria das distribuições Linux!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

O Journalctl é uma poderosa e relativamente simples ferramenta de logs que executa sob o JournalD, um daemon do SystemD. Ele contempla um histórico do que aconteceu no sistema desde o momento que o kernel Linux inicializa, até o momento que o desktop aparece e o usuário pode mexer no computador. Sendo assim, é uma ferramenta útil pra debugar, ou seja, verificar eventos e procurar por razões para erros que forem presenciados, sejam eles desde erros de WiFi a até o que pode estar causando um Kernel Panic.

A seguir, mostraremos várias maneiras de usar o journalctl para recuperar, formatar e analisar seus logs. Esses métodos podem ser usados ​​sozinhos ou em combinação com outros comandos para refinar sua pesquisa. Para obter uma lista completa das opções do journalctl, uma visita ao manpage do journalctl é sempre aconselhado!

2. Journalctl

Quando executado sem nenhum parâmetro, o comando a seguir mostrará todas as entradas do journal, que podem ser bastante longas:

$ journalctl

As entradas começarão com um banner semelhante a este que mostra o intervalo de tempo coberto pelo log.

— Journal begins at Sat 2021-10-16 01:35:56 -03, ends at Thu 2022-01-13 19:52:>

As entradas longas são impressas na largura da tela e truncadas no final se não couberem. A parte cortada pode ser visualizada usando as teclas de seta para a esquerda e para a direita.

2.1 Mensagens de inicialização

O Journald rastreia cada log para uma inicialização de sistema específica. Para limitar os logs mostrados à inicialização atual, use o parâmetro -b:

$ journalctl -b

Você pode ver mensagens de boots anteriores passando o parâmetro -1, para o boot anterior ao atual, -2 para o penúltimo boot e assim sucessivamente. Exemplo:

$ journalctl -b -1

Para listar as inicializações do sistema, use o comando a seguir.

$ journalctl --list-boots

Ele mostrará um resultado tabular como este.

-2 7b3096310dfe44a48915a6ed2a29d171 Wed 2022-01-12 11:46:38 -03—Wed 2022-01-12 21:40:20 -03
-1 4cb8e0fc790749078e1f5488733cb662 Wed 2022-01-12 21:49:19 -03—Thu 2022-01-13 01:10:28 -03
0 02fe837962044bc2a08850d00ca9d8f1 Thu 2022-01-13 19:00:21 -03—Thu 2022-01-13 20:00:38 -03

O primeiro campo é o deslocamento (0 sendo a inicialização mais recente, -1 sendo a inicialização anterior e assim por diante), seguido por um ID de inicialização (um número hexadecimal longo), seguido pelos carimbos de data e hora da primeira e da última mensagem relacionado a esse boot.

2.2 Intervalos de tempo

Para ver as mensagens registradas em uma janela de tempo específica, podemos usar as opções –since e –until. O comando a seguir mostra as mensagens do journal registradas na última hora.

$ journalctl --since "1 hour ago"

Para ver as mensagens registradas nos últimos dois dias, o comando a seguir pode ser usado.

$ journalctl --since "2 days ago"

O comando abaixo mostrará mensagens entre duas datas e horas. Todas as mensagens conectadas ou após o parâmetro since e conectadas ou antes do parâmetro until serão mostradas.

$ journalctl --since "2015-06-26 23:15:00" --until "2015-06-26 23:20:00"

Para maior precisão você pode formatar a data e a hora como “YYYY-MM-DD HH:MM:SS” (Ou seja Ano-Mês-Dia Hora:Minuto:Segundo).

2.3 Por unidade

Para ver as mensagens registradas por qualquer serviço do sistema sob o SystemD, use o parâmetro -u. O comando abaixo mostrará todas as mensagens registradas em um servidor web Nginx. Você pode usar as opções –since e –until aqui para identificar erros do servidor web que ocorrem dentro de uma janela de tempo.

$ journalctl -u nginx.service

A opção -u pode ser usada várias vezes para especificar mais de uma fonte de serviço. Por exemplo, se você deseja ver entradas de log para nginx e o mysql ao mesmo tempo, siga conforme o comando a seguir:

$ journalctl -u nginx.service -u mysql.service

2.4 Seguir, ou Tail

O Journalctl pode mostrar mensagens de log para o console à medida que são adicionadas, assim como o comando tail faz no shell do Linux. Para fazer isso, adicione o parâmetro -f:

$ journalctl -f

Por exemplo, este comando “segue” o log do serviço mysql, pegando tudo que for registrado ao vivo:

$ journalctl -u mysql.service -f

Para parar de seguir e retornar ao terminal, pressione Ctrl+C.

Assim como o comando tail, o parâmetro -n mostrará o número especificado das entradas de diário mais recentes. No comando abaixo, estamos imprimindo as últimas 50 mensagens registradas na última hora.

$ journalctl -n 50 --since "1 hour ago"

O parâmetro -r mostra as entradas do journal em ordem cronológica inversa, de modo que as mensagens mais recentes sejam impressas primeiro. O comando abaixo mostra as últimas 10 mensagens do daemon sshd, listadas em ordem inversa:

$ journalctl -u sshd.service -r -n 1

2.5 Formatos de saída

O parâmetro -o nos permite formatar a saída da consulta journalctl. -o (ou –output se estivermos usando o nome do parâmetro de formato longo) pode ter alguns valores:

  • json: vai mostrar cada entrada do journal no formato .json em uma linha longa. Isso é útil ao enviar logs para um serviço de centralização ou análise de logs.
  • json-pretty: mostrará cada entrada de log em formato json fácil de ler.
  • verbose: mostrará informações muito detalhadas para cada registro do journal com todos os campos listados.
  • cat: mostra as mensagens em formato muito curto, sem data/hora ou nomes do servidor de origem.
  • short: é o formato de saída padrão. Mostra mensagens no estilo syslog.
  • short-monotonic: é semelhante a short, mas o segundo valor de hora é mostrado com precisão. Isso pode ser útil quando você está olhando para mensagens de erro geradas de mais de uma fonte, que aparentemente estão lançando mensagens de erro ao mesmo tempo e você deseja ir para um nível granular de depuração.

Por exemplo, o comando a seguir mostrará logs do servidor web Apache no formato json-pretty.

$ journalctl -u apache2.service -r -o json-pretty

2.6 Por prioridade

Use a opção -p para filtrar mensagens com base em seu nível de prioridade.

Para ver quais níveis de prioridade estão disponíveis, consulte a Seção de configuração do Journald do Linux Logging com Systemd e o parâmetro MaxLevelStore. Se um único nível de prioridade for especificado, todas as mensagens com esse nível de prioridade e abaixo serão retornadas. Para usar vários níveis de prioridade, forneça os níveis inicial e final na forma de FROM…TO. Como exemplo, o comando abaixo produzirá todas as mensagens com prioridade entre emergência e crítica desde a última inicialização.

$ journalctl -b -1 -p "emerg".."crit"

2.7 Por usuário

Para localizar todas as mensagens relacionadas a um determinado usuário, use o UID desse usuário. No exemplo a seguir, estamos encontrando o UID do usuário mysql.

$ id mysql

Isso retorna uma linha como esta:

uid=108(mysql) gid=116(mysql) grupos=116(mysql)

E então consultando o journal para todas as mensagens registradas por esse usuário:

# journalctl _UID=108

Note que há uma underline no comando!
Isso mostra os logs gerados por processos em execução no usuário mysql.

3. Conclusão

Entender e saber utilizar o Journalctl é um grande passo pra ser um bom sysadmin, corrigir problemas diversos do sistema e/ou de aplicações. Você pode utilizar ele para depurar erros ACPI, problemas em SSD’s, corrompimento de um game WINE e etc. Principalmente erros de hardware num geral surgirão ali, como descritores USB ou ainda cabeamento SATA.

#UrbanCompassPony

Fonte: loggly

Deixe um comentário