次のようなログエントリがあります...
2014-02-25 00:00:03,936 INFO - something happened...bla bla bla
2014-02-25 00:00:03,952 INFO - ***Request Completed*** [ 78.002] mS [http://cloud.mydomain.local/schedule/search?param=45]
2014-02-25 00:00:04,233 INFO - something else happened...bla bla bla
行を正しく解析する grok フィルターがあります...
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}" ]
}
「body」が「***Request Completed***」で始まる場合、「body」から追加データを解析したいと思います。つまり、「elaspsedms」と「uri」です。これどうやってするの?
他の場所では、このように grok フィルターに別のメッセージ エントリを追加することが提案されました...
grok {
match => [
"message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- \*\*\*Request Completed\*\*\* \[%{SPACE}%{NUMBER:elaspedms}\] mS \[%{URI:uri}\]",
"message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}"
]
}
...これは機能しますが、タイミング ラインの場合、'body' の値は設定されません。理想的には、body には常にエントリの最後の部分と iff を含めたいと思います。エントリはタイミング ラインであり、eplapsems と uri の追加の解析を実行します。
どうすればこれを行うことができますか?
フィールドを解析する手段はありますか? 'body' をlapsedms/uri に解析しようと試みることができるように、それが失敗した場合は続行します。または、grok 式でフィールドの一致をネストする手段はありますか?
考え?
編集:「体」が常に設定されていることを確認するのではなく、「elaspedms」が設定されている場合、「elaspedms」と「uri」から体を作成できますか?