logstashを使用してDB復元ログを読み取っています。これがサンプルレコードのいくつかの行です。
07/08/2016 6:33:22.50: START restore database
SQL2540W Restore is successful, however a warning "2539" was encountered
during Database Restore while processing in No Interrupt mode.
07/08/2016 6:33:28.93: END restore database
SQL4406W The DB2 Administration Server was started successfully.
07/08/2016 6:35:35.29: END restart server
connect reset
DB20000I The SQL command completed successfully.
07/08/2016 6:35:38.48: END p:\s6\source\system\CMD\res_uw.cmd
これが私のconfファイルのフィルター部分です。
if ([message] =~ /Backup successful/){
grok{
match => {"message" => ['%{GREEDYDATA:Message}'] }
}
mutate {
add_tag => "send_to_es"
add_field => {"Timestamp" => "%{GREEDYDATA:DATETIME}"}
}
}
if ([message] =~ /warning "2539"/){
grok{
match => {"message" => ['%{GREEDYDATA:Message}'] }
}
mutate {
add_tag => "send_to_es"
add_field => {"Timestamp" => "%{GREEDYDATA:DATETIME}"}
}
}
if ([message] =~ /(END p:|END P:)/){
grok{
match => {"message" => ['%{GREEDYDATA:DATETIME}:%{SPACE}END%{SPACE}%{GREEDYDATA:Mis}'] }
remove_field => "%{GREEDYDATA:Mis}"
}
mutate {
add_tag => "send_to_es"
}
}
レコードの最後の行から抽出したデータ「DATETIME」をメッセージに追加し、同時に他のメッセージに追加してインデックスを作成したいと思います。ただし、フィールドを正常に追加できませんでした。出力は次のようになります
"message": "SQL2540W Restore is successful, however a warning \"2539\" was encountered \r\r",
"@version": "1",
"@timestamp": "2016-07-12T02:28:52.337Z",
"path": "C:/CIGNA/hkiapp67_db_restore/res_uw.log",
"host": "SIMSPad",
"type": "txt",
"Message": "SQL2540W Restore is successful, however a warning \"2539\" was encountered \r\r",
"Timestamp": "%{GREEDYDATA:DATETIME}",
"tags": [
"send_to_es"
]
どうすればこれを解決できますか?
Logstashは、回線を受信したとき、他の回線についての知識を持っていません。複数行のコーデック/フィルターを使用して、必要なすべての行を日付のある行に再グループ化する必要があります。次に、grokフィルターを使用して日付を抽出し、ドキュメントに追加します。
複数行コーデック/フィルターの構成は次のようになります。
multiline {
pattern => "%{DATE}"
negate => "true"
what => "next"
}
これにより、パターンDATEで始まらないすべての行が次の行に結合されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加