2016-04-29 18 views
0

ログを管理するのにlogstashとlumberjackを使用しています。 Logstashは2つの異なるファイルタイプからの入力を受け取り、その1つは複数行のスタックトレースを記録します。私はマルチラインコーデックを使用すべきであることは知っていますが、1種類のログだけに適用する方法はわかりません。これは動作しません:入力ブロック内のlogstash条件文

input { 
    lumberjack { 
    #some configs 
    port => 9000 

    if [type] == "TYPE1" { # IF STATEMENT CAUSES ERROR 
     codec => multiline {} 
    } 
    } 
} 

入力コーデックが条件付きで動作するようにする方法はありますか?

私はコーデックの代わりにマルチラインフィルタを使用できますが、マルチラインフィルタは複数の作業者を許可しないため、必要とします。

答えて

1

答えは、異なるデータタイプに対して別々の入力を設定することだと思います。そうすれば、複数のコーデックにロジックを追加する必要はありません。たとえば : ポートNにパターンYに続くすべてのRubyのログを送信するポートN にパターンXに続くすべてのJavaログを送信+ 1

私はRedisのを含んでスタックにこの作業を行う方法がわからないんだけどすべてのデータは理想的には処理を行わずにキャッシュに入るべきであるため、処理ロジックは様々なデータ型を含むので検索されるときに処理ロジックを必要とするので、

受信レイヤーで複数行ログに参加して、キャッシュサーバーが完全なメッセージを受信し、Elastic Searchにデータを送信する前に重いフィルターを実行する必要があるようです。

このような何か:

LS1 (multiple inputs and codecs like multiline) 
Redis (caching) 
LS2 (filters) 
ES (storage) 
KIB (viewing)