Usando o journalctl para visualizar e analisar registros: um guia detalhado





Journalctl é uma excelente ferramenta para analisar logs, geralmente uma das primeiras a se familiarizar com aspirantes a administradores de Linux. Os recursos integrados de rotação, recursos avançados de filtragem e a capacidade de visualizar os logs de todos os serviços da unidade do systemd com uma ferramenta são muito convenientes e facilitam muito o trabalho dos administradores de sistema.



Este artigo cobre os principais recursos do journalctl e como ele pode ser usado. Usando o journalctl, você pode ver os logs do sistema para resolver problemas que surgiram em uma estação de trabalho ou servidor usando uma distribuição linux com o daemon de inicialização systemd, que já se tornou um padrão de fato em sistemas Linux modernos, por exemplo: RHEL, CentOS, Fedora, Debian e muitos outros.



Há uma percepção de que o systemd não é tão bom - ele carrega o sistema e ainda é um assunto de controvérsia hoje, mas não se pode negar que fornece um excelente conjunto de ferramentas para gerenciamento de sistema e solução de problemas. Imagine ter que lidar com um servidor problemático que nem mesmo inicializa, caso em que você pode inicializar a partir da distribuição ao vivo, montar a partição do sistema e olhar os logs do systemd para ver qual é o problema.



Systemd



O Systemd tem três componentes principais:



  • systemd - gerente de sistema e serviço
  • systemctl - utilitário para visualizar e gerenciar o status dos serviços
  • systemd-analyze - fornece estatísticas sobre o processo de inicialização do sistema, verifica a exatidão dos arquivos da unidade e também possui recursos de depuração do systemd




Journald



Journald é o daemon de registro do systemd. Systemd é projetado para gerenciar centralmente os registros do sistema de processos, aplicativos, etc. Todos esses eventos são gerenciados pelo daemon journald, que coleta logs de todo o sistema e os salva em arquivos binários.



Existem muitas vantagens no registro centralizado de eventos em um formato binário, por exemplo, os registros do sistema podem ser traduzidos em vários formatos, como texto simples ou JSON, se necessário. Também é muito fácil rastrear o log até um único evento usando filtros de data e hora.



Os arquivos de log do Journald podem coletar milhares de eventos e são atualizados a cada novo evento, portanto, se o seu sistema Linux estiver funcionando por tempo suficiente, o tamanho dos arquivos de log pode atingir vários gigabytes ou mais. Portanto, a análise de tais logs pode ocorrer com atrasos, neste caso, ao analisar os logs, pode-se filtrar a saída para agilizar o trabalho.



Arquivo de configuração Journald



O arquivo de configuração pode ser encontrado no seguinte caminho: /etc/systemd/journald.conf, ele contém várias configurações para o journald, eu não recomendaria alterar este arquivo a menos que você tenha certeza do que está fazendo.



O diretório com o diário journald está localizado em / run / log / journal (caso o armazenamento persistente de logs não esteja configurado, mas mais sobre isso mais tarde).

Os arquivos são armazenados em formato binário, por isso é normal visualizá-los usando cat ou nano, como muitos administradores estão acostumados, isso não funcionará.



Usando journalctl para visualizar e analisar logs



Comando básico para visualizar:



# journalctl
      
      









Ele imprimirá todas as entradas de todos os logs, incluindo erros e avisos, desde o momento em que o sistema iniciou a inicialização. As entradas de eventos mais antigas estarão no topo, as mais recentes na parte inferior, você pode usar PageUp e PageDown para se mover pela lista, Enter para rolar pelo log linha por linha e Q para sair.



Por padrão, o journalctl exibe a hora dos eventos de acordo com o fuso horário configurado em seu sistema, o journalctl também permite que você veja os logs com a hora UTC (neste padrão de tempo, os eventos são armazenados nos arquivos do journald), para isso você pode usar o comando:



# journalctl --utc

      
      





Filtrando eventos por importância



O sistema registra eventos com diferentes níveis de gravidade, alguns eventos podem ser um aviso que pode ser ignorado, alguns podem ser erros fatais. Se quisermos ver apenas os erros, ignorando outras mensagens, insira o comando indicando o código de

gravidade : # journalctl -p 0



Para níveis de gravidade , a seguinte notação é aceita:

  • 0: emergência
  • 1: alertas (alertas que requerem atenção imediata)
  • 2: crítico
  • 3: erros
  • 4: aviso
  • 5: aviso
  • 6: info (mensagens informativas)
  • 7: depuração (mensagens de depuração)




Quando você fornece um código de severidade, journalctl imprimirá todas as mensagens com aquele código de severidade e acima. Por exemplo, se especificarmos a opção -p 2, journalctl mostrará todas as mensagens com níveis 2, 1 e 0.



Configurando o armazenamento de registro



Por padrão, o journald sobrescreve seus logs a cada reinicialização e chamar o journalctl imprimirá os logs da inicialização do sistema atual.

