複雑なメッセージタイプを含むログファイルがあります。ここに例があります:さまざまなタイプのメッセージでログファイルを解析する方法
2016-07-07 13:30:02 [Main] *** Program start ***
2016-07-07 13:30:02 [UnzipFile] Before file collection
2016-07-07 13:30:02 [GetZipCol] Start get sorted zip file collection
2016-07-07 13:30:02 [GetZipCol] End get sorted zip file collection
2016-07-07 13:30:02 [Main] [ERROR] No unzip file
2016-07-07 13:30:03 [Main] *** Program end ***
次のgrokパターンは、最初の4行にのみ適していますが、5行目には適していません。
grok{
match => {"message" => ['%{Date:Date}%{SPACE}%{Time:Time}%{SPACE}%{WORD:Job}%{SPACE}%{GREEDYDATA:Message}']}
}
私は、最後のメッセージから[ERROR]
をキャプチャするように私は、GROKパターンの変更方法を知っていただきたいと思います。誰かがこれを行う方法を知っていますか?私は場合にのみ、プログラムの開始時と終了し、また、エラーとイベントその他のイベントをドロップすることができながら、イベントを把握したい場合
これは、confの
if [Message] == "*** Program start ***" {
elasticsearch {
hosts => ["localhost:9200"]
index => "log-%{+YYYY.MM.dd}"
template => "C:/logstash/log.json"
template_overwrite => true
}
}
if [Message] == "*** Program end ***" {
elasticsearch {
hosts => ["localhost:9200"]
index => "log-%{+YYYY.MM.dd}"
template => "C:/logstash/log.json"
template_overwrite => true
}
}
if [Level] =~ /.+/ {
elasticsearch {
hosts => ["localhost:9200"]
index => "log-%{+YYYY.MM.dd}"
template => "C:/logstash/log.json"
template_overwrite => true
}
}
で私の出力部です。しかし、私が書いたことによると。私は[エラー]でしかデータを把握できません。他のデータもどうやって把握すればいいですか?条件文の場合は3を入力するのではなく、より単純な方法がありますか?ありがとう。
ありがとうございました。
それは本当ではないです、最後の条件文は、あなたが代わりに行うのに成功金融商品取引法 'Level' – baudsp
とパターンによって解析されたすべてのメッセージを把握することを意味し、「_Iは_ [エラー]でデータを把握することができます」 3つの異なる条件を否定し、渡すすべてのメッセージを破棄するif([Message]!= "*** Program start ***" and [Message]!= "***プログラム終了*** "と[レベル]!〜/.+/){drop {}}'。そして、あなたは1つのelasticsearch出力を使用します。 – baudsp
@baudspありがとう、それはうまくいきます。メッセージの全行ではなく「プログラム」という単語がメッセージに含まれているかどうかを確認するにはどうすればいいですか? –