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
.
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
.
Tentar iniciar o serviço apache2:
# systemctl start apache2 Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.
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.
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 [...]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_64O serviço rsyslog está habilitado.
>
sudo
systemctl is-enabled rsyslog enabledO 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 › (Diário do Systemd). Se preferir, inicie-o da linha de comando digitando sudo yast2 journal
.
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 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.