2012-02-09 8 views
15

私はsyslogメッセージフォーマットについて少し混乱しています。 syslogメッセージを解析するプログラムを書く必要があります。私は私のsyslog-ngのインスタンスに何を得る読んだとき、私はこのようなメッセージが出る:syslogメッセージフォーマットと混同しました

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メッセージ自体だから今、私は少し混乱していた構造化データ

<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 [[email protected] iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry... 

とせずに

:私はRFC 5424を読んだとき

ただし、メッセージの例は次のようになり。正しいsyslogメッセージ形式は何ですか?それはRFC 5424が廃止された仕様バージョンの問題ですRFC 3164

答えて

17

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

+0

私は、それが非常に長い時間そこにあったので、これはRFC5424ではなくRFC3164形式のほぼすべてのログメッセージを見るのが普通だと思います。つまり、両方の仕様をサポートするパーサを作成する必要があります。すでにこれを行っているライブラリ(言語に関係なく)を知っていますか? – qwix

+0

syslog-ng、rsyslog、[nxlog](http://nxlog.org)などの既存のツールを使用しないのはなぜですか? (私は後者と提携していることに注意してください)。あなた自身のプログラムからこれを解析する必要があるなら、私はおそらく、perlやpythonのようなテキストファイルを簡単に扱えるスクリプト言語を選ぶでしょう。 – b0ti

+0

自分のプログラムからこれらのメッセージを解析する必要があります。私はPythonを使うつもりだと思う。しかし、何らかの理由でsyslogメッセージを解析することは、思ったほど単純ではありません。おそらく私は2つの異なる仕様をサポートする必要があるからでしょう。単体テストを書くのは完璧な時期だと私は信じています。ご回答有難うございます :) – qwix

1

システムにインストールされているsyslogデーモンにアクセスできる場合は、ログをローカルまたはネットワーク経由で別の形式で書き込むように設定できます。 rsyslogdは独自の書式(テンプレートを書いてください)を設定することができます。また、json形式で格納するための組み込みテンプレートが正しく記憶されている場合もあります。そして、jsonを解析するためのほぼすべての言語のライブラリがあります。

関連する問題