Elasticsearch çok fazla disk alanı kullanıyor


12

Elasticsearch 1.3.2'yi yüklediğim bir CentOS 6.5 sunucum var .

Benim elasticsearch.ymlyapılandırma dosyası varsayılan olarak elasticsearch ile nakliye birinin minimal değişiklik. Yorum yapılan tüm satırlardan çıkarıldıktan sonra, şuna benzer:

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 varsayılan olarak sıkıştırma AÇIK olmalıdır ve sıkıştırma oranını% 50'den% 95'e kadar yükselten çeşitli karşılaştırmaları okudum. Ne yazık ki, benim durumumdaki sıkıştırma oranı -400% veya başka bir deyişle: ES ile saklanan veriler aynı içeriğe sahip metin dosyasından 4 kat daha fazla disk alanı kaplıyor . Görmek:

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!

e karşı:

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

Neyi yanlış yapıyorum? Veriler neden sıkıştırılmıyor?

Sürümindex.store.compress.stored: 1 dosyalarında geçici olarak ekledim , çünkü elasticsearch 0.19.5sürüm notlarında ( storesıkıştırma ilk çıktığında), ancak henüz bir fark yaratıp yaratmadığını söyleyemiyorum ve yine de sıkıştırma AÇIK olmalıdır varsayılan, günümüzde ...


Bu verileri depolamak ve dizine eklemek için gereken ek yükü hiç düşündünüz mü? Aradaki fark buradan geliyor.
mailq

@mailq - AFAIK, Elastik hem verileri hem de dizinleri sıkıştırır ve yine de metin günlüklerine kıyasla diskinizde alan kullanımında bir azalma olduğunu fark etmelisiniz . Kilometre günlük yapısına göre değişebilir, ancak günlükleri doğası gereği çok tekrarlayan, bu nedenle indeksleme işlemleri en fazla yer kaplayan işlem olmamalıdır. ... yoksa yanlış mı anlıyorum?
mac

Günlükler gerçekten tekrarlanmıyor. Kullanıcı A saat 1'de oturum açar. Kullanıcı B saat 2'de oturum açar. Tekrarlayan nedir? Her iki tuple de ayrıca indekslenmeli ve saklanmalıdır. Günlük girişine ek olarak.
mailq


@mailq - Supercool maliq, bir ton teşekkür ederim. Yorumunuzu genişletir ve uygun bir cevap yazarsanız, kabul edildi olarak işaretlemekten memnuniyet duyarım (aksi takdirde daha sonra yapacağım, ancak gök gürültüsünü çalmak istemiyorum!).
mac

Yanıtlar:


17

Elasticsearch, verilerinizi otomatik olarak küçültmez. Bu herhangi bir veritabanı için geçerlidir. Ham verileri depolamanın yanı sıra, her veritabanı meta verileri onunla birlikte depolamak zorundadır. Normal veritabanları, db-admin'in seçtiği sütunlar için yalnızca bir dizini (daha hızlı arama için) saklar. Elastik Arama, varsayılan olarak her sütunu dizine eklediğinden farklıdır . Böylece endeksi çok büyük yapmak, ancak öte yandan veri alırken mükemmel performans verir.

Normal yapılandırmalarda, endekslemeden sonra ham verilerin 4 ila 6 katında bir artış görürsünüz. Her ne kadar büyük ölçüde gerçek verilere bağlıdır. Ama bu aslında amaçlanan davranış.

Bu nedenle, veritabanı boyutunu azaltmak için RDBM'lerde yaptığınız gibi başka bir yoldan gitmeniz gerekir: Sütunların dizine alınmasını veya dizine alınmasına gerek kalmadan depolanmasını hariç tutun.

Ek olarak sıkıştırmayı açabilirsiniz, ancak bu yalnızca "belgeleriniz" büyükse düzelecektir, bu da günlük dosyası girişleri için geçerli değildir.

Burada bazı karşılaştırmalar ve yararlı ipuçları vardır: https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

Ancak unutmayın: Arama ücretlidir. Ödeme maliyeti disk alanıdır. Ancak esneklik kazanırsınız. Depolama alanınızın boyutu aşılırsa yatay olarak büyütün! Elastik Arama burada kazanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.