20

syslog メッセージの形式について少し混乱しています。syslog メッセージを解析するプログラムを作成する必要があります。syslog-ng インスタンスで取得した内容を読むと、次のようなメッセージが表示されます。

Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0

本当のメッセージ (この場合は Apache アクセス ログ メッセージ) を明確に判断できます。残りは、syslog メッセージ自体に関するメタデータです。

ただし、RFC 5424を読むと、メッセージの例は次のようになります。

構造化データなし

 <34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8

または構造化データを使用

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry...

だから今、私は少し混乱しています。正しい syslog メッセージ形式は何ですか? RFC 5424がRFC 3164を廃止した仕様バージョンの問題ですか?

4

2 に答える 2

19

この場合の問題は、apache が標準の syslog(3) またはロガーを介してログを記録していることです。これは、古い (RFC3164) syslog 形式のみをサポートします。つまり、ここには構造化データはありません。Apache ログのフィールドを RFC5424 構造化データとして表示するには、Apache でログをそのようにフォーマットする必要があります。

最初の例は、適切な RFC3164 syslog ではありません。優先度の値がヘッダーから取り除かれているためです。適切な RFC3164 形式は次のようになります。

<34>Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0

従来、rfc3164 syslog メッセージは優先度の値を削除してファイルに保存されていました。

他の 2 つは RFC5424 形式です。

于 2012-02-09T18:54:43.747 に答える