Home / Dicas e Tutoriais / Como Analisar os Logs Usando o Journalctl

Como Analisar os Logs Usando o Journalctl

Data-search-600x450Todo administrador tem como rotina checar os serviços de um servidor atrás de problemas e então realizar medidas para corrigir os problemas.

Algumas distribuições Linux usam o Rsyslog como sistema de log, e outras o Journalctl. As que usam o Systemd ao invés do init ou outro similar, trazem o utilitário Journalctl. E existe uma mudança ocorrendo que tem tornado o Systemd padrão para a maioria das distribuições e por isso trará o Journalctl junto.

Em três outros artigo recentes, eu mostro porque isso acontece e qual a vantagem de se usar o systemd e o journalctl.

Bom, então sabemos que o Journalctl é um utilitário do systemd. E ele é usado para consultar e exibir mensagens do journal. Uma vez que o journal é composto por um ou mais arquivos binários, journalctl é a maneira padrão para ler mensagens a partir dele.

Nos parágrafos seguintes, vamos ver como journalctl pode ser usado com alguns dos seus parâmetros. Cada parâmetro pode ser usado sozinho ou combinado com outros parâmetros para estreitar ainda mais o âmbito da pesquisa.

Quando executado sem parâmetros, o comando a seguir irá mostrar todas as entradas do journal, que pode ser bastante longa:

journalctl

As entradas começarão com uma flag semelhante a esta que mostra o período de tempo abrangido pelo log:

-- Logs begin at Thu 2015-06-25 00:34:38 EDT, end at Sun 2015-06-28 20:30:55 EDT. --

O journalctl vai parar depois de exibir cada tela de mensagens, e você pode pressionar PgDn ou barra de espaço para ver a próxima tela cheia. Para parar a qualquer momento, pressione q. Isso funciona como o comando less padrão em Linux. Entradas longas são mostradas conforme à largura da tela e truncado com off no final, se eles não se encaixam. A porção de corte pode ser vista usando as teclas de seta esquerda e direita.

Para obter uma lista completa de opções de journalctl, você pode visitar a página de manual do journalctl.

Mensagens de inicialização

Para ver mensagens relacionadas com o arranque da boot atual, use a opção -b:

journalctl -b

Para ver mensagens da última inicialização, use o modificador -1; para ver as mensagens de inicialização a partir de duas botas atrás, usar -2; e assim por diante. No exemplo abaixo, vamos ver mensagens do último boot e não do atual:

journalctl -b -1

Para listar os boots do sistema, use o seguinte comando:

journalctl --list-boots

Ele irá mostrar um resultado tabulado como este:

-1 ad5756178e5040d093cd74162d38000f Thu 2015-06-25 00:34:38 EDT-Sat 2015-06-27 21:41:27 EDT
 0 7fd49ca34fcf44c59806b2b6f240ae16 Sat 2015-06-27 21:41:30 EDT-Sun 2015-06-28 21:10:00 EDT

O primeiro campo é o número de inicialização (0 sendo o mais recente de inicialização, sendo o boot -1 antes dessa, e assim por diante), seguido por um ID de inicialização (um número hexadecimal longo), seguido pelos “timestamp” (registro da data e hora), da primeira e da última mensagem relacionadas a esse boot.

Intervalos de Tempo

Para ver mensagens registradas dentro de uma janela de tempo específico, podemos usar o –since e o –until. O comando a seguir mostra mensagens do journal registrados na última hora:

journalctl --since "1 hour ago"

Para ver mensagens registradas nos últimos dois dias, o seguinte comando pode ser usado:

journalctl --since "2 days ago"

O comando a seguir mostrará mensagens entre duas datas e horários. Todas as mensagens registradas desde (since) a data e hora definida e até (until) a data e hora definida:

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

Note que a data e hora precisa ser especificada no formato: “AAAA-MM-DD HH: MM: SS” (Ano, mês, dia, hora, minuto, e segundo).

Por Unidade

Para ver mensagens registradas por qualquer unidade systemd, use a opção -u. No exemplo abaixo, o comando irá mostrar todas as mensagens registradas pelo servidor web usando o programa nginx. Você pode usar o “since” e “until” e até interruptores aqui para identificar erros no servidor web que ocorreram dentro de uma janela de tempo:

journalctl -u nginx.service

A opção -u pode ser usado várias vezes para especificar mais de uma fonte de unidade. Por exemplo, se você quiser ver entradas para o nginx e mysql, o seguinte comando pode ser usado:

