web-dev-qa-db-ja.com

Elasticsearchが使用しているディスク領域が多すぎる

CentOS 6.5サーバーをインストールしましたElasticsearch 1.3.2

俺の elasticsearch.yml構成ファイルは、デフォルトでelasticsearchを使用して出荷されるものの最小限の変更です。すべてのコメント行を削除すると、次のようになります。

cluster.name: xxx-kibana

node:
    name: "xxx"
    master: true
    data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path:
    logs: /log/elasticsearch/log
    data: /log/elasticsearch/data


transport.tcp.port: 9300

http.port: 9200

discovery.zen.ping.multicast.enabled: false

Elasticsearchには compression ON デフォルト が必要です。圧縮率を最低50%から最高95%まで上げるさまざまなベンチマークを読みました。残念ながら、私の場合の圧縮率は-400%です。つまり、ESで保存されたデータは、同じ内容のテキストファイルよりも4倍のディスク容量を必要とします。見る:

12K     logstash-2014.10.07/2/translog
16K     logstash-2014.10.07/2/_state
116M    logstash-2014.10.07/2/index
116M    logstash-2014.10.07/2
12K     logstash-2014.10.07/4/translog
16K     logstash-2014.10.07/4/_state
127M    logstash-2014.10.07/4/index
127M    logstash-2014.10.07/4
12K     logstash-2014.10.07/0/translog
16K     logstash-2014.10.07/0/_state
109M    logstash-2014.10.07/0/index
109M    logstash-2014.10.07/0
16K     logstash-2014.10.07/_state
12K     logstash-2014.10.07/1/translog
16K     logstash-2014.10.07/1/_state
153M    logstash-2014.10.07/1/index
153M    logstash-2014.10.07/1
12K     logstash-2014.10.07/3/translog
16K     logstash-2014.10.07/3/_state
119M    logstash-2014.10.07/3/index
119M    logstash-2014.10.07/3
622M    logstash-2014.10.07/  # <-- This is the total!

対:

6,3M    /var/log/td-agent/legacy_api.20141007_0.log
8,0M    /var/log/td-agent/legacy_api.20141007_10.log
7,6M    /var/log/td-agent/legacy_api.20141007_11.log
6,7M    /var/log/td-agent/legacy_api.20141007_12.log
8,0M    /var/log/td-agent/legacy_api.20141007_13.log
7,6M    /var/log/td-agent/legacy_api.20141007_14.log
7,6M    /var/log/td-agent/legacy_api.20141007_15.log
7,7M    /var/log/td-agent/legacy_api.20141007_16.log
5,6M    /var/log/td-agent/legacy_api.20141007_17.log
7,9M    /var/log/td-agent/legacy_api.20141007_18.log
6,3M    /var/log/td-agent/legacy_api.20141007_19.log
7,8M    /var/log/td-agent/legacy_api.20141007_1.log
7,1M    /var/log/td-agent/legacy_api.20141007_20.log
8,0M    /var/log/td-agent/legacy_api.20141007_21.log
7,2M    /var/log/td-agent/legacy_api.20141007_22.log
3,8M    /var/log/td-agent/legacy_api.20141007_23.log
7,5M    /var/log/td-agent/legacy_api.20141007_2.log
7,3M    /var/log/td-agent/legacy_api.20141007_3.log
8,0M    /var/log/td-agent/legacy_api.20141007_4.log
7,5M    /var/log/td-agent/legacy_api.20141007_5.log
7,5M    /var/log/td-agent/legacy_api.20141007_6.log
7,8M    /var/log/td-agent/legacy_api.20141007_7.log
7,8M    /var/log/td-agent/legacy_api.20141007_8.log
7,2M    /var/log/td-agent/legacy_api.20141007_9.log
173M    total

何が悪いのですか?データが圧縮されないのはなぜですか?

暫定的に追加しましたindex.store.compress.stored: 1elasticsearch 0.19.5リリースノート (それがstore圧縮が最初に出たとき)ですが、それが違いをもたらしているかどうかはまだわかりません。そして、今日、デフォルトで圧縮がオンになっているはずです。 ..

12
mac

Elasticsearchは、データを自動的に縮小しません。これは、どのデータベースにも当てはまります。生データを保存するだけでなく、各データベースはメタデータも一緒に保存する必要があります。通常のデータベースは、db-adminが事前に選択した列のインデックス(高速検索用)のみ​​を保存します。 ElasticSearchは、デフォルトでevery列にインデックスを付けるため、異なります。したがって、インデックスを非常に大きくしますが、その一方で、データを取得しながら完璧なパフォーマンスを提供します。

通常の構成では、インデックス作成後、生データの4〜6倍の増加が見られます。実際のデータに大きく依存しますが。しかし、これは実際に意図された動作です。

したがって、データベースのサイズを小さくするには、RDBMで行ったのとは反対の方法をとる必要があります。

さらに、圧縮をオンにすることもできますが、これは「ドキュメント」が大きい場合にのみ改善されます。これは、おそらくログファイルエントリには当てはまりません。

ここにいくつかの比較と役立つヒントがあります: https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

しかし、覚えておいてください。検索にはコストが伴います。支払うコストはディスク容量です。しかし、柔軟性が増します。ストレージサイズを超える場合は、水平方向に拡大してください。これがElasticSearchの勝利です。

17
mailq