web-dev-qa-db-ja.com

syslogメッセージ形式と混同

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

19
qwix

この場合の問題は、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形式です。

17
b0ti

システムにインストールされたsyslog-daemonにアクセスできる場合は、ログを(ローカルまたはネットワーク経由で受信した)別の形式で書き込むように構成できます。たとえばrsyslogdを使用すると、独自のフォーマットを設定できます(テンプレートを作成するだけ)。また、覚えている場合は、jsonフォーマットで保存する組み込みのテンプレートがあります。そして、jsonを解析するためのほとんどすべての言語のライブラリーがあります。

1