Como usar journalctl para ler logs do sistema Linux
O log do sistema Linux mudou com a introdução do systemd
. Aprenda a usar o comando journalctl
para ler e filtrar mensagens de log do sistema.
Registro centralizado
Não estranho à controvérsia, o sistema systemd
e o gerenciador de serviços introduziram uma mudança significativa na forma como os registros do sistema são coletados. Logs costumavam estar localizados em lugares 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 o systemd
, todos os arquivos de log do sistema, inicialização e kernel são coletados e gerenciados por uma solução de log central e dedicada. O formato em que eles 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 usada para trabalhar com o diário.
jornalctl Sem frescuras
Você pode invocar journalctl
sem parâmetros de linha de comando:
journalctl
journalctl
exibe o diário inteiro, com as entradas mais antigas no topo da lista. A lista é exibida em less
, permitindo que você navegue e pesquise usando os recursos de navegação usuais de less
. Você também pode usar as teclas Seta para a esquerda
e Seta para a direita
para rolar lateralmente para ler entradas de registro amplas.
Pressionar a tecla End
vai direto para o final da lista e as entradas de registro mais recentes.
Pressione Ctrl+C
para sair.
Embora journalctl
possa ser chamado sem usar sudo
, você garantirá que verá todos os detalhes dentro do log se usar sudo
.
sudo journalctl
Se necessário, você pode fazer journalctl
enviar sua saída para a janela do terminal em vez de para less
, usando o --no-pager
opção.
sudo journalctl --no-pager
A saída rola rapidamente pela janela do terminal e você retorna ao prompt de comando.
Para limitar o número de linhas que journalctl
retorna, use a opção -n
(linhas). Vamos pedir dez linhas de saída:
sudo journalctl -n 10
Seguindo as atualizações do diário
Para fazer com que journalctl
exiba as entradas mais recentes à medida que chegam ao diário, use a opção -f
(seguir).
sudo journalctl -f
A entrada mais recente tem um timestamp de 07:09:07. À medida que uma nova atividade ocorre, as novas entradas são anexadas à parte inferior da tela. Atualizações quase em tempo real — legal!
Às 07:09:59, um aplicativo chamado geek-app
injetou uma entrada de log no diário que dizia: “Nova mensagem do HTG”.
Alterando o formato de exibição
Como o diário é um arquivo binário, os dados contidos nele precisam ser traduzidos ou analisados em texto antes de serem 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 journalctl
pode usar.
A saída padrão é o formato curto, que é muito semelhante ao formato clássico de log do sistema. Para solicitar explicitamente o formato curto, use a opção -o
(saída) com o modificador short
.
sudo journalctl -n 10 -o short-full
Da esquerda para a direita, os campos são:
- A hora em que a mensagem foi criada, no horário local.
- O nome do host.
- O nome do processo. Este é o processo que gerou a mensagem.
- A mensagem de registro.
Para obter um carimbo de data e hora completo, use o modificador short-full
:
sudo journalctl -n 10 -o short-full
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 modificador verbose
.
sudo journalctl -n 10 -o verbose
Existem muitos campos possíveis, mas é raro que todos os campos estejam presentes em uma mensagem.
Um campo que vale a pena discutir é o campo Priority
. Neste exemplo, tem um valor de 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, coredumps e falhas significativas em aplicativos primários.
- 3: Erro. Um erro foi relatado, mas não é considerado grave.
- 4: Aviso. Chama sua atenção para uma condição que, se ignorada, pode se tornar um erro.
- 5: Aviso. Usado para relatar eventos incomuns, mas não erros.
- 6: Informação. Mensagens operacionais regulares. Estes não requerem ação.
- 7: Depurar. Mensagens colocadas em aplicativos para facilitar a depuração.
Se você deseja que a saída seja apresentada como objetos JavaScript Object Notation (JSON) devidamente formados, use o modificador json
:
sudo journalctl -n 10 -o json
Cada mensagem é agrupada corretamente 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 modificador json-pretty
.
sudo journalctl -n 10 -o json-pretty
Cada objeto JSON é dividido em várias linhas, com cada par nome-valor em uma nova linha.
Para ver apenas as mensagens de entrada de log, sem carimbos de data/hora ou outros metadados, use o modificador cat
:
sudo journalctl -n 10 -o cat
Esse formato de exibição pode dificultar a identificação de qual processo gerou o evento de log, embora algumas mensagens contenham uma pista.
Seleção de mensagens de log por período de tempo
Para limitar a saída de journalctl
a um período de seu interesse, use -S
(desde) e -U
(até) opções.
Para ver as entradas de log desde uma determinada hora e data, use este comando:
sudo journalctl -S "2020-91-12 07:00:00"
A exibição contém apenas as mensagens que chegaram após a data e hora no comando.
Para definir um período de tempo que você deseja relatar, use as opções -S
(desde) e -U
(até) juntas. Este comando examina 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"
Este é um ótimo uso de combinação se você souber que algo estranho aconteceu em seu sistema e aproximadamente quando isso aconteceu.
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 esse comando significa. O “d” significa “dia” e o “-1” significa um dia no passado.
sudo journalctl -S -1d
As mensagens de log são listadas de 00:00:00 de ontem até agora.
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 log da última hora:
sudo journalctl -S -1h
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.
journalctl
entende hoje
, ontem
e amanhã
. 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 yesterday
Todos os eventos de log do diário ocorridos ontem, até meia-noite 00:00:00, são recuperados e exibidos para você.
Para ver todas as mensagens de log recebidas hoje até agora, use este comando:
sudo journalctl -S today
Tudo, desde 00:00:00 até a hora em que o comando é emitido, são exibidos.
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 today
Tudo desde anteontem até hoje é recuperado e exibido.
Seleção de mensagens de log por campos de dados
Você pode pesquisar mensagens de log que correspondam a uma ampla variedade de campos de diário. Essas pesquisas tentam encontrar correspondências nos metadados anexados a cada mensagem. Recomenda-se que consulte a lista de campos e escolha os que lhe serão mais úteis.
Lembre-se de que o preenchimento ou não de todos os campos de um aplicativo depende inteiramente dos autores do aplicativo. Você não pode garantir que todos os campos serão preenchidos.
Todos os modificadores de campo do 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 modificador _COMM
(comando). Se você também usar a opção -f
(seguir), journalctl
rastreará novas mensagens deste aplicativo conforme elas chegarem.
sudo journalctl -f _COMM=geek-app
Você pode pesquisar entradas de registro usando o ID do processo que gerou a mensagem de registro. Use o comando ps
para encontrar o ID do processo do daemon ou aplicativo que você vai procurar.
sudo journalctl _PID=751
Na máquina usada para pesquisar este artigo, o daemon SSH é o processo 751.
Você também pode pesquisar por ID de usuário. Este é o ID do usuário da pessoa que ativou o aplicativo ou comando ou que possui o processo.
sudo journalctl _UID=1000
Todas as mensagens associadas a qualquer outro ID de usuário são filtradas. Apenas as mensagens relacionadas ao usuário 1000 são mostradas:
Outra maneira de procurar mensagens de log relacionadas a um aplicativo específico é fornecer o caminho para o executável.
sudo journalctl /usr/bin/anacron
Todas as mensagens de registro do agendador anacron
são recuperadas e exibidas.
Para facilitar a busca, podemos pedir a journalctl
para listar todos os valores que contém, para qualquer um dos campos do jornal.
Para ver os IDs de usuário para os quais journalctl
registrou mensagens de log, use a opção -F
(campos) e passe o identificador de campo _UID
.
journalctl -F _UID
Vamos fazer isso novamente e olhar para os IDs de grupo (GID's):
journalctl -F _GID
Você pode fazer isso com qualquer um dos identificadores de campo do diário.
Listando Mensagens do Kernel
Existe uma maneira integrada de isolar as mensagens do kernel rapidamente. Você não precisa procurá-los e isolá-los sozinho. A opção -k
(kernel) remove todas as outras mensagens e oferece uma visualização instantânea das entradas de log do kernel.
sudo journalctl -k
O destaque reflete a importância da mensagem, de acordo com os valores do campo Priority
.
Revendo mensagens de inicialização
Se você tiver um problema relacionado à inicialização que deseja investigar, journalctl
o ajudará. Talvez você tenha adicionado um novo hardware e ele não esteja respondendo, ou um componente de hardware que funcionava anteriormente não funciona mais após a última atualização do sistema.
Para ver as entradas de log relacionadas à sua última inicialização, use a opção -b
(boot):
journalctl -b
As entradas de log para a última inicialização são mostradas para você.
Quando dizemos “última inicialização”, queremos dizer o processo de inicialização que deu vida ao seu computador para sua sessão de login atual. Para ver as inicializações anteriores, você pode usar um número para informar journalctl
em qual inicialização você está interessado. Para ver a terceira inicialização anterior, use este comando:
journalctl -b 3
Geralmente, se você teve um problema e precisou reiniciar sua máquina, é uma sequência de inicialização anterior que lhe interessa. Portanto, este é um formulário de comando comum.
É fácil se confundir com a sequência das botas. Para ajudar, podemos pedir ao journalctl
para listar as botas que ele registrou em seu diário, usando a opção --list-boots
.
journalctl --list-boots
Você pode identificar a inicialização para a qual deseja ver as 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 para essa 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
As mensagens de log da sequência de inicialização que solicitamos são recuperadas e exibidas.
Gerenciando o espaço no disco rígido do diário
Obviamente, o diário e todas as suas mensagens de log são armazenadas em seu 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 opção --disk-usage
.
journalctl --disk-usage
Com os discos rígidos de hoje, 152 MB não é muito espaço, mas para fins de demonstração, ainda o reduziremos. Há duas maneiras de fazer isso. A primeira é definir um limite de tamanho para o qual você deseja reduzir o diário. Ele crescerá novamente, é claro, mas podemos podá-lo agora, pronto para esse novo crescimento.
Usaremos a opção maravilhosamente intitulada --vacuum-size
e passaremos o tamanho para o qual gostaríamos que o diário fosse reduzido. Pedimos 100 MB. A maneira de pensar sobre isso é que estamos pedindo ao journalctl
para “jogar fora o que puder, mas não diminua para menos de 100 MB”.
journalctl --vacuum-size=100M
A outra maneira de reduzir o tamanho do diário é usar a opção --vacuum-time
. Esta opção diz ao journalctl
para descartar as mensagens que são mais antigas do que o ponto que você forneceu na linha de comando. Você pode usar dias
, semanas
, meses
e anos
no período de tempo.
Vamos eliminar todas as mensagens com mais de uma semana:
journalctl --vacuum-time=1weeks
Dados x Informações
Os dados não são úteis a menos que você possa obtê-los e usá-los. Em seguida, torna-se informação útil. O comando journalctl
é uma ferramenta flexível e sofisticada que permite obter informações de interesse de várias maneiras.
Você pode usar praticamente qualquer fragmento de informação que tenha para se concentrar nas mensagens de log de que precisa.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts