Desde que "atualizei" para o systemd no Arch Linux, continuo perdendo logs quando ocorre um bloqueio inesperado. Eu bati no mesmo problema de perda de log há um mês e simplesmente bati no problema novamente. Também existem outras confirmações independentes .
Situação:
- Enquanto fazia algumas coisas em Java e com utilitários relacionados à rede, vi que o KDE (o relógio) estava congelado. O ventilador da CPU ficou barulhento e o calor estava subindo. O ponteiro do mouse ainda pode ser movido.
- Tentei ssh de outra máquina (falha devido a "nenhuma rota para hospedar")
- Esperei alguns minutos, talvez o cão de guarda da MNI pudesse matar a tarefa ofensiva. Sem dados.
- Ctrl+ Alt+ F1também não funcionou, mesmo depois de SysRq+R
- Como as etapas acima não funcionaram, decidi emitir a sequência REI do SysRq. Depois E, a tela ficou preta, mas nenhum console também. Nem mesmo depois de SysRq+K
- Portanto, esta sessão parece estar perdida, a única coisa que pode ser feita é coletar informações de depuração. Olhando para a Wikipedia , decidi pressionar SysRq+ d(exibir travas) entre alguns outros.
- Depois de pressionar SysRq+ S, esperei um segundo e depois reiniciei com SysRq+ B.
- Após a reinicialização e o login em um console, não vi vestígios de nenhuma falha. A entrada registrada mais recentemente foi do uso do Wireshark, mas ainda havia um intervalo de 45 minutos.
(Eu estava executando o Linux v3.8-rc5-218-ga56e160 btw)
Portanto, como posso garantir que meus logs sejam retidos durante a reinicialização anormal devido a um bloqueio?
systemd
logs
debugging
systemd-journald
Lekensteyn
fonte
fonte
systemd
ou não? Recentemente, estou vendo problemas semelhantes. Eu publiqueiSyncIntervalSec
opção (entre outras) no homemjournald.conf(5)
.man jounrnald.conf(5)
: SyncIntervalSec = ... Observe que a sincronização é feita incondicionalmente imediatamente após o log de uma mensagem de log de prioridade CRIT, ALERT ou EMERG. Portanto, essa configuração se aplica apenas a mensagens dos níveis ERR, WARNING, AVISO, INFO, DEBUG. Isso não significa simplesmente que, se um erro crítico for registrado, ele deverá ser sincronizado "imediatamente" sem aguardar o intervalo? Então, o que significa que, se ocorrer um erro crítico, devemos vê-lo nosjournald
logs. Estou esquecendo de algo?!Respostas:
Então perguntei no canal #systemd IRC e o journald (o daemon de log do systemd) não libera periodicamente os logs para o disco. Isso significa que seus logs estão sempre em risco a qualquer momento.
O envio
SIGUSR2
para osjournald
logs de causas é gravado no disco, mas se você fizer isso várias vezes, muitos arquivos serão criados. (a opção é realmente descrita como "rotação do log").No final, decidi seguir outra sugestão: usar um daemon syslog dedicado para coletar logs do kernel. Como o rsyslog foi sugerido (e eu já tinha experiência com ele), explorei essa opção ainda mais. Eu escrevi mais alguns detalhes no Arch Wiki sobre o uso do rsyslog.
A idéia é executar o rsyslog, coletando apenas dados da instalação do kernel. Como o rsyslog lê de
/proc/kmsg
(o que permite apenas um único leitor) e o journald lê de/dev/kmsg
(vários leitores permitidos), não há como os daemons perderem logs (muito importante para mim!). Configure o rsyslog para gravar mensagens do kernel em um arquivo e verifique se esse arquivo foi girado para evitar a ingestão de espaço em disco.Esta solução não é perfeita:
grep
no único arquivo de log ou no mais lento, mas mais sofisticadojournalctl
.Há um item TODO para liberar logs com mais frequência, mas isso ainda não é confiável o suficiente:
Agora, esperamos que o systemd / journald tenha a opção de gravar os logs no disco, mas, enquanto isso, podemos combinar ferramentas para atingir a meta.
fonte
Existem duas atualizações:
Existe uma opção
--sync
:--sync
disponível desdev228
:man journald.conf(5)
diz:SyncIntervalSec=
disponível desdev199
:Veja também:
journald: despacha SIGTERM / SIGINT com baixa prioridade
fonte