Elasticsearch बहुत अधिक डिस्क स्थान का उपयोग कर रहा है


12

मेरे पास एक सेंटोस 6.5 सर्वर है जिस पर मैंने एलेस्टिक्स खोज 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 होना चाहिए संपीड़न पर डिफ़ॉल्ट रूप से , और मैं 95% के रूप में उच्च करने के लिए कम के रूप में के रूप में 50% से संपीड़न अनुपात डाल विभिन्न मानक पढ़ें। दुर्भाग्य से, मेरे मामले में संपीड़न अनुपात -400% है, या दूसरे शब्दों में: ईएस के साथ संग्रहीत डेटा उसी सामग्री के साथ पाठ फ़ाइल की तुलना में 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 - AFAIK, इलास्टिक डेटा और इंडेक्स दोनों को संपीड़ित करता है , और आपको अभी भी पाठ लॉग की तुलना में आपकी डिस्क पर अंतरिक्ष उपयोग में कमी को नोटिस करना चाहिए । मुझे लगता है कि लॉग संरचना के अनुसार माइलेज अलग-अलग हो सकता है, लेकिन लॉग आमतौर पर प्रकृति में बहुत दोहरावदार होते हैं, इसलिए अनुक्रमण को ऑपरेशन का सबसे अधिक स्थान लेने वाला नहीं होना चाहिए। ... या मुझे यह गलत लग रहा है?
मैक

लॉग वास्तव में दोहराए नहीं जाते हैं। उपयोगकर्ता A समय पर लॉग इन करता है। समय में उपयोगकर्ता B लॉग करता है 2. दोहराव क्या है? दोनों टुपल्स को अलग-अलग अनुक्रमित और संग्रहीत किया जाना है। लॉग एंट्री के अलावा ही।
मेल्क

1
उन सिफारिशों की कोशिश करो। github.com/jordansissel/experiments/tree/master/elasticsearch/…
mailq

@mailq - सुपरकूल मलिक, एक टन धन्यवाद। यदि आप अपनी टिप्पणी पर विस्तार करते हैं और एक उचित उत्तर लिखते हैं, तो मुझे इसे स्वीकार करने में खुशी होगी (अन्यथा मैं इसे बाद में करूंगा, लेकिन आपकी गड़गड़ाहट चोरी नहीं करना चाहता!)।
मैक

जवाबों:


17

इलास्टिसर्च आपके डेटा को स्वचालित रूप से सिकोड़ता नहीं है। यह किसी भी डेटाबेस के लिए सही है। कच्चे डेटा को संग्रहीत करने के अलावा, प्रत्येक डेटाबेस को इसके साथ मेटाडेटा संग्रहीत करना होगा। सामान्य डेटाबेस केवल db-admin अपस्ट्रीम चुने गए कॉलम के लिए एक इंडेक्स (तेज खोज के लिए) संग्रहीत करते हैं। ElasticSearch अलग है क्योंकि यह हर कॉलम को डिफ़ॉल्ट रूप से अनुक्रमित करता है । इस प्रकार सूचकांक को बहुत बड़ा बना देता है, लेकिन दूसरी ओर डेटा प्राप्त करते समय सही प्रदर्शन देता है।

सामान्य कॉन्फ़िगरेशन में आप अनुक्रमण के बाद कच्चे डेटा के 4 से 6 गुना की वृद्धि देखते हैं। यद्यपि यह वास्तविक डेटा पर बहुत अधिक निर्भर करता है। लेकिन यह वास्तव में अभिप्रेत व्यवहार है।

इसलिए डेटाबेस का आकार कम करने के लिए, आपको आरडीबीएम में किए गए तरीके से दूसरे रास्ते पर जाना होगा: स्तंभों को अनुक्रमित या संग्रहीत करने से अलग रखें जिन्हें आपको अनुक्रमित करने की आवश्यकता नहीं है।

इसके अतिरिक्त, आप संपीड़न को चालू कर सकते हैं, लेकिन यह तभी सुधरेगा जब आपके "दस्तावेज़" बड़े होंगे, जो लॉग फ़ाइल प्रविष्टियों के लिए शायद सही नहीं है।

यहाँ कुछ तुलना और उपयोगी सुझाव दिए गए हैं: https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

लेकिन याद रखें: खोज एक लागत के साथ आता है। भुगतान करने की लागत डिस्क स्थान है। लेकिन आप लचीलापन हासिल करते हैं। यदि आपका संग्रहण आकार अधिक है, तो क्षैतिज रूप से बढ़ें! यह वह जगह है जहाँ ElasticSearch जीतता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.