systemd/Journal (Português)

From ArchWiki
< Systemd(Redirected from Journal do systemd)
Jump to navigation Jump to search

Veja systemd (Português) para o artigo principal.

systemd tem o seu próprio sistema de registro chamado de o journal e, portanto, a execução de uma daemon syslog não é mais necessário. Para ler o registro, utilize:

# journalctl

No Arch Linux, o diretório /var/log/journal/ faz parte do pacote systemd e o journal (quando Storage= está definido para auto em /etc/systemd/journald.conf) vai escrever para /var/log/journal/. Se você ou algum programa excluir esse diretório, systemd não vai recriá-lo automaticamente e, em vez disso,vai escrever seus logs em /run/systemd/journal em uma forma não persistente. Porém, a pasta será recriada quando você definir Storage=persistent e reiniciar systemd-journald.service (ou reinicializar o sistema).

O journal do systemd classifica mensagens por nível de prioridade e facilidade. A classificação de registro de logs corresponde ao clássico protocolo do Syslog (RFC 5424).

Nível de prioridade

Um código de severidade do syslog (em systemd chamado de prioridade) é usado para marcar a importância de uma mensagem RFC 5424 Seção 6.2.1.

Valor Severidade Palavra-chave Descrição Exemplos
0 Emergência emerg Sistema não está usável BUG de kernel severo, núcleo do systemd despejado.
Esse nível não deve ser usado por aplicativos.
1 Alerta alert Deve ser corrigido imediatamente Subsistema vital parou de funcionar. Perda de dados.
kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc.
2 Crítico crit Condições críticas Travamentos, despejos de núcleo. Como flash familiar:
systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core
Falha no aplicativo de sistema principal, como o X11.
3 Erro err Condições de erro Erro não severo relatado:
kernel: usb 1-3: 3:1: cannot get freq at ep 0x84,
systemd[1]: Failed unmounting /var.,
libvirtd[1720]: internal error: Failed to initialize a valid firewall backend.
4 Aviso warning Pode indicar que um erro vai ocorrer se uma ação não for tomada. Um sistema de arquivos não raiz tem apenas 1GB livre.
org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale.
5 Nota notice Eventos que são incomuns, mas não condições de erro. systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway. gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged.
6 Informacional info Mensagens de operação normais que exigem nenhuma ação. lvm[585]: 7 logical volume(s) in volume group "archvg" now active.
7 Depuração debug Informações úteis para desenvolvedores para depurar o aplicativo. kdeinit5[1900]: powerdevil: Scheduling inhibition from ":1.14" "firefox" with cookie 13 and reason "screen".

Se você não encontrar uma mensagem no nível de prioridade esperado, pesquise também alguns níveis acima e abaixo: essas regras são recomendações, e o desenvolvedor do aplicativo afetado pode ter uma percepção diferente da importância do problema.

Facilidade

Um código de facilidade syslog é usado para especificar o tipo de programa que está registrando a mensagem RFC 5424 Seção 6.2.1.

Código de facilidade Palavra-chave Descrição Informação
0 kern mensagens de kernel
1 user mensagens de nível de usuário
2 mail sistema de correio O POSIX arcaico ainda tem suporte e é por vezes usado (para mais mail(1))
3 daemon daemons de sistemas Todos os daemons, incluindo systemd e seus subsistemas
4 auth mensagens de segurança/autorização Também monitora a facilidade 10
5 syslog mensagens geradas internamente pelo syslogd Padronizado para syslog, não sendo usado pelo systemd (veja facilidade 3)
6 lpr subsistema de impressora de linha (subsistema arcaico)
7 news subsistema de notícias de rede (subsistema arcaico)
8 uucp subsistema UUCP (subsistema arcaico)
9 daemon de relógio systemd-timesyncd
10 authpriv mensagens de segurança/autorização Também monitora a facilidade 4
11 ftp daemon FTP
12 - subsistema NTP
13 - auditoria de log
14 - alerta de log
15 cron daemon de agendamento
16 local0 uso local 0 (local0)
17 local1 uso local 1 (local1)
18 local2 uso local 2 (local2)
19 local3 uso local 3 (local3)
20 local4 uso local 4 (local4)
21 local5 uso local 5 (local5)
22 local6 uso local 6 (local6)
23 local7 uso local 7 (local7)

Então, facilidades que é útil monitorar: 0,1,3,4,9,10,15.

Filtrando saída

journalctl permite filtrar a saída por campos específicos. Esteja ciente de que, se houver muitas mensagens para exibir ou filtrar um grande intervalo de tempo, a saída desse comando poderá ser atrasada por algum tempo.

Dica: Sendo o journal armazenado em um formato binário, o conteúdo das mensagens armazenadas não é modificado. Isso significa que ele é visível com strings, por exemplo, para recuperação em um ambiente que não tenha systemd instalado. Exemplo de comando:
$ strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal | grep -i mensagem

