Esse recurso não está realmente disponível no journald.
A página man journald.conf documenta essa limitação de ForwardToSyslog=
:
If forwarding to syslog is enabled but nothing reads messages from the socket, forwarding to syslog has no effect.
É por isso que as mensagens de inicialização antecipada são perdidas. A página man também declara:
With [imjournal], messages do not have to be read immediately, which allows a logging daemon which is only started late in boot to access all messages since the start of the system.
Por isso, é recomendável usar esse método.
Eu acho que um "kludge" pode ser feito quando o rsyslog é iniciado, alimentando as mensagens armazenadas no diário desde a inicialização, usando journalctl
para lê-las e logger
para alimentá-las no rsyslog. Talvez algo tão simples como isso possa funcionar:
journalctl -b | logger -u /run/systemd/journal/syslog
Embora seja possível logger
tentará adicionar datas e tags às mensagens, e o efeito final poderá parecer diferente das mensagens encaminhadas ... Talvez você precise de algo mais cru ou de nível inferior a logger
ou talvez reformatar journalctl
saída para que esteja em um formato que o rsyslog entenderá ...
Esta solução tem uma condição de corrida, pois é bem possível que algumas mensagens sejam perdidas (ou duplicadas) entre esse feed inicial e o encaminhamento do journald.
Começar o trabalho do iJournal é definitivamente uma solução melhor. Estou curioso para saber por que ele não pode ser disponibilizado, afinal, tanto o software systemd quanto o rsyslog foram compilados e construídos para o seu dispositivo, então seria tecnicamente possível construir o modo imjournal também ... Talvez haja alguma compilação cruzada envolvida, que pode representar dificuldades de vinculação a bibliotecas do systemd, mas tenho certeza de que é um problema solucionável, então, talvez considere fazer uma pergunta para conseguir esse trabalho em seu lugar.
Outra solução possível a considerar é usar os protocolos remotos do diário nativo (em vez do protocolo e daemon syslog) para centralizar seus logs.
Há systemd-journal-remote que você pode executar modo "afundar" em um host remoto para receber entradas de seu dispositivo incorporado, para salvá-las localmente. E systemd-journal-upload , que você pode executar no seu arquivo incorporado dispositivo para enviar dados do diário para o host remoto.
Isso deve preservar as mensagens de inicialização antecipada e também manter todos os metadados, já que as mensagens não precisam ser convertidas para o formato syslog. Também tem a vantagem de não precisar manter um daemon rsyslog em execução localmente no dispositivo incorporado.
(A revista também suporta um modelo "pull", em que você executa systemd -journal-gatewayd no seu dispositivo incorporado e configure o systemd-journal-remote para extraí-lo.)