Journald - アーカイブされたログをロギングソケットに戻します。

Journald - アーカイブされたログをロギングソケットに戻します。

systemdとの両方を含むデバイスがありますrsyslog。ローカルロギングとリモートロギングのための基本的なメカニズムですjournaldrsyslogrsyslog は常に実行されるわけではなく、デバッグが必要な場合にのみ起動されます。

rsyslogが開始された後は、その時点から発生したイベントのみが送出されます。現在のログで利用可能なすべてのログを転送しようとしています。

これを行う正しい方法は$ModLoad imjournalrsyslogを有効にすることです/etc/rsyslog.conf。これにより、rsyslogはログのアーカイブファイルを読み取ることができます。

私が使用している組み込みシステムにはrsyslog用のimjournalモジュールがなく、回避策を探しています。

1つの回避策は、Journaldにrsyslogがリッスンしている(現在アクティブな)ソケットにすべての古いアーカイブログを再送信することです。

これを行う方法はありますか?

ベストアンサー1

Journaldは実際にはそのような機能を提供していません。

これJournald.conf のマニュアルページ次の制限事項が文書化されていますForwardToSyslog=

syslog に転送が有効になっているが、ソケットからメッセージを読み取ることがない場合は、syslog に転送しても効果はありません。

これが最初に開始されたメッセージが失われる理由です。マニュアルページには次の内容も記載されています。

[imjournal]を使用すると、すぐにメッセージを読む必要がなくなり、ジャーナルデーモンは起動後半にのみ開始され、システム起動後にすべてのメッセージにアクセスできます。

そのため、この方法をお勧めします。

rsyslogが最初に起動したときに、起動後にログに保存されたメッセージを提供し、journalctlrsyslogを使用して読み取り、loggerrsyslogに供給して「kludge」を実行できると思います。たぶん、次のように簡単なことがうまくいくかもしれません。

journalctl -b | logger -u /run/systemd/journal/syslog

メッセージに日付とタグを追加しようとすると、最終logger的な効果は配信されたメッセージとは異なるように見えることがあります。 ...loggerjournalctl

このソリューションには、最初のフィードとログ配信の間に一部のメッセージが失われる(または重複する)可能性があるため、競合状態があります。

ジャーナルで働くことは確かにより良い解決策です。すべてのsystemdソフトウェアとrsyslogソフトウェアの両方がデバイス用にコンパイルされ、ビルドされた後に利用できないのはなぜですか?したがって、少なくとも技術的にimjournalモードもビルドすることが可能です...おそらくクロスコンパイルが関連している可能性があります。おそらくsystemdライブラリに接続するのは難しいかもしれませんが、解決できる問題であると確信しているので、問題を提起して機能させることをお勧めします。


考慮すべきもう1つの解決策は、syslogプロトコルとデーモンの代わりにデフォルトのロギングリモートプロトコルを使用してロギングを集中化することです。

持つシステムログリモートリモートホストで「受信機」モードで実行して、内蔵デバイスからアイテムを受信して​​ローカルに保存できます。そしてシステムログのアップロード、内蔵デバイスで実行してログデータをリモートホストにプッシュできます。

メッセージをsyslog形式に変換する必要がないため、早期開始メッセージとすべてのメタデータの両方が保存されます。また、組み込みデバイスでrsyslogデーモンをローカルで実行し続ける必要がないという利点もあります。

(ジャーナルはまた、以下を実行できる「プール」モデルもサポートしています。systemd-ジャーナル-gatewayd組み込みデバイスからインポートするようにsystemd-journal-remoteを設定します。 )

おすすめ記事