2017-02-09 5 views
0

私はcsvファイルからデータを解析してelasticsearchにプッシュするためにlogstashを使用しています。私は600k行の辞書を持っています。これはフィールドの1つをキーとして使用して、値の文字列にマップします。私は現在、私はこれらの2ブロックを加算した結果が増加しているログシュートでの辞書翻訳の最適化

filter{ 
    csv { 
     source => "destinationField" 
     columns => ["col1","col2","col3"]    
     separator => "," 
     } 

} 

を使用して読み取り、私のdestinationFieldでカンマ区切りの文字列を取得し、私は

filter { 
     translate { 
      dictionary_path => "somepath" 
      field => "myfield" 
      override => false 
      destination => "destinationField" 
     } 
    } 

を必要とするものを達成するために、このような変換プラグインを使用しています私の処理時間は3倍。処理に1分かかり、すべてのデータをプッシュすると、タスクを完了するのに3分かかります。

これは予想された動作ですか(大規模な辞書ですか)?または、このコードをさらに最適化する方法はありますか?

+0

パイプラインに追加の処理ステップを追加すると、処理時間が長くなることが予想されます。 – Val

+0

本当ですか!しかし、処理時間が3倍になるのはかなりのようです。このことについてもっと最適化された方法があるかどうかを知りたいと思っていた – Vignesh

+0

1行で最大10倍まで増やすことができます。最終的には、それらのフィルタがどのように実装されるかによって異なります。私は 'csv 'について心配していませんが、' translate'を調べたいと思うかもしれません。 – Val

答えて

0

csvフィルタは高価になる可能性があります。 logstash-filter-augmentというプラグインを書いて、translateとほぼ同じように動作しますが、ネイティブのCSVドキュメントをよりうまく処理します。 csvフィルタではなく、実際のCSVを使用してフィールドを解析することができます。

+0

ありがとう!私はこれを試してみる。これを使用すると、2つのフィルタブロックを使用するよりもはるかにクリーンなようです – Vignesh

関連する問題