journalctl -u nginx.service -u mysql.service

Para executar journalctl como o comando tail Linux para que ele mostre continuamente mensagens de log, use a opção -f:

journalctl -f

Usando a opção -n irá mostrar o número especificado dos lançamentos recentes. No comando a seguir, estamos exibindo as últimas 50 mensagens registradas na última hora:

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

O parâmetro -r mostra entradas de diário em ordem cronológica inversa para que as mensagens mais recentes sejam exibidas. O comando abaixo mostra as últimas 10 mensagens do daemon sshd, listadas em ordem inversa:

journalctl -u sshd.service -r -n 1

Formatos de Saída

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

json irá mostrar cada entrada de diário no formato JSON em uma linha longa.

json-pretty irá mostrar cada entrada de log no formato JSON fácil de ler.

verbose mostrará informação muito detalhada para cada registro do journal com todos os campos listados.

cat mostra as mensagens em forma muito curta, sem quaisquer nomes de servidor data/hora ou de origem.

short é o formato de saída padrão: Mostra mensagens no estilo syslog.

short-monotonic é semelhante ao short, mas o segundo valor contém o timestamp que é mostrado com precisão. Isso pode ser útil quando você está olhando para mensagens de erro gerados a partir de mais de uma fonte que, aparentemente, está jogando mensagens de erro, ao mesmo tempo e você quer ir para o level. O comando de filtragem seguinte mostra última saída em formato JSON-pretty:

journalctl -u sshd.service -r -n 10 -o json-pretty.

A saída pode se parecer como isso:

Por Prioridade

Use a opção -p para filtrar mensagens com base em um nível de prioridade. Para ver quais níveis de prioridade estão disponíveis, consulte a seção sobre parâmetros de configuração Systemd-journald e os possíveis valores de parâmetros MaxLevelStore. Se um único nível de prioridade for especificado, todas as mensagens com esse nível de prioridade e abaixo dela serão exibidos. Para usar uma gama de níveis de prioridade, use o “FROM…TO”. Como um exemplo, o comando abaixo mostrará todas as mensagens com prioridade entre emergência e crítico do último boot:

journalctl -b -1  -p "crit"

Para localizar todas as mensagens relacionadas a um usuário específico, use o UID do usuário. No exemplo a seguir, nós estamos encontrando o UID do usuário mysql:

id mysql

Isso retorna uma linha como esta:

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

Se você estiver usando distros como o SUSE Enterprise ou o openSUSE por exemplo, poderá também checar os registros do journal usando o módulo do Yast chamado journal-systemd, ou “Entradas do Diário”, conforme imagem abaixo.

Obs. O painel de controle Yast também funciona em modo texto no terminal. Então poderia ser usado mesmo se você não possuir ambiente desktop instalado no SUSE/openSUSE.

journal4   journal1

Você poderá alterar o filtro que desejar usando o botão “Mudar Filtro…” no canto inferior esquerdo, e repare que quase todas as opções que citamos neste artigo, ou seja, o desde e até (since e until), desde o último boot, ou boot anterior, por unidade, por comando ou executáveis, e por prioridade (com uma combo-box para você definir a prioridade), são exibidas na ferramenta.

journal3

Gnome-logs

Existe também uma ferramenta do Gnome, (que não vem instalada por padrão, mas você poderá instalá-la usando o seu gerenciador de pacotes), chamada gnome-logs que mostra para você mensagens do seu journal e lhe permite pesquisar por elas. Mas esta não é tão completa, pois não lhe permite realizar filtragens, apenas possui algumas categorias. Com certeza o módulo do Yast é bem mais completo que esta, mas talvez possa ser útil para você.

gnome-logs

Conclusão

Bom, realmente o journalctl é bem legal com seus diversos filtros e a possibilidade de podermos combiná-los. Usando-o no terminal existem muito mais opções de filtros que podemos combinar.
A maioria das Distribuições Linux estão usando ou migrando para o systemd, e por isso o journalctl, então creio que é uma boa ideia nos acostumarmos a analisarmos os logs nesta ferramenta.

Outro artigo que pode ajudar a entender como gerenciar serviços do Systemd é esse abaixo:

systemctl

Aquele abraço!

Cleuber

fonte: (eu mesmo rs)
loggly.com

About Cleuber

Cleuber Silva Hashimoto. Administrador

Leave a Reply

x

Check Also

Elementary OS 6 Odin Lançado – Confira as Novidades

Desenvolver um sistema operacional não é ...