Como exibir mensagens de log de inicializações anteriores no CentOS 7?

78

A execução journalctlem um sistema CentOS 7 apenas imprime as mensagens geradas após a última inicialização.

O comando

# journalctl --boot=-1

impressões

Failed to look up boot -1: Cannot assign requested address

e sai com o status 1.

Comparando-o com um sistema Fedora atual, percebo que o CentOS 7 não possui /var/log/journal(e journalctlnão fornece --list-boots).

Assim, minha pergunta sobre como exibir mensagens de log que foram escritas antes da última data de inicialização.

Ou talvez essa funcionalidade precise ser ativada no CentOS 7?

(A journalctlpágina de manual lista 'systemd 208' como número da versão.)

maxschlepzig
fonte

Respostas:

99

tl; dr

No CentOS 7, você precisa habilitar o armazenamento persistente de mensagens de log:

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

Caso contrário, as mensagens de log do diário não serão mantidas entre as botas.

Detalhes

Se a journaldretenção de mensagens de log de inicializações anteriores é configurada via /etc/systemd/journald.conf. A configuração padrão no CentOS 7 é:

[Journal]
Storage=auto

Onde a página do manual journald.conf explica autocomo:

Um de "volátil", "persistente", "automático" e "nenhum". Se "volátil", os dados do log do diário serão armazenados apenas na memória, ou seja, abaixo da hierarquia / run / log / journal (criada se necessário). Se "persistente", os dados serão armazenados preferencialmente em disco, ou seja, abaixo da hierarquia / var / log / journal (criada se necessário), com um fallback para / run / log / journal (criado se necessário), durante inicialização antecipada e se o disco não for gravável. " auto " é semelhante a "persistente", mas o diretório / var / log / journal não é criado, se necessário, de modo que sua existência controla aonde os dados do log vão .

(enfatize o meu)

A página de manual systemd-journald.service afirma que:

Por padrão, o diário armazena dados de log em / run / log / journal /. Como / run / é volátil, os dados do log são perdidos na reinicialização. Para tornar os dados persistentes, é suficiente criar / var / log / journal / onde systemd-journald armazenará os dados.

Aparentemente, o padrão foi alterado no Fedora 19 (para armazenamento persistente) e, como o CentOS 7 é derivado do Fedora 18 - ele ainda não é persistente por padrão. A persistência é implementada por padrão fora do journald via /var/log/messagese as versões rotacionadas /var/log/messages-YYYYMMDDsão escritas pelo rsyslogd (que é executado por padrão e obtém sua entrada do journald).

Portanto, para habilitar o log persistente com o journald no RHEL / CentOS 7, é necessário

# mkdir /var/log/journal

e, em seguida, corrija as permissões e reinicie o journald, por exemplo, via

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
maxschlepzig
fonte
6
A systemctl restart systemd-journalddeve fazê-lo. Portanto, não é necessário reiniciar.
Xx4h
@ xx4h, atualizei a resposta
maxschlepzig
9
Em debian isso está documentado em /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
pevik 12/08/2015
@ pevik, eu olhei para um sistema CentOS 7 (onde acabei de usar o mkdir) e as permissões atuais são drwxr-sr-x. 3 root systemd-journal- talvez o journald corrija as permissões / propriedade durante a inicialização.
maxschlepzig
8
Aprendeu um truque: se você enviar um USR1sinal em vez de reiniciar, não perderá o conteúdo atual do diário. killall -USR1 systemd-journald
James B
1
systemctl restart systemd-journald

Você pode perder seus logs: consulte https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Há uma mudança em v208:

O systemd-journald não ajustará mais o grupo de arquivos de diário que ele cria ao grupo "systemd-journal". Em vez disso, contamos com o diretório de diário pertencente ao grupo "systemd-journal" e seu conjunto de bits setgid, para que a camada do sistema de arquivos do kernel imponha automaticamente que os arquivos de diário herdam essa atribuição de grupo.

Um snippet tmpfiles.d (5) incluído no systemd garantirá que o bit e o grupo setgid estejam configurados corretamente no diretório do diário, se existirem em cada inicialização.

Então, você deve executar algo como systemd-tmpfiles --create --prefix /var/log/journaldepoismkdir /var/log/journal

Veja também :

Evgeny Vereshchagin
fonte
Hm, ou faça um `chmod 4755 / var / log / journal; raiz do chown: systemd-journal!: 2 '- ou apenas reinicie. Vou atualizar minha resposta.
maxschlepzig
@maxschlepzig, apenas a reinicialização não funciona: github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin
chmod 4755 /var/log/journal; chown root:systemd-journal !:2funciona bem. mas TMPFILES: usar magia ACL em diretórios de jornal
Evgeny Vereshchagin
ok, outro bug :) - eu atualizei minha resposta.
Maxschlepzig # 30/15