2017-11-24 10 views
0

Logstashのマルチラインコーデックは、ログの次のパッケージを送信するまで、最後のイベント(行)を無視します。Logstashのマルチラインコーデックは最後のイベント/行を無視します

マイlogstash.conf:

input { 
    } 
    http { 
     port => "5001" 
     codec => multiline { 
      pattern => "^\[%{TIMESTAMP_ISO8601}\]" 
      negate => true 
      what => previous 
      auto_flush_interval => 15 
     } 
    } 
} 

filter{ 
    grok { 
     match => { "message" => "(?m)\[%{TIMESTAMP_ISO8601:timestamp}\]\s\<%{LOGLEVEL:log-level}\>\s\[%{WORD:component}\]\s%{GREEDYDATA:log-message}" 
    } 
} 

output { 
    elasticsearch { 
     hosts => "elasticsearch:9200" 
     index => "%{+YYYY-MM-dd}" 
    } 
} 

またソリューション auto_flush_interval と動作しません。例えば

:ポストマンを用い

入力

[2017年7月11日22:32:12.345] [KCU]コンポーネントスレッド "メイン" Javaで 例外を初期化します.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) [2017-07-11 22:32:16.345]状態1で返される

出力 - 唯一のイベント(2つでなければならない):

[2017年7月11日22:32:12.345] [KCU]コンポーネントスレッド "メイン" java.langの 例外を初期化します。 com.example.myproject.Book.getTitleでNullPointerExceptionが (Book.java:16)

私はこの最後の行を必要としています。

質問: マルチラインコーデックに問題がありますか? - これを修正するには?

+0

私の回答はあなたの質問を解決するのに役立ちましたか? – Phonolog

+0

これと同じ質問が答えを得ました:https://discuss.elastic.co/t/logstash-multiline-codec-ignore-last-event-line/109006 – Jaap

答えて

0

私はマルチラインコーデックを間違えて使用していますか?さんがあなたの設定を見てみましょう:

codec => multiline { 
      pattern => "^\[%{TIMESTAMP_ISO8601}\]" 
      negate => true 
      what => previous 
     } 

loglineがない場合、それは言う(negate => true)ISOのタイムスタンプ(pattern)で始まる以前のログライン(what => previous)に追加します。

しかし、あなたが不足しているloglineは、ISOのタイムスタンプで始まる:

[2017年7月11日22:32:16.345] [KCU]ステータスで1

だから、それを返します。以前のログ行には追加されず、代わりにElasticsearchで新しい文書が作成されます。

関連する問題