2016-07-07 8 views
0

複雑なメッセージタイプを含むログファイルがあります。ここに例があります:さまざまなタイプのメッセージでログファイルを解析する方法

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を入力するのではなく、より単純な方法がありますか?ありがとう。

ありがとうございました。

+0

それは本当ではないです、最後の条件文は、あなたが代わりに行うのに成功金融商品取引法 'Level' – baudsp

+1

とパターンによって解析されたすべてのメッセージを把握することを意味し、「_Iは_ [エラー]でデータを把握することができます」 3つの異なる条件を否定し、渡すすべてのメッセージを破棄するif([Message]!= "*** Program start ***" and [Message]!= "***プログラム終了*** "と[レベル]!〜/.+/){drop {}}'。そして、あなたは1つのelasticsearch出力を使用します。 – baudsp

+0

@baudspありがとう、それはうまくいきます。メッセージの全行ではなく「プログラム」という単語がメッセージに含まれているかどうかを確認するにはどうすればいいですか? –

答えて

1

https://www.elastic.co/guide/en/logstash/current/config-examples.html#_processing_syslog_messages、第二使用です。したがって、あなたの場合、最初のパターンは[ERROR]をキャプチャしようとし、2番目のパターンは答えからのパターンになります。
私はそれがより読みやすいと思います。

grok{ 
    match => { 
    "message" => [ 
     '%{DATE:Date}%{SPACE}%{TIME:Time}%{SPACE}\[%{WORD:Job}\]%{SPACE}\[%{WORD:Level}\]%{SPACE}%{GREEDYDATA:Message}' 
     '%{DATE:Date}%{SPACE}%{TIME:Time}%{SPACE}\[%{WORD:Job}\]%{SPACE}%{GREEDYDATA:Message}' 
    ]} 
} 
+0

私はいくつかのフィルタリングを行うためにあなたのリンクに従うことができましたが、私は期待される結果を得ることができません。私は自分の問題を明らかにするために質問を編集しました。助けがあればありがとう。 –

+0

@KennedyKan期待される結果は何ですか? – baudsp

+0

私は私の質問にあなたのコメントを参照して問題を解決しました。本当にありがとう –

0

私はlogstashの専門家ではありませんが、ドキュメントをすばやく見れば、これらの "grok"パターンは単純な正規表現の上に抽象化されているようです。

したがって、ERRORレベルメッセージにオプションの非キャプチャグループを追加すると機能する場合があります。すなわち(?:\[%{WORD:Level}\]%{SPACE})?である。だから、なるだろうフルラインを読む:参考

grok{ 
    match => {"message" => ['%{Date:Date}%{SPACE}%{Time:Time}%{SPACE}%{WORD:Job}(?:\[%{WORD:Level}\]%{SPACE})?%{GREEDYDATA:Message}']} 
} 

は、私は、ドキュメントのこの部分を使用:最初の1に障害が発生した場合は、同じGROKフィルタで2つのパターンを使用することができます

+0

のように '=〜'コンパレータを使うことができます。エラーを含まないイベントをどのように削除することができますか?ありがとう。 –

+1

この回答をCf:http://stackoverflow.com/a/38072094/6113627または他のすべてのアンサー:http://stackoverflow.com/search?q=%5Blogstash%5Ddrop – baudsp

+0

私はあなたのリンクに従うことができましたいくつかのフィルタリング、しかし、私は期待された結果を得ることができません。私は自分の問題を明らかにするために質問を編集しました。助けがあればありがとう。 –

関連する問題