Elasticsearch використовує занадто багато місця на диску


12

У мене є сервер CentOS 6.5, на якому я встановив Elasticsearch 1.3.2 .

Мій elasticsearch.ymlфайл конфігурації - це мінімальна модифікація однієї доставки з еластичним пошуком за замовчуванням. Після позбавлення всіх коментованих рядків це виглядає так:

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 повинні мати стиснення ПО за замовчуванням , і я прочитав різні тести покласти ступінь стиснення від найнижчого до 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: 1у свій файл конфігурації, оскільки я виявив, що у elasticsearch 0.19.5примітках до випуску (саме тоді storeстиснення вийшло першим), але я ще не в змозі сказати, чи є це різницею, і як би компресія повинна бути ВКЛ. за замовчуванням, нині ...


Ви коли-небудь розглядали накладні витрати, необхідні для зберігання та індексації цих даних? Звідси походить різниця.
mailq

@mailq - AFAIK, Elastic стискає як дані, так і індекси, і ви все одно повинні помітити зменшення використання місця на своєму диску порівняно з текстовими журналами. Я припускаю, що пробіг може змінюватися залежно від структури журналу, але журнали, як правило, дуже повторювані за своєю суттю, тому індексація не повинна бути найбільш трудомісткою операціями. ... чи я помиляюся?
мак

Журнали насправді не повторюються. Користувач A входить в обліковий запис 1. Користувач B реєструється вчасно 2. Що повторюється? Обидва кортежі необхідно індексувати та зберігати окремо. Крім самого запису журналу.
mailq

1
Спробуйте ці рекомендації. github.com/jordansissel/experiment/tree/master/elasticsearch/…
mailq

@mailq - Supercool maliq, дякую тони. Якщо ви розгорнете свій коментар і напишіть належну відповідь, я би радий позначити його як прийняте (інакше я зроблю це пізніше, але не хочу красти ваш грім!).
мак

Відповіді:


17

Elasticsearch не скорочує ваші дані автоматично. Це справедливо для будь-якої бази даних. Окрім зберігання необроблених даних, кожна база даних має зберігати разом з ними метадані. Звичайні бази даних зберігають лише індекс (для швидшого пошуку) для стовпців, які db-admin обрав наперед. ElasticSearch відрізняється тим, що він індексує кожен стовпець за замовчуванням. Це робить індекс надзвичайно великим, але, з іншого боку, дає ідеальну продуктивність під час отримання даних.

У звичайних конфігураціях ви бачите збільшення в 4 до 6 разів необроблених даних після індексації. Хоча це сильно залежить від фактичних даних. Але це насправді цілеспрямована поведінка.

Отже, щоб зменшити розмір бази даних, вам доведеться піти навпаки, як ви робили в RDBM: Виключіть стовпці з індексування або зберігання, які вам не потрібно індексувати.

Крім того, ви можете ввімкнути стиснення, але це покращиться лише тоді, коли ваші "документи" будуть великими, що, ймовірно, не відповідає правилам записів файлів журналу.

Тут наведено кілька порівнянь та корисних порад: https://github.com/jordansissel/experiment/tree/master/elasticsearch/disk

Але пам’ятайте: пошук поставляється з вартістю. Вартість оплати - це місце на диску. Але ви отримуєте гнучкість. Якщо ваш обсяг пам’яті перевищує, тоді зростайте горизонтально! Тут перемагає ElasticSearch.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.