Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Linux Enterprise Desktop / Guia de Administração / Sistema / journalctl: consultar o diário do systemd
Aplica-se a SUSE Linux Enterprise Desktop 15 SP6

21 journalctl: consultar o diário do systemd

O systemd conta com um sistema de registro em diário próprio chamado journal. Não há necessidade de executar um serviço baseado no syslog, e todos os eventos do sistema são gravados no diário.

O próprio diário é um serviço do sistema gerenciado pelo systemd. Seu nome completo é systemd-journald.service. Ele coleta e armazena dados de registro mantendo diários indexados estruturados com base nas informações de registro recebidas do kernel, de processos dos usuários, da entrada padrão e de erros de serviços do sistema. Por padrão, o serviço systemd-journald está ativado:

> sudo systemctl status systemd-journald
systemd-journald.service - Journal Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
   Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago
     Docs: man:systemd-journald.service(8)
           man:journald.conf(5)
 Main PID: 413 (systemd-journal)
   Status: "Processing requests..."
   CGroup: /system.slice/systemd-journald.service
           └─413 /usr/lib/systemd/systemd-journald
[...]

21.1 Tornando o diário persistente

Por padrão, o diário armazena os dados de registro em /run/log/journal/. Como o diretório /run/ é volátil por natureza, os dados de registro são perdidos na reinicialização. Para tornar os dados de registro persistentes, crie o diretório /var/log/journal/ e verifique se ele tem os modos de acesso e a propriedade corretos, para que o serviço systemd-journald possa armazenar os dados. Para alternar para o registro persistente, execute os seguintes comandos:

> sudo  mkdir /var/log/journal
> sudo  systemd-tmpfiles --create --prefix=/var/log/journal
> sudo  journalctl --flush

Quaisquer dados de registro armazenados em /run/log/journal/ serão descarregados em /var/log/journal/.

21.2 journalctl: switches úteis

Esta seção apresenta várias opções comuns úteis para melhorar o comportamento padrão do journalctl. Todos os switches estão descritos na página de manual do journalctl: man 1 journalctl.

Dica
Dica: Mensagens relacionadas a um executável específico

Para mostrar todas as mensagens do diário relacionadas a determinado executável, especifique o caminho completo para o executável:

> sudo journalctl /usr/lib/systemd/systemd
-f

Mostra apenas as mensagens mais recentes do diário e imprime novas entradas de registro à medida que são adicionadas ao diário.

Imprime as mensagens e pula para o fim do diário para que as entradas mais recentes fiquem visíveis no paginador.

-r

Imprime as mensagens do diário em ordem inversa para que as últimas entradas sejam listadas primeiro.

-k

Mostra apenas as mensagens do kernel. Equivale à correspondência de campo _TRANSPORT=kernel (consulte a Seção 21.3.3, “Filtrando com base nos campos”).

-u

Mostra apenas as mensagens da unidade systemd especificada. Equivale à correspondência de campo _SYSTEMD_UNIT=UNIT (consulte a Seção 21.3.3, “Filtrando com base nos campos”).

> sudo journalctl -u apache2
[...]
Jun 03 10:07:11 pinkiepie systemd[1]: Starting The Apache Webserver...
Jun 03 10:07:12 pinkiepie systemd[1]: Started The Apache Webserver.

21.3 Filtrando a saída do diário

Quando chamado sem switches, o journalctl mostra o conteúdo completo do diário, com as entradas mais antigas listadas primeiro. É possível filtrar a saída por switches e campos específicos.

21.3.1 Filtrando com base em um número de boot

O journalctl pode filtrar as mensagens com base em um boot do sistema específico. Para listar todos os boots disponíveis, execute

> sudo journalctl --list-boots
-1 097ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT
 0 156019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT

A primeira coluna lista a diferença de boot: 0 para o boot atual, -1 para o boot anterior, -2 para o boot anterior a esse etc. A segunda coluna contém o ID do boot seguido das marcações de horário de limite do boot específico.

Mostrar todas as mensagens do boot atual:

> sudo journalctl -b

Se você precisa ver as mensagens de diário do boot anterior, adicione um parâmetro de diferença. O seguinte exemplo representa as mensagens do boot anterior:

> sudo journalctl -b -1

Uma outra maneira é listar as mensagens de boot com base no ID de boot. Para esta finalidade, use o campo _BOOT_ID:

> sudo journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b

21.3.2 Filtrando com base no intervalo de tempo

É possível filtrar a saída do journalctl especificando a data de início e/ou de término. A especificação de data deve ser feita no formato 2014-06-30 9:17:16. Se a parte do horário for omitida, será considerada meia-noite. Se os segundos forem omitidos, será considerado :00. Se a parte da data for omitida, será considerado o dia atual. Em vez da expressão numérica, você pode especificar as palavras-chave yesterday, today ou tomorrow. Elas se referem à meia-noite do dia anterior ao dia atual, ao dia atual ou ao dia após o dia atual. Se você especificar now, o horário atual será indicado. É possível também especificar horários relativos com os prefixos - ou +, que se referem aos horários antes ou depois do horário atual.

Mostrar apenas novas mensagens a partir de agora e atualizar a saída continuamente:

> sudo journalctl --since "now" -f

Mostrar todas as mensagens desde meia-noite passada até às 3h20:

> sudo journalctl --since "today" --until "3:20"

21.3.3 Filtrando com base nos campos

