Como usar o journalctl para ler os registros do sistema Linux

Uma janela de terminal na área de trabalho gráfica de um laptop Linux.
Fatmawati Achmad Zaenuri / Shutterstock

O registro do sistema Linux mudou com a introdução de systemd. Aprenda a usar o journalctlcomando para ler e filtrar mensagens de log do sistema.

Extração Centralizada

Conhecedor da controvérsia, o systemd sistema e o gerente de serviço introduziram uma mudança significativa na forma como os logs do sistema são coletados. Os logs costumavam estar localizados em locais diferentes no sistema de arquivos de acordo com o serviço ou daemon que os estava criando. Mas todos eles tinham uma coisa em comum. Eles eram arquivos de texto simples.

Com systemdtodo o sistema, os arquivos de log de inicialização e kernel são coletados e gerenciados por uma solução de log central e dedicada. O formato em que são armazenados é binário. Uma coisa que isso facilita é poder extrair os dados em diferentes formatos, como JSON , como veremos.

também pode facilitar a referência cruzada de informações relacionadas que teriam sido registradas anteriormente em arquivos de log separados. Como os dados agora são mantidos em um único diário, os dados de várias fontes de interesse podem ser selecionados e exibidos em uma única lista entrelaçada de entradas.

journalctl  é a ferramenta utilizada para trabalhar com a revista .

journalctl sem frescuras

Você pode invocar journalctlsem parâmetros de linha de comando:

journalctl

journalctl em uma janela de terminal

journalctlexibe o diário inteiro, com as entradas mais antigas no topo da lista. A lista é exibida no less, permitindo que você pague e pesquise usando os recursos de navegação usuais do  less. Você também pode usar as  teclas Left Arrowe Right Arrowpara rolar para os lados e ler entradas de registro extensas.

Saída de journalctl em uma janela de terminal

Pressionar a End tecla irá direto para o final da lista e as entradas de registro mais recentes.

Saída de journalctl em uma janela de terminal mostrando as entradas mais recentes

Pressione Ctrl+Cpara sair.

Embora journalctlpossa ser chamado sem usar sudo, você garantirá que verá todos os detalhes  no log se usar sudo.

sudo journalctl

sudo journalctl em uma janela de terminal

Se necessário, você pode journalctlenviar sua saída para a janela do terminal em vez de para less, usando a  --no-pageropção.

sudo journalctl --no-pager

sudo journalctl --no-pager em uma janela de terminal

A saída rola rapidamente pela janela do terminal e você retorna ao prompt de comando.

saída de sudo journalctl --no-pager em uma janela de terminal

Para limitar o número de linhas que journalctlretorna, use a -nopção (linhas). Vamos pedir dez linhas de saída:

sudo journalctl -n 10

sudo journalctl -n 10 em uma janela de terminal

Seguindo as atualizações do diário

Para journalctlexibir as entradas mais recentes à medida que chegam ao diário, use a -fopção (seguir).

sudo journalctl -f

sudo journalctl -f em uma janela de terminal

saída de sudo journalctl -f em uma janela de terminal

A entrada mais recente tem um carimbo de data / hora de 07:09:07. Conforme uma nova atividade ocorre, as novas entradas são anexadas na parte inferior da tela. Atualizações quase em tempo real – legal!

saída de sudo journalctl -f em uma janela de terminal com novas entradas

Às 07:09:59, um aplicativo chamado geek-appinjetou uma entrada de registro no diário que dizia “Nova mensagem de HTG”.

Alterar o formato de exibição

Como o diário é um arquivo binário, os dados nele precisam ser traduzidos ou analisados ​​em texto antes que possam ser exibidos para você. Com diferentes analisadores, diferentes formatos de saída podem ser criados a partir dos mesmos dados de origem binária. Existem vários formatos diferentes que journalctlpodem ser usados.

Recomendado:  Como consertar fotos tortas do iPhone automaticamente

A saída padrão é o formato curto, que é muito semelhante ao formato de log do sistema clássico. Para solicitar explicitamente o formato curto, use a -oopção (saída) com o shortmodificador.

sudo journalctl -n 10 -o short-full

sudo journalctl -n 10 -o short em uma janela de terminal

Da esquerda para a direita, os campos são:

  • A hora em que a mensagem foi criada, na hora local.
  • O nome do host.
  • O nome do processo. Este é o processo que gerou a mensagem.
  • A mensagem de log.