Se você precisar configurar o salvamento permanente de logs, você precisará configurar isso separadamente, porque os desenvolvedores abandonaram o armazenamento permanente de todos os logs para não duplicar o rsyslog.



Quando o parâmetro Storage = é definido como auto) no arquivo de configuração /etc/systemd/journald.conf e o diretório / var / log / journal / não existe, o log será gravado em / run / log / journal sem salvar entre as reinicializações se / var / log / journal / existing, os logs serão salvos lá, permanentemente, mas se o diretório for removido, o systemd não irá recriá-lo automaticamente e, em vez disso, irá logar novamente em / run / systemd / journal sem salvar. O diretório pode ser recriado neste caso adicionando Storage = persistent ao journald.conf e reiniciando o systemd-journald.service (ou reinicializando).



Crie um diretório para armazenar os logs, defina os atributos necessários e reinicie o serviço:



# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
      
      





Ver logs de download



Se o journald foi configurado para armazenar os logs de forma persistente, podemos ver os logs para cada download individual, o seguinte comando irá listar os logs:



# journalctl --list-boots
      
      









O primeiro número mostra o número do registro que pode ser usado para visualizar o registro de uma sessão específica. O segundo ID de inicialização também pode ser usado para visualizar um log separado.



As próximas duas datas, o período de tempo durante o qual os logs foram gravados nele, são convenientes se você deseja localizar os logs de um determinado período.



Por exemplo, para visualizar o log do início do sistema atual, você pode usar o comando:



# journalctl -b 0
      
      





E para visualizar o log do download anterior:



# journalctl -b -1
      
      





Ver o registro por um período específico de tempo



O Journalctl permite que você use palavras como “ontem” (ontem), “hoje” (hoje), “amanhã” (amanhã) ou “agora” (agora).

Portanto, podemos usar a opção "--since" (a partir do início de qual período para exibir o log).



A partir de uma data e hora específicas:



# journalctl --since "2020-12-18 06:00:00"
      
      





De uma data específica para uma data e hora específicas:



# journalctl --since "2020-12-17" --until "2020-12-18 10:00:00
      
      





Desde ontem:



# journalctl --since yesterday
      
      





Das 9h até o momento, uma hora atrás:



# journalctl --since 09:00 --until "1 hour ago"
      
      





Visualizando mensagens do kernel



Para visualizar mensagens do kernel Linux para a inicialização atual, use o comando com a opção -k:



# journalctl -k
      
      









Visualizando os registros de um serviço ou aplicativo systemd específico



Você pode filtrar os logs de um serviço systemd específico. Por exemplo, para visualizar os registros do NetworkManager, você pode usar o seguinte comando:







# journalctl -u NetworkManager.service
      
      







Se precisar encontrar o nome do serviço, use o comando:



# systemctl list-units --type=service
      
      





Você também pode ver o log do aplicativo especificando seu arquivo executável, por exemplo, para ver todas as mensagens do nginx para hoje, podemos usar o comando:



# journalctl /usr/sbin/nginx --since today
      
      





Ou especificando um PID específico:



# journalctl _PID=1

      
      





Opções de visualização adicionais



Observe as novas mensagens (semelhante a tail -f):



# journalctl -f
      
      





Abra o registro "retrocedendo" até a última entrada:



# journalctl -e
      
      





Se houver muitos dados no diretório com os diários, a filtragem da saída de journalctl pode levar algum tempo, o processo pode ser significativamente acelerado usando a opção --file, especificando journalctl apenas o diário que precisamos monitorar:



journalctl --file /var/log/journal/e02689e50bc240f0bb545dd5940ac213/system.journal -f
      
      





Por padrão, o journalctl corta partes das linhas que não se ajustam à largura da tela, embora às vezes a quebra de linha possa ser preferível. Este recurso é controlado pela variável de ambiente SYSTEMD_LESS, que contém as opções passadas para less (o programa de paginação padrão). Por padrão, a variável é FRSXMK, se você remover a opção S, as linhas não serão truncadas.



Por exemplo:



SYSTEMD_LESS=FRXMK journalctl
      
      





Limite o tamanho do registro



Se o journald estiver configurado para salvar logs após a reinicialização, por padrão, o tamanho do diário é limitado a 10% do volume da partição do arquivo e pode ocupar no máximo 4 GB de espaço em disco.

O tamanho máximo do log pode ser ajustado removendo o comentário e editando a seguinte configuração no arquivo de configuração do journald:



SystemMaxUse=50M
      
      





Excluindo Logs



Você pode excluir arquivos de log arquivados manualmente com rm ou usando o journalctl.



Exclua os registros, deixando apenas os últimos 100 MB:



# journalctl --vacuum-size=100M
      
      





Exclua os registros, deixando apenas os registros dos últimos 7 dias:



# journalctl --vacuum-time=7d
      
      





Conclusão



O serviço de registro journald é uma ferramenta muito poderosa e flexível, e se você souber como usá-lo, ele pode tornar sua vida muito mais fácil enquanto procura as causas de problemas com o sistema ou seus serviços.










All Articles