É possível filtrar a saída do diário por campos específicos. A sintaxe de um campo para correspondência é FIELD_NAME=MATCHED_VALUE, como _SYSTEMD_UNIT=httpd.service. É possível especificar várias correspondências em uma única consulta para filtrar ainda mais as mensagens de saída. Consulte man 7 systemd.journal-fields para ver a lista de campos padrão.

Mostrar mensagens produzidas por um ID de processo específico:

> sudo journalctl _PID=1039

Mostrar mensagens que pertencem a determinado ID de usuário:

# journalctl _UID=1000

Mostrar mensagens do buffer de anel do kernel (as mesmas que o dmesg produz):

> sudo journalctl _TRANSPORT=kernel

Mostrar mensagens da saída padrão ou de erros do serviço:

> sudo journalctl _TRANSPORT=stdout

Mostrar mensagens produzidas apenas por determinado serviço:

> sudo journalctl _SYSTEMD_UNIT=avahi-daemon.service

Se dois campos diferentes forem especificados, apenas as entradas que corresponderem às duas expressões ao mesmo tempo serão mostradas:

> sudo journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488

Se duas correspondências fizerem referência ao mesmo campo, todas as entradas correspondentes a uma das expressões serão mostradas:

> sudo journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service

É possível usar o separador + para combinar duas expressões em um OR lógico. O seguinte exemplo mostra todas as mensagens do processo do serviço Avahi com ID de processo 1480 juntamente com todas as mensagens do serviço D-Bus:

> sudo journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service

21.4 Investigando erros do systemd

Esta seção apresenta um exemplo simples que ilustra como localizar e corrigir o erro relatado pelo systemd durante a inicialização do apache2.

  1. Tentar iniciar o serviço apache2:

    # systemctl start apache2
    Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.
  2. Vejamos o que diz o status do serviço:

    > sudo systemctl status apache2
    apache2.service - The Apache Webserver
       Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
       Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago
      Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \
               -k graceful-stop (code=exited, status=1/FAILURE)

    O ID do processo que causa a falha é 11026.

  3. Mostrar a versão verbosa das mensagens relacionadas ao ID de processo 11026:

    > sudo journalctl -o verbose _PID=11026
    [...]
    MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf:
    [...]
    MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module
    [...]
  4. Corrigir o erro de digitação em /etc/apache2/default-server.conf, iniciar o serviço apache2 e imprimir seu status:

    > sudo systemctl start apache2 && systemctl status apache2
    apache2.service - The Apache Webserver
       Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
       Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago
      Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND
               -k graceful-stop (code=exited, status=1/FAILURE)
     Main PID: 11263 (httpd2-prefork)
       Status: "Processing requests..."
       CGroup: /system.slice/apache2.service
               ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
               └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]

21.5 Configuração do journald

É possível ajustar o comportamento do serviço systemd-journald modificando /etc/systemd/journald.conf. Esta seção apresenta apenas as configurações de opção básicas. Para ver a descrição completa do arquivo, consulte man 5 journald.conf. É necessário reiniciar o diário para que as mudanças entrem em vigor com

> sudo systemctl restart systemd-journald

21.5.1 Mudando o limite de tamanho do diário

Se os dados do registro em diário forem gravados em um local persistente (consulte a Seção 21.1, “Tornando o diário persistente”), eles usarão até 10% do sistema de arquivos no qual o /var/log/journal reside. Por exemplo, se /var/log/journal estiver em uma partição /var de 30 GB, o diário poderá usar até 3 GB de espaço em disco. Para mudar esse limite, modifique (e remova o comentário) a opção SystemMaxUse:

SystemMaxUse=50M

21.5.2 Encaminhando o diário para /dev/ttyX

É possível encaminhar o diário para um dispositivo de terminal para você receber informações sobre mensagens do sistema na tela de terminal de sua preferência, por exemplo, /dev/tty12. Mude as seguintes opções de journald para

ForwardToConsole=yes
TTYPath=/dev/tty12

21.5.3 Encaminhando o diário para o recurso do syslog

O Journald é retroativamente compatível com as implementações tradicionais do syslog, como rsyslog. Verifique se as afirmativas a seguir são válidas:

  • O rsyslog está instalado.

    > sudo rpm -q rsyslog
    rsyslog-7.4.8-2.16.x86_64
  • O serviço rsyslog está habilitado.

    > sudo systemctl is-enabled rsyslog
    enabled
  • O encaminhamento para syslog está habilitado em /etc/systemd/journald.conf.

    ForwardToSyslog=yes

21.6 Usando o YaST para filtrar o diário do systemd

Uma forma fácil de filtrar o diário do systemd (sem ter que usar a sintaxe journalctl) é usar o módulo de diário do YaST. Após sua instalação por meio do sudo zypper in yast2-journal, inicie-o do YaST selecionando Sistema › Systemd Journal (Diário do Systemd). Se preferir, inicie-o da linha de comando digitando sudo yast2 journal.

Diário do systemd no YaST
Figura 21.1: Diário do systemd no YaST

O módulo exibe as entradas de registro em uma tabela. A caixa de pesquisa na parte superior permite procurar as entradas que incluem determinados caracteres, semelhante ao grep. Para filtrar as entradas por data e horário, unidade, arquivo ou prioridade, clique em Alterar filtro e defina as respectivas opções.

21.7 Vendo registros no GNOME

Você pode ver o diário com Registros do GNOME. Inicie-o no menu do aplicativo. Para ver as mensagens de registro do sistema, ele precisa ser executado como root, por exemplo, com xdg-su gnome-logs. Esse comando pode ser executado ao pressionar Alt F2.