Como usar o comando journalctl para analisar logs no Linux
Guia para iniciantes no uso de comandos journalctl para visualizar, filtrar e analisar logs de diário no Linux.
systemd é o padrão na maioria das principais distribuições Linux. Uma das principais características do systemd é a forma como ele coleta logs e as ferramentas que fornece para analisá-los.
No sistema SysVinit tradicional, você tem syslog que armazena logs em arquivos de texto simples. Ler e analisar esses arquivos requer o uso de find, grep, cut e muitos outros comandos.
O systemd coleta logs de mais fontes do que syslogs, mantém os logs do diário em formato binário e fornece uma ferramenta de linha de comando para ler, analisar e manipular os logs. Isso é mais simplificado que os syslogs.
O que é diário? O que é jornalctl?
journald é o daemon do systemd que coleta os logs de várias fontes de log, como syslog.
journalctl é a ferramenta de linha de comando que permite interagir com os logs do diário.
Com o journalctl, você pode ler logs, monitorar os logs em tempo real, filtrar os logs com base em tempo, serviço, gravidade e outros parâmetros.
Neste tutorial, mostrarei como usar o journalctl para ler, monitorar e analisar os logs no Linux.
Verifique se os logs de diário estão habilitados em seu sistema
Algumas distribuições Linux, especialmente as desktop, não habilitam os logs de diário por padrão.
O local padrão dos logs do journald é o diretório /var/log/journal
. Você deve certificar-se de que este diretório existe. Se não, crie você mesmo.
Em seguida, no arquivo /etc/systemd/journald.conf certifique-se de que o valor Storage
esteja definido como auto
ou persistent
.
O arquivo journald.conf mostra os valores padrão. Portanto, mesmo que haja um # na frente das entradas, significa que essas são as configurações padrão usadas. Se você quiser alterar alguma coisa, remova o # dessa linha.
Usando comandos do journalctl
Deixe-me mostrar alguns dos exemplos mais básicos, porém úteis, do comando journalctl.
Leia e pesquise logs com journalctl
Se você apenas digitar journalctl
no terminal, os logs do diário serão exibidos em ordem cronológica.
journalctl
journalctl usa less
abaixo para mostrar os logs. O que significa que você pode usar as mesmas teclas para mover os logs como faz com o comando less.
Se você não se lembra disso, aqui vai um rápido lembrete:
- Arrow
Mover por uma linha
- Space
Descer uma página
- b
Subir uma página
- g
Vá para a primeira linha
- G
Vá para a última linha
- 100g
Vá para a centésima linha
- /string
Procure a string da posição atual
- n/N
-
Ir para a correspondência de pesquisa seguinte ou anterior
- q
Saia dos registros
Se você não deseja que os logs sejam exibidos em um modo de visualização menos semelhante, você pode usar o sinalizador --no-pager
. Isso exibirá logs inteiros diretamente na tela.
journalctl --no-pager
Isso não é muito útil e inundará sua tela se você tiver uma grande quantidade de logs.
Mostrar registros em ordem cronológica inversa
Como você percebeu, os logs são mostrados em ordem cronológica. Isso significa que os registros armazenados mais antigos são exibidos primeiro.
Se quiser ver os logs recentes primeiro, você pode exibir os logs do diário na ordem inversa com a opção -r
:
journalctl -r
Ele ainda usa um comando menos como view. Então, pressione q
para sair do modo de visualização de log.
Exibir apenas N linhas recentes de registros de diário
Em vez de mostrar todos os logs, você pode optar por exibir apenas um certo número de linhas do log usando a opção -n
.
Por exemplo, o comando abaixo exibirá as 25 linhas mais recentes dos logs:
journalctl -n 25
Mostrar registros do diário em tempo real
Visualizar logs recentes é uma coisa, se você quiser ver os logs em tempo real, você pode usar a opção -f
do comando journalctl:
journalctl -f
Assim como a opção -f do comando tail, isso exibirá os logs em tempo real no modo follow.
Use o comando Ctrl+C para sair da visualização em tempo real.
Exibir logs no horário UTC
Por padrão, os logs do diário são mostrados na hora local do seu sistema. Se a hora do seu sistema estiver definida para um horário diferente de UTC e você quiser ver os logs em UTC, você pode fazer isso usando o sinalizador --utc
.
journalctl --utc
Mostrar apenas mensagens do kernel com -k
O diário do systemd acumula logs de diferentes fontes. Se você quiser apenas ver os logs do kernel Linux, você pode usar a opção -k
.
journalctl -k
Dica: use sudo para ver todos os registros do diário
O Systemd protege que tipo de log mostrar para qual usuário.
Pode mostrar alguns logs, mas não todos os logs se você for um usuário regular:
abhishek@linux-console:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --
Se quiser acessar todos os logs, você deve usar sudo se for um usuário sudo:
sudo journalctl -u ssh
Mostrar mensagens de uma sessão de inicialização específica
Este é um excelente recurso do jounrald. O comando journalctl permite acessar logs pertencentes a uma sessão de inicialização específica usando a opção -b
.
Você pode listar todas as sessões de inicialização com o sinalizador --list-boots
.
journalctl --list-boots
A saída mostrará as sessões de inicialização com o tempo de inicialização e um número inteiro atribuído às sessões de inicialização:
-5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
-4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
-3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
-2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
-1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST
A sessão de inicialização 0 são as sessões de inicialização atuais. Sessão de inicialização -1 é a última sessão inicializada e assim por diante.
journalctl -b -2
Imagine tentar fazer isso no antigo sistema syslog!
Você não pode apenas obter os logs de inicialização como os que você vê em /var/log/boot.log
. No entanto, os logs de inicialização estarão sempre no início dos logs se você estiver na visualização da sessão de inicialização.
Filtrar logs de diário para um serviço systemd específico
A filtragem é um ponto forte dos logs de diário. Você pode filtrar logs com base nos serviços do systemd.
journalctl -u service_name
Por exemplo, se quiser ver os logs gerados por SSH, você pode usá-lo assim:
journalctl -u ssh
Você precisará saber o nome do serviço systemd, é claro.
Filtrar logs por um determinado intervalo de tempo
Este é outro exemplo da capacidade de filtragem de strings dos logs do diário. Você pode filtrar logs por um determinado período de tempo e há várias maneiras de fazer isso.
Você pode usar linguagem natural para filtrar os logs. Termos como ontem, hoje e amanhã são reconhecidos.
journalctl --since=yesterday --until=now
Você também pode especificar a combinação de data ou hora:
journalctl --since "2020-07-10"
Você também pode especificar um período de tempo com as datas e horas:
journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"
O horário começa às 00:00:00 e determina o dia e a data.
Você também pode usar um tempo relativo como -1h20min para especificar 1 hora e 20 minutos no passado.
Filtrar logs com base em UID, GID e PID
Se você estiver depurando um problema, poderá verificar os logs de um determinado processo usando seu PID.
Os logs do diário também podem ser filtrados por ID do usuário (UID), ID do grupo (GID) e ID do processo (PID). Abaixo está um exemplo:
journalctl _PID=1234
Dica: Combine mais de uma opção para uma visualização de registro mais personalizada
Você pode combinar várias opções para visualizar os logs desejados.
Por exemplo, se quiser ver apenas os logs SSH de ontem em carimbos de data/hora UTC, você pode usar:
sudo journalctl -u ssh --since=yesterday --utc
Outro uso comum é filtrar logs com base em sessões de inicialização. Se quiser ver apenas os logs SSH na sessão atual, você pode usar:
sudo journalctl -u ssh -b0
As possibilidades são infinitas e você pode combinar as opções de acordo com sua necessidade.
Usando journalctl -xe para visualizar os últimos logs
Freqüentemente, você encontrará pessoas sugerindo o uso do comando journalctl -xe
.
-e
: vai para o final dos logs do diário-x
: Mostra informações extras nas entradas de log (se disponíveis)
Algumas entradas de log possuem informações adicionais que não são exibidas na visualização normal do log. Usar a opção -x
pode exibir tais informações.
O que você vê como uma única linha como esta:
Jul 09 16:33:40 linux-console systemd[1]: Started Run anacron jobs.
Poderia exibir mais informações como esta:
Jul 09 16:33:40 linux-console systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit anacron.service has finished successfully.
--
-- The job identifier is 3702.
As informações adicionais ajudam a explicar o contexto de um erro ou evento de log e as possíveis soluções.
Mostrar apenas erros em logs com journalctl
Para mostrar todos os erros na sessão atual, você pode usar:
journalctl -p 3 -xb
-p 3: filtra logs para prioridade 3 (que é erro)
-x: fornece informações adicionais sobre o log (se disponível)
b: desde a última inicialização (que é a sessão atual)
Você também pode usar outro nível de prioridade para obter logs de depuração, aviso ou até mesmo de nível crítico. Esta tabela lista todos os níveis de prioridade.
- 0
emergir
- 1
alerta
- 2
crítico
- 3
errar
- 4
aviso
- 5
perceber
- 6
informações
- 7
depurar
Você também pode exibir logs para uma faixa de gravidade. Por exemplo, se quiser ver todos os logs de avisos, avisos e informações da sessão atual, você pode usar:
journalctl -p 4..6 -b0
Você também poderia ter usado warning..info
no comando acima em vez de 4..6
.
Verifique quanto espaço em disco os logs estão ocupando
O diário coleta logs de várias fontes e armazena logs de vários níveis, incluindo logs de depuração. Acredite em mim, embora a retenção de logs ajude na análise e auditoria, eles podem ocupar uma quantidade considerável de espaço em disco.
Você pode verificar quanto espaço em disco os logs do diário estão ocupando com este comando journalctl:
journalctl --disk-usage
Você pode ter uma surpresa (ou um choque) ao ver o resultado:
abhishek@linux-console:~$ journalctl --disk-usage
Archived and active journals take up 2.8G in the file system.
2,8 GB? Isso é muito. Você pode querer limpar os logs do diário.
Aproveite a análise de log com o comando journalctl
Existem muito mais opções e uso do comando journalctl e não posso cobrir todas elas. Eu recomendo a leitura de sua página de manual se você quiser mais detalhes sobre ela.
Acredito que lhe dei o suficiente para usar o comando journalctl para análise regular de log. Espero que gostem deste tutorial detalhado sobre o Journald.
Se você tiver sugestões ou dúvidas, não hesite em deixar um comentário.