Para obter um carimbo de data e hora completo, use o short-fullmodificador:

sudo journalctl -n 10 -o short-full

sudo journalctl -n 10 -o short-full em uma janela de terminal

Os formatos de data e hora nesta saída são o formato no qual você precisa fornecer datas e horas ao selecionar mensagens de log por período, como veremos em breve.

Para ver todos os metadados que acompanham cada mensagem de log, use o verbosemodificador.

sudo journalctl -n 10 -o verboso

sudo journalctl -n 10 -o verbose em uma janela de terminal

Existem muitos campos possíveis , mas é raro que todos os campos estejam presentes em uma mensagem.

Saída de sudo journalctl -n 10 -o verbose em uma janela de terminal

Um campo que vale a pena discutir é o Prioritycampo. Neste exemplo, ele tem o valor 6. O valor representa a importância da mensagem:

  • 0 : Emergência. O sistema está inutilizável.
  • 1 : Alerta. Foi sinalizada uma condição que deve ser corrigida imediatamente.
  • 2 : Crítico. Isso cobre travamentos, descargas e falhas significativas em aplicativos primários.
  • 3 : Erro. Um erro foi relatado, mas não é considerado grave.
  • 4 : Aviso. Chama a atenção para uma condição que, se ignorada, pode se tornar um erro.
  • 5 : Observe. Usado para relatar eventos incomuns, mas não erros.
  • 6 : Informações. Mensagens operacionais regulares. Isso não requer ação.
  • 7 : Depurar. Mensagens colocadas em aplicativos para facilitar a depuração deles.

Se você quiser que a saída seja apresentada como objetos JavaScript Object Notation (JSON) formados corretamente , use o jsonmodificador:

sudo journalctl -n 10 -o json

sudo journalctl -n 10 -o json em uma janela de terminal

Cada mensagem é devidamente agrupada como um objeto JSON bem formado e exibida uma mensagem por linha de saída.

Para ter a saída JSON bem impressa , use o json-prettymodificador.

sudo journalctl -n 10 -o json-pretty

sudo journalctl -n 10 -o json-pretty em uma janela de terminal

Cada objeto JSON é dividido em várias linhas, com cada par nome-valor em uma nova linha.

saída de sudo journalctl -n 10 -o json-pretty em uma janela de terminal

Para ver apenas as mensagens de entrada de registro, sem carimbos de data / hora ou outros metadados, use o catmodificador:

sudo journalctl -n 10 -o cat

sudo journalctl -n 10 -o cat em uma janela de terminal

Esse formato de exibição pode dificultar a identificação de qual processo gerou o evento de log, embora algumas mensagens contenham uma pista.

Saída de sudo journalctl -n 10 -o cat em uma janela de terminal

Seleção de mensagens de registro por período de tempo

Para limitar a saída journalctla um período de tempo do seu interesse, use as  opções -S (desde) e -U(até).

Para ver as entradas de registro desde uma determinada hora e data, use este comando:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S "2020-91-12 07:00:00" em uma janela de terminal

O display contém apenas mensagens que chegaram após a data e hora do comando.

Saída de sudo journalctl -S "2020-91-12 07:00:00" em uma janela de terminal

Para definir um período de tempo que você deseja relatar, use as opções -S(desde) e -U(até) juntas. Este comando analisa as mensagens de log de um período de 15 minutos:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00" em uma janela de terminal

Essa é uma ótima combinação de uso se você souber que algo estranho aconteceu em seu sistema, e mais ou menos quando aconteceu.

saída de sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00" em uma janela de terminal

Usando períodos de tempo relativos

Você pode usar o endereçamento relativo ao selecionar seus períodos de tempo. Isso significa que você pode dizer coisas como “mostre-me todos os eventos de um dia atrás até agora”. Isso é exatamente o que este comando significa. O “d” significa “dia” e o “-1” significa um dia no passado.

sudo journalctl -S -1d

sudo journalctl -S -1d em uma janela de terminal

As mensagens de registro são listadas de 00:00:00 de ontem até “agora”.

Recomendado:  Como adicionar o Dropbox (ou outros serviços em nuvem) ao menu Enviar para no Windows

Saída de sudo journalctl -S -1d em uma janela de terminal

Se você deseja investigar algo que aconteceu no passado recente, pode especificar um período de tempo relativo medido em horas. Aqui, estamos revisando as mensagens de registro da última hora:

sudo journalctl -S -1h

sudo journalctl -S -1h em uma janela de terminal

As mensagens da última hora são exibidas para você. Você também pode usar “m” para definir períodos de tempo relativos medidos em minutos e “w” para semanas.

Saída de sudo journalctl -S -1h em uma janela de terminal

journalctlentende today, yesterdaye tomorrow. Esses modificadores fornecem uma maneira prática de especificar períodos de tempo comuns. Para ver todos os eventos que aconteceram ontem, use este comando:

sudo journalctl -S ontem

sudo journalctl - S ontem em uma janela de terminal

Todos os eventos de registro de diário que aconteceram ontem, até meia-noite 00:00:00, são recuperados e exibidos para você.

Saída de sudo journalctl - S ontem em uma janela de terminal

Para ver todas as mensagens de registro recebidas hoje até agora, use este comando:

sudo journalctl -S today

sudo journalctl -S hoje em uma janela de terminal

Tudo a partir de 00:00:00 até o momento em que o comando é emitido, são exibidos.

Saída de sudo journalctl -S hoje em uma janela de terminal

Você pode misturar os diferentes modificadores de período de tempo. Para ver tudo de dois dias atrás até o início de hoje, use este comando:

sudo journalctl -S -2d -U hoje

sudo journalctl -S -2d -U hoje em uma janela de terminal

Tudo, desde anteontem até hoje, é recuperado e exibido.

Saída de sudo journalctl -S -2d -U hoje em uma janela de terminal

Seleção de mensagens de registro por campos de dados

Você pode pesquisar mensagens de log que correspondam a uma ampla variedade de campos do diário . Essas pesquisas tentam encontrar correspondências nos metadados anexados a cada mensagem. É recomendável consultar a lista de campos e escolher aqueles que serão mais úteis para você.

Tenha em mente que se um aplicativo preenche todos os campos ou não, depende inteiramente dos autores do aplicativo. Você não pode garantir que todos os campos serão preenchidos.

Todos os modificadores de campo de diário são usados ​​da mesma maneira. Usaremos alguns em nossos exemplos abaixo. Para procurar mensagens de log de um aplicativo específico, use o _COMMmodificador (comando). Se você também usar a -fopção (seguir), journalctlrastreará novas mensagens deste aplicativo conforme elas chegam.

sudo journalctl -f _COMM = geek-app

sudo journalctl -f _COMM = geek-app em uma janela de terminal

Você pode pesquisar por entradas de log usando o  ID de processo do processo que gerou a mensagem de log. Use o pscomando para encontrar a id do processo do daemon ou aplicativo que você vai procurar .

sudo journalctl _PID = 751

sudo journalctl _PID = 751 em uma janela de terminal

Na máquina usada para pesquisar este artigo, o daemon SSH é o processo 751.

saída de sudo journalctl _PID = 751 em uma janela de terminal

Você também pode pesquisar por ID de usuário . Este é o ID do usuário para a pessoa que iniciou o aplicativo ou comando, ou que possui o processo.

sudo journalctl _UID = 1000

sudo journalctl _UID = 1000 em uma janela de terminal

Todas as mensagens associadas a qualquer outro ID de usuário são filtradas. Apenas mensagens relacionadas ao usuário 1000 são mostradas:

saída de sudo journalctl _UID = 1000 em uma janela de terminal

Outra forma de pesquisar mensagens de log relacionadas a um aplicativo específico é fornecer o caminho para o executável.

sudo journalctl / usr / bin / anacron

sudo journalctl / usr / bin / anacron em uma janela de terminal

Todas as anacron mensagens de log do  planejador são recuperadas e exibidas .

Saída de sudo journalctl / usr / bin / anacron em uma janela de terminal

Para facilitar a pesquisa, podemos pedir journalctlpara listar todos os valores que contém, para qualquer um dos campos do diário.

Para ver os IDs do usuário que journalctlpossuem mensagens de log registradas, use a -Fopção (campos) e passe o _UIDidentificador do campo.

journalctl -F _UID

journalctl -F _UID em uma janela de terminal

Vamos fazer isso de novo e olhar para os IDs de grupo (GIDs):

journalctl -F _GID

journalctl -F _GID em uma janela de terminal

Você pode fazer isso com qualquer um dos identificadores de campo do diário .

Recomendado:  O que são esportes e por que as pessoas os assistem?

Listando Mensagens do Kernel

Existe uma maneira embutida de isolar as mensagens do kernel rapidamente. Você não precisa pesquisar e isolá-los. A -kopção (kernel) remove todas as outras mensagens e oferece uma visão instantânea das entradas de log do kernel.

sudo journalctl -k

sudo journalctl -k em uma janela de terminal

O destaque reflete a importância da mensagem, de acordo com os valores do Prioritycampo.

Saída de sudo journalctl -k em uma janela de terminal

Revisão de mensagens de inicialização

Se você tem um problema relacionado à inicialização que deseja investigar, journalctlcobre isso. Talvez você tenha adicionado um novo hardware e ele não esteja respondendo ou um componente de hardware que funcionava anteriormente não funcione mais após a última atualização do sistema.

Para ver as entradas de registro relacionadas à sua última inicialização, use a -bopção (inicialização):

journalctl -b

journalctl -b em uma janela de terminal

As entradas de log da última inicialização são mostradas para você.

Saída de journalctl -b em uma janela de terminal

Quando dizemos “última inicialização”, queremos dizer o processo de inicialização que deu vida ao seu computador para a sua sessão de login atual. Para ver as inicializações anteriores, você pode usar um número para dizer em journalctlqual inicialização você está interessado. Para ver a terceira inicialização anterior, use este comando:

journalctl -b 3

Saída de journalctl -b 3 em uma janela de terminal

Geralmente, se você teve um problema e teve que reinicializar sua máquina, você está interessado em uma sequência de inicialização anterior. Portanto, este é um formulário de comando comum.

Saída de journalctl -b 3 em uma janela de terminal

É fácil se confundir com a sequência de botas. Para ajudar, podemos pedir journalctlpara listar as botas que tem gravado em seu diário, usando a --list-bootsopção.

journalctl --list-boots

journalctl --list-inicializa em uma janela de terminal

Você pode identificar a inicialização para a qual deseja ver mensagens a partir do carimbo de data e hora e, em seguida, usar o número na coluna da esquerda para obter as mensagens de log dessa sequência de inicialização. Você também pode escolher o identificador de inicialização de 32 bits e passá-lo para journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7 em uma janela de terminal

As mensagens de log da sequência de inicialização solicitada são recuperadas e exibidas.

saída de sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7 em uma janela de terminal

Gerenciando o espaço do disco rígido do Journal

Obviamente, o diário e todas as suas mensagens de log são armazenados no disco rígido. Isso significa que eles ocuparão espaço no disco rígido. Para ver quanto espaço foi ocupado pelo diário, use a --disk-usageopção.

journalctl --disk-usage

journalctl --disk-usage em uma janela de terminal

Com os discos rígidos de hoje, 152 MB não é muito espaço, mas para fins de demonstração, ainda vamos reduzi-lo. Há duas maneiras de fazermos isso. A primeira é definir um limite de tamanho para o qual você deseja que o diário seja reduzido novamente. Ele crescerá novamente, é claro, mas podemos podá-lo agora, prontos para esse novo crescimento.

Usaremos a --vacuum-sizeopção com um título maravilhoso e passaremos o tamanho para o qual gostaríamos que o diário fosse reduzido. Pediremos 100 MB. A maneira de pensar sobre isso é que estamos pedindo journalctl“jogue fora tudo o que puder, mas não vá abaixo de 100 MB”.

journalctl --vacuum-size = 100M

journalctl --vacuum-size = 100M em uma janela de terminal

A outra maneira de reduzir o tamanho do diário é usar a --vacuum-timeopção. Esta opção informa journalctlpara descartar as mensagens mais antigas do que o período fornecido na linha de comando. Você pode usar days, weeks, months, e years no período de tempo.

Vamos eliminar todas as mensagens com mais de uma semana:

journalctl --vacuum-time = 1weeks

journalctl --vacuum-time = 1 semanas em uma janela de terminal

Dados vs. Informação

Os dados não são úteis, a menos que você possa acessá-los e usá-los. Então, torna-se uma informação útil. O journalctlcomando é uma ferramenta flexível e sofisticada que permite obter as informações de seu interesse de várias maneiras.

Você pode usar praticamente qualquer fragmento de informação de que precisa para localizar as mensagens de log de que precisa.