LinuxのrsyslogはRFC 5424をサポートしていますか?

LinuxのrsyslogはRFC 5424をサポートしていますか?

何らかの理由で、システムログ有効なメッセージを正しく解釈できないようですRFC 5424。 RFCによって提供された例も機能しません。

$ echo "<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts." | nc -w1 -Uu /dev/log

ログ行の結果:

Dec  1 16:39:08 host 1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.

これは、メッセージがRFC 5424メッセージとして正しく解釈されず、代わりに文字列全体がメッセージペイロードとして扱われることを示します。

一方、以前のRFC 3164形式は問題なく受け入れられます。

$ echo "<165>Dec  1 05:14:15 myproc[8710]: %% It's time to make the do-nuts."| nc -w1 -Uu /dev/log

結果は正しいログ行です。

Dec  1 16:44:31 host myproc[8710]: %% It's time to make the do-nuts.

インターネットを横断してもサポートが不足しているという言及は見つかりません。システムログ横。私は何が間違っていましたか?

私はLinux Mint 20を使用しています。システムログバージョンは8.2001.0 (aka 2020.01)

だからか?システムつまり、メッセージの内容が到着する前に何らかの方法で修正します。システムログ

答え1

同じ問題があり、最終的にこれをrsyslog.confに追加して解決策を見つけました。

input(type="imuxsock" socket="/dev/log" useSpecialParser="off")

useSpecialParserパラメーターは、imuxsock入力モジュールにRFC5424形式を解析できない特殊なパーサーの代わりに、メッセージに汎用パーサーを使用するように指示します。参照。https://rsyslog-doc.readthedocs.io/en/latest/configuration/modules/imuxsock.html

RFC5424 は、udp や tcp などの他の入力モジュールに対して常に正しく解析します。

答え2

状況はここでよく説明されています。syslog メッセージ形式との混同

簡単に言うと:

  • ほとんどの *nix ロガーは RFC 3164 を使用します。
  • ただし、rsyslogdではRFC 5424形式を設定できます。

以下は、進行方法を説明する多くの記事の1つです。

RFC 5424関連システムログの生成

デフォルトでは、SyslogはRFC 3164に従って生成されます。各syslogに最大量の情報を構造化形式で提供するには、RFC 5424関連のsyslogロギングを有効にします。

RFC 5424準拠のsyslogには、syslogタイプの識別、syslogメッセージのフィルタリング、syslog生成時間(標準時間帯に基づく年とミリ秒)の識別、およびその他の改善を支援する拡張syslogヘッダーがあります。このlogging enable rfc5424コマンドを使用して、RFC 5424関連のsyslogを有効にできます。 RFC 5424特定のSyslogを有効にする前に、ロギングバッファをクリアする必要があります。それ以外の場合はエラーが表示されます。


OPによると:

私の質問は、クライアントとrsyslogサービス間の通信プロトコルについてです。

私はlibcのライブラリ関数syslog()を使用しません...私はncを使って/ dev / logに直接データグラムを送信しています

この場合、解決策は標準のRFC 3164形式でデータグラムを送信するようです。

可能性が低い場合:

https://www.rsyslog.com/doc/master/concepts/messageparser.html

メッセージパーサーはrsyslog 5.3.4以降の機能です。

[それらは] syslogメッセージを受信した後に解析するために使用されるrsyslogのコンポーネントです。 rsyslog 5.3.4以前は、メッセージパーサーがrsyslogコア自体に組み込まれており、変更できませんでした(rsyslogコードの変更に加えて)。

5.3.4ではこれを変更しました。メッセージパーサーは現在ロード可能なモジュールです(入力および出力モジュールと同様)。これは、rsyslogコアを変更したりプロジェクトに貢献することなく新しいメッセージパーサーを追加できることを意味します。

関連情報