2017-12-04 10 views
0

Elastic Docker Composeに触発されたElasticSearch、Logstash、Filebeat、およびKibanaを使用したドッカーセットアップを実行しています。私は最初にシステムに15GBのログファイルをロードする必要がありますが(Filebeat-> Logstash-> ElasticSearch)、パフォーマンスに問題があります。ElasticSearchの初期一括インポートのベストプラクティス

Filebeat/LogstashがElasticSearchのためにあまりにも多くの作業を出力しているようです。私はこのようなElasticSearchのエラーの束を見始めるいくつかの時間後:https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html#segments-and-merging

[INFO ][o.e.i.IndexingMemoryController] [f8kc50d] now throttling indexing for shard [ log-2017.06.30 ]: segment writing can't keep up

私はを絞るマージを無効にする方法については、この古い文書の記事を見つけました。

PUT /_cluster/settings 
{ 
    "transient" : { 
     "indices.store.throttle.type" : "none" 
    } 
} 

しかし、現在のバージョン(ElasticSearch 6)で、それは私にこのエラーを与える:

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "illegal_argument_exception", 
     "reason": "transient setting [indices.store.throttle.type], not dynamically updateable" 
     } 
    ], 
    "type": "illegal_argument_exception", 
    "reason": "transient setting [indices.store.throttle.type], not dynamically updateable" 
    }, 
"status": 400 
} 

どのように私は、上記の問題を解決することができますか?

VMには4つのCPUコア(Intel Xeon E5-2650)があり、ElasticSearchには4GBのRAM、LogstashとKibanaそれぞれ1GBが割り当てられています。スワッピングは "swapoff -a"を使用して無効になります。 Xパックと監視が有効になります。私はこのログサーバーに1つのESノードしか持っていません。この最初の一括インポートには複数のノードが必要ですか?

EDIT1:

number_of_replicasを変更REFRESH_INTERVALはそれがより良い実行させるように思われます。まだテストしています。

PUT /log-*/_settings 
{ 
    "index.number_of_replicas" : "0", 
    "index.refresh_interval" : "-1" 
} 
+0

クラスタ統計情報(ノード、シャード、レプリカの種類、ハードウェアの種類)は何ですか?あなたはiostat、JVM統計など他の統計情報を持っていますか?他の設定は変更しましたか? – Egor

+0

@Egorあなたのお礼をありがとう。私は追加情報で質問を更新しました。 – dhrm

+0

logstash内のワーカースレッドの数を減らすことができます(起動時に-wオプション)。 elasticsearchについては、使用可能なRAMの半分を用意し、残りのファイルシステムを残すことになっていることを覚えています(「Xmxを物理RAMの50%以下に設定」https://www.elastic.co/guide /en/elasticsearch/reference/master/heap-size.html)。 – baudsp

答えて

1

ほとんどのボトルネックはIO(あなたはこの実行しているiostatのを確認することができ、あなたはES監視スクリーンショットを投稿した場合も、それは有用であろう)であるので、あなたはそれに圧力を軽減する必要があります。

デフォルトのES構成では、バルクロード中に多数のインデックスセグメントが生成されます。これを修正するには、バルクロードの場合、index.refresh_interval(または-1に設定)を増やします。docを参照してください。デフォルト値は1秒です。これにより、新しいセグメントが1秒ごとに作成されます。また、バッチサイズを増やし、役立つかどうか確認してください。あなたはスピニングディスクを使用する場合

はまた、これは一つのスレッドだけがマージセグメントを実行することができますし、マージセグメントと索引の間でIOの競合を削減する1にindex.merge.scheduler.max_thread_countを設定します。

+0

ありがとうございます。これらの設定を有効にするために行っているPUTリクエストを表示するmy * EDIT1 *を参照してください。 Elasticsearchに後で作成されたインデックスにこれらの設定を適用させる方法はありますか? 1つのノードしか持たないため、バルクインポートを実行した後に、このような設定を残しておくと意味がありますか? – dhrm

+0

レプリカの数は、単一ノードクラスタでは関係ありません。レプリカは、プライマリシャードと同じノードでホストされることはありません。 index.refresh_intervalは、バルクロード中に-1にする必要があります。 – Egor

関連する問題