Então eu perguntei no canal de IRC #systemd e acontece que o journald (o daemon de log do systemd) não limpa periodicamente os logs para o disco. Isso significa que seus registros estão sempre em risco a qualquer momento.
Enviar SIGUSR2
para o journald
faz com que os logs sejam gravados no disco, mas se você fizer isso várias vezes, muitos arquivos serão criados. (a opção é realmente descrita como "log rotating").
No final, decidi seguir com outra sugestão: usar um daemon syslog dedicado para coletar logs do kernel. Como o rsyslog foi sugerido (e eu já tive experiência com ele), explorei essa opção ainda mais. Eu escrevi mais alguns detalhes no Arch Wiki sobre como usar o rsyslog.
A idéia é executar o rsyslog, coletando apenas dados do recurso do kernel. Como o rsyslog lê as leituras /proc/kmsg
(que permite apenas um único leitor) e o journald de /dev/kmsg
(múltiplos leitores permitidos), não há como os daemons perderem os logs (muito importante para mim!). Configure o rsyslog para gravar mensagens do kernel em um arquivo e certifique-se de que este arquivo seja girado para evitar que o espaço do seu disco seja gasto.
Esta solução não é perfeita:
- Outros registros (por exemplo, do NetworkManager) são perdidos. Isso poderia ser resolvido pelo encaminhamento de mais logs do syslog para o journald (isso significa duplicação!)
- Duplicação de logs. As mensagens do kernel são gravadas em dois arquivos. Este não é um problema, em geral, o número de logs é pequeno e você preferiria ter mais cópias dos logs do que nenhuma. Você também pode usar ferramentas rápidas como
grep
no arquivo de log único ou o mais lento, mas extravagantejournalctl
.
Existe um item TODO para limpar os registos com mais frequência, mas que ainda não é confiável o suficiente:
journal: send out marker messages every now and then, and immediately sync with fdatasync() afterwards, in order to have hourly guaranteed syncs.
Agora, esperamos que systemd / journald tenha uma opção para gravar os logs em disco, mas enquanto isso podemos combinar ferramentas para alcançar o objetivo.