Exemplos:

  • Mostrar todas mensagens desta inicialização:
    # journalctl -b
    No entanto, muitas vezes, alguém está interessado em mensagens que não são da atual, mas da inicialização anterior (por exemplo, se uma falha irrecuperável de sistema ocorrer). Isso é possível através do parâmetro de deslocamento opcional da opção -b: journalctl -b -0 mostra mensagens da inicialização atual, journalctl -b -1 da inicialização anterior, journalctl -b -2 da segunda anterior e por aí vai – você pode ver a lista de inicializações com seus números usando journalctl --list-boots. Veja journalctl(1) para descrição completa, a semântica é muito mais poderosa.
  • Mostrar todas as mensagens da data (e hora opcional):
    # journalctl --since="2012-10-30 18:17:16"
  • Mostrar todas as mensagens desde 20 minutos atrás:
    # journalctl --since "20 min ago"
  • Seguir novas mensagens:
    # journalctl -f
  • Mostrar novas mensagens por um executável específico:
    # journalctl /usr/lib/systemd/systemd
  • Mostrar todas as mensagens por um processo específico:
    # journalctl _PID=1
  • Mostrar todas as mensagens por uma unit específica:
    # journalctl -u man-db.service
  • Mostrar o ring buffer do kernel:
    # journalctl -k
  • Mostrar apenas mensagens de prioridade de erro, crítico e alerta
    # journalctl -p err..alert
    Números também podem ser usados, journalctl -p 3..1. Se somente um número/uma palavra-chave usado(a), journalctl -p 3 - todos os níveis de prioridade maiores também são incluídos.
  • Mostrar equivalente a auth.log filtrando na facilidade do syslog:
    # journalctl SYSLOG_FACILITY=10
  • Se o diretório do journal (por padrão, localizado sob /var/log/journal) contém quantidade imensa de dados de log, então journalctl pode levar vários minutos filtrando a saída. Você pode acelerar significativamente usando a opção --file para forçar o journalctl a procurar apenas no journal mais recente:
    # journalctl --file /var/log/journal/*/system.journal -f

Veja journalctl(1), systemd.journal-fields(7) ou a publicação de blogue do Lennart para detalhes.

Dica: Por padrão, journalctl trunca linhas maiores que a largura da tela, mas em alguns casos pode ser melhor habilitar wrapping em vez de trucamento'. Isso pode ser controlado pela variável de ambiente SYSTEMD_LESS, que contém opções passadas ao less (o paginador padrão) e usa como padrão FRSXMK (veja less(1) e journalctl(1) para detalhes).

Ao omitir a opção S, a saída estará sob wrap em vez de truncamento. Por exemplo, inicie journalctl da seguinte forma:

$ SYSTEMD_LESS=FRXMK journalctl
Se você quiser definir esse comportamento como padrão, exporte a variável a partir de ~/.bashrc ou ~/.zshrc.

Limite no tamanho do journal

Se o journal é persistente (não volátil), seu tamanho limite é definido para um valor padrão de 10% do tamanho do respectivo sistema de arquivos, mas limitado a 4 GB. Por exemplo, com o /var/log/journal localizado em uma partição de 20 GB, o journal pode usar até 2 GB. Em uma partição de 50 GB, ela usaria no máximo até 4 GB.

O tamanho máximo do journal persistente pode ser controlado removendo o comentário e alterando o seguinte:

/etc/systemd/journald.conf
SystemMaxUse=50M

Também é possível usar o mecanismo de substituição de configuração de snippets de drop-in, em vez de editar o arquivo de configuração global. Neste caso, não esqueça de colocar as sobrescrições no cabeçalho [Journal]:

/etc/systemd/journald.conf.d/00-journal-size.conf
[Journal]
SystemMaxUse=50M

Reinicie o systemd-journald.service após alterar essa configuração para aplicar imediatamente o novo limite.

Veja journald.conf(5) para mais informações.

Limpar arquivos de journal manualmente

Os arquivos de journal podem ser removidos globalmente de /var/log/journal/ usando, por exemplo, rm ou podem ser aparados de acordo com vários critérios usando journalctl . Exemplos:

  • Remova arquivos de journal armazenados até que o espaço em disco que eles usam fique abaixo de 100 MB:
    # journalctl --vacuum-size=100M
  • Faça com que todos os arquivos de diário não contenham dados com mais de 2 semanas.
    # journalctl --vacuum-time=2weeks

Veja journalctl(1) para mais informações.

Journald em conjunto com o syslog

Compatibilidade com uma implementação clássica, sem journald, do syslog pode ser fornecida deixando o systemd encaminhar todas as mensagens pelo soquete /run/systemd/journal/syslog. Para fazer funcionar o daemon do syslog com o journal, ele tem que associar a este soquete em vez de /dev/log (anúncio oficial).

O journald.conf padrão para encaminhar para o soquete é ForwardToSyslog=no para evitar sobrecarga de sistema, porque rsyslog ou syslog-ng obtêm as mensagens do journal eles mesmo.

Veja Syslog-ng#Overview e Syslog-ng#syslog-ng and systemd journal e rsyslog, para detalhes sobre a configuração.

Encaminhar journald para /dev/tty12

Crie um diretório de drop-in[broken link: invalid section] /etc/systemd/journald.conf.d e crie um arquivo fw-tty12.conf nele:

/etc/systemd/journald.conf.d/fw-tty12.conf
[Journal]
ForwardToConsole=yes
TTYPath=/dev/tty12
MaxLevelConsole=info

Então, reinicie systemd-journald.service.

Especificar um journal diferente para ver

Pode ser necessário verificar os logs de outro sistema que esteja inativo na água, como a inicialização de um sistema ativo para recuperar um sistema de produção. Nesse caso, pode-se montar o disco em, p. ex., /mnt e especificar o caminho do journal via -D/--directory, assim:

$ journalctl -D /mnt/var/log/journal -xe