systemd
との両方を含むデバイスがありますrsyslog
。ローカルロギングとリモートロギングのための基本的なメカニズムですjournald
。rsyslog
rsyslog は常に実行されるわけではなく、デバッグが必要な場合にのみ起動されます。
rsyslogが開始された後は、その時点から発生したイベントのみが送出されます。現在のログで利用可能なすべてのログを転送しようとしています。
これを行う正しい方法は$ModLoad imjournal
rsyslogを有効にすることです/etc/rsyslog.conf
。これにより、rsyslogはログのアーカイブファイルを読み取ることができます。
私が使用している組み込みシステムにはrsyslog用のimjournalモジュールがなく、回避策を探しています。
1つの回避策は、Journaldにrsyslogがリッスンしている(現在アクティブな)ソケットにすべての古いアーカイブログを再送信することです。
これを行う方法はありますか?
ベストアンサー1
Journaldは実際にはそのような機能を提供していません。
これJournald.conf のマニュアルページ次の制限事項が文書化されていますForwardToSyslog=
。
syslog に転送が有効になっているが、ソケットからメッセージを読み取ることがない場合は、syslog に転送しても効果はありません。
これが最初に開始されたメッセージが失われる理由です。マニュアルページには次の内容も記載されています。
[imjournal]を使用すると、すぐにメッセージを読む必要がなくなり、ジャーナルデーモンは起動後半にのみ開始され、システム起動後にすべてのメッセージにアクセスできます。
そのため、この方法をお勧めします。
rsyslogが最初に起動したときに、起動後にログに保存されたメッセージを提供し、journalctl
rsyslogを使用して読み取り、logger
rsyslogに供給して「kludge」を実行できると思います。たぶん、次のように簡単なことがうまくいくかもしれません。
journalctl -b | logger -u /run/systemd/journal/syslog
メッセージに日付とタグを追加しようとすると、最終logger
的な効果は配信されたメッセージとは異なるように見えることがあります。 ...logger
journalctl
このソリューションには、最初のフィードとログ配信の間に一部のメッセージが失われる(または重複する)可能性があるため、競合状態があります。
ジャーナルで働くことは確かにより良い解決策です。すべてのsystemdソフトウェアとrsyslogソフトウェアの両方がデバイス用にコンパイルされ、ビルドされた後に利用できないのはなぜですか?したがって、少なくとも技術的にimjournalモードもビルドすることが可能です...おそらくクロスコンパイルが関連している可能性があります。おそらくsystemdライブラリに接続するのは難しいかもしれませんが、解決できる問題であると確信しているので、問題を提起して機能させることをお勧めします。
考慮すべきもう1つの解決策は、syslogプロトコルとデーモンの代わりにデフォルトのロギングリモートプロトコルを使用してロギングを集中化することです。
持つシステムログリモートリモートホストで「受信機」モードで実行して、内蔵デバイスからアイテムを受信してローカルに保存できます。そしてシステムログのアップロード、内蔵デバイスで実行してログデータをリモートホストにプッシュできます。
メッセージをsyslog形式に変換する必要がないため、早期開始メッセージとすべてのメタデータの両方が保存されます。また、組み込みデバイスでrsyslogデーモンをローカルで実行し続ける必要がないという利点もあります。
(ジャーナルはまた、以下を実行できる「プール」モデルもサポートしています。systemd-ジャーナル-gatewayd組み込みデバイスからインポートするようにsystemd-journal-remoteを設定します。 )