2015-10-28 9 views
6

技術者以外の人々のために、一連のデータを解析してELKスタックにしています。その一環として、ElasticSearchに送信する前に、既知のフィールドのサブセットを除くすべてのフィールドをイベントから削除したいと考えています。指定されたフィールドのリストを除くすべてのフィールドのログアウトフィルターremove_field

私は明示的に同様のmutateフィルタにドロップする各フィールドを指定することができます。この場合

filter { 
    mutate { 
     remove_field => [ "throw_away_field1", "throw_away_field2" ] 
    } 
} 

を、いつでも新しいフィールドが入力されたデータに追加されます(データが引かれているので、多くの場合、発生する可能性がどの複数のシステムで複数の目的で使用されている場合)、フィルタリングを更新する必要があります。これは不要なオーバーヘッドです。入力ストリームが更新されたときとフィルタリングが更新されたときの間に、機密データによって間違ったデータが作成された場合、それは悪い可能性があります。

logstashフィルタを使用してオブジェクトの各フィールドを反復する方法はありますか?それがフィールド名のリストに含まれていない場合はremove_fieldですか?または、これを行うカスタムフィルタを作成する必要がありますか?基本的には、単一のオブジェクトごとに、私は8つの特定のフィールドを保持し、他にすべてを投げたいだけです。

logstash.confファイルではif ![field] =~ /^value$/タイプロジックが利用可能ですが、for eachスタイルでフィールド自体を繰り返し処理する例はなく、フィールド名と値のリストを比較しています。

は、回答:

1.5.0にlogstashをアップグレードした後、このようなプルーンなどのプラグイン拡張機能を使用できるようにするため、解決策はこのように見てしまった:

filter { 
    prune { 
     interpolate => true 
     whitelist_names => ["fieldtokeep1","fieldtokeep2"] 
    } 
} 

答えて

5

Pruneホワイトリストがどうあるべきかあなたが探しています。

より具体的な制御のためには、おそらくルビフィルタへのドロップは次のステップです。

+0

私が探している正確に何のように見えます。私はそれを試して、報告して戻ってきます... – redstonemercury

+0

私はこの作業、したがって遅れを得るためにlogstashをアップグレードしなければなりませんでしたが、これは私が探しているものです。迅速な答えをありがとう! Accepted :) – redstonemercury

3

別のオプションは、例えば、新しいフィールドへと変異する使用よりも、解析されたJSONを移動するには、次のようになります。

filter { 
    json { 
     source => "json" 
     target => "parsed_json" 
    } 

    mutate { 
     add_field => {"nested_field" => "%{[parsed_json][nested_field]}"} 
     remove_field => [ "json", "parsed_json" ] 
    } 
} 
+0

これは素晴らしい代替方法で、プルーンフィルタをインストールするためにlogstashをアップグレードする必要がなくなりました。 – redstonemercury

+0

@redstonemercuryあなたはlogstash 'logstash-filter-prune'のためのアップグレードをする代わりにプラグインをインストールできると思います – oivoodoo

関連する問題