2015-10-07 9 views
7

मैं अपने लॉग स्टोर करने के लिए लोचदार खोज और किबाना का उपयोग कर रहा हूं। अब मैं चाहता हूं कि एक फ़ील्ड से एक संख्या निकालें और इसे एक नया फ़ील्ड स्टोर करें।लोचदार खोज: एक क्षेत्र से संख्या निकालें

उदाहरण के लिए

तो, यह होने:

accountExist निष्पादन समय: 1046 एमएस

मैं नंबर (1046) निकालने और kibana में एक नया क्षेत्र में यह देखने के लिए चाहते हैं।

क्या यह संभव है? कैसे? मदद के लिए धन्यवाद

उत्तर

5

आपको अनुक्रमण के पहले/दौरान ऐसा करने की आवश्यकता होगी।

Elasticsearch के भीतर, आप प्राप्त कर सकते हैं कि आप क्या अनुक्रमण के दौरान की जरूरत है:

  1. (अपने उद्देश्यों के लिए, स्ट्रिंग में लगातार अंक पर कब्जा करने की - good answer on this topic) एक नियमित अभिव्यक्ति रैप करने के लिए Pattern Analyzer उपयोग कर एक नया विश्लेषक को परिभाषित करें।
  2. निकाले गए समय को पकड़ने के लिए मैपिंग में अपना नया न्यूमेरिक फ़ील्ड बनाएं।
  3. इनपुट क्षेत्र से लॉग संदेश को नए संख्यात्मक क्षेत्र में कॉपी करने के लिए copy_to का उपयोग करें (2) जहां नया विश्लेषक इसे पार्स करेगा।

Analyze API परीक्षण उद्देश्यों के लिए सहायक हो सकता है।

+0

के रूप में उल्लेख किया है, यह अनुक्रमण के दौरान किया जाना चाहिए, ताकि के लिए इस जोड़ने के लिए मौजूदा डेटा, आपको फिर से अनुक्रमित करने की आवश्यकता होगी। इसके लिए यहां की रणनीति: http://stackoverflow.com/a/17446500/947986 – Dusty

+0

निराशाजनक है कि आपको ऐसी लंबाई में जाना है, तो कुछ ऐसा करें। क्या कोई कारण है कि किबाना के लिए प्लॉटिंग आदि के लिए मूल्यों को बाहर निकालना मुश्किल क्यों है? –

+0

कहें कि आप पिछले सप्ताह के लॉग (10 एमएम रिकॉर्ड) के माध्यम से 1+ सेकेंड लेने वाले अनुरोधों की तलाश करना चाहते हैं। डेटाबेस में, आप 10 एमएम पंक्तियों का टेबल-स्कैन करेंगे, एक रेगेक्स 10 एमएम बार प्रोसेसिंग के बाद एक सीएएसटी और तुलना करें .... इसमें काफी समय लगेगा! यदि आपने शुरुआत से अपने स्वयं के (अनुक्रमित) फ़ील्ड में निष्पादन समय लोड किया है, तो आप कुछ hops में रिकॉर्ड्स को एक btree (microseconds?) के नीचे प्राप्त कर पाएंगे। किबाना इस बात पर निर्भर करता है कि लोचदार खोज क्या अच्छा है: एकत्रीकरण, भारी भारोत्तोलन नहीं। –

1

प्रदर्शनकर्ता नहीं होने पर, यदि आप रीइंडेक्सिंग से बचें, तो आप किबाना में लिपिड फ़ील्ड का उपयोग कर सकते हैं।

यहाँ परिचय: https://www.elastic.co/blog/using-painless-kibana-scripted-fields

  • सक्षम डालकर दर्द रहित regex समर्थन अपने elasticsearch.yaml में निम्नलिखित:

    script.painless.regex.enabled: सच

  • पुनः आरंभ elasticsearch
  • प्रबंधन के माध्यम से किबाना में एक नया स्क्रिप्ट फ़ील्ड बनाएं -> इंडेक्स पैटर्न -> स्क्रिप्टेड फ़ील्ड्स
  • भाषा और प्रकार
  • वास्तविक स्क्रिप्ट बनाने के रूप में संख्या के रूप में दर्द रहित चयन करें, उदाहरण के लिए:
 
def logMsg = params['_source']['log_message']; 
if(logMsg == null) { 
return -10000; 
} 
def m = /.*accountExist execution time: ([0-9]+) ms.*$/.matcher(params['_source']['log_message']); 
if (m.matches()) { 
    return Integer.parseInt(m.group(1)) 
} else { 
    return -10000 
} 
  • आप वेबसाइट को फिर से लोड करना होगा पूरी तरह से करने के लिए नए क्षेत्रों निष्पादित करने के लिए, बस एक खुली खोज साइट पर एक खोज फिर से करने से नए फ़ील्ड नहीं उठाए जाएंगे। (यह लगभग मुझे इस काम को पाने की कोशिश कर छोड़ दिया -।-) की खोज में या दृश्यावलोकन

मुझे समझ नहीं है, कि यह लॉग प्रविष्टियों के लाखों लोगों के लिए स्क्रिप्ट क्षेत्रों के लिए performant नहीं है

  • स्क्रिप्ट का उपयोग, मेरे USECASE एक बहुत ही विशेष लॉग प्रविष्टि है, कि 10 लॉग होता है कुल मिलाकर दिन में और मैं केवल परिणामस्वरूप फ़ील्ड का उपयोग विज़ुअलाइज़ेशन या विश्लेषण में करता हूं जहां मैं नियमित प्रश्नों के माध्यम से उम्मीदवारों को कम करता हूं।

    यह समेकित होगा यदि उन क्षेत्रों को केवल उन स्थितियों में गणना की जा सकती है जहां आपको उनकी आवश्यकता है (या वे & समझने के लिए गणना योग्य हैं; यानी "वापसी -1000" अनावश्यक बनाने के लिए)। वर्तमान में वे लागू होंगे और प्रत्येक लॉग प्रविष्टि के लिए दिखाए जाएंगे।
    आप इस तरह के प्रश्नों के अंदर पटकथा उत्पन्न कर सकते हैं क्षेत्रों: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html लेकिन यह है कि एक सा हुड के नीचे burried की बहुत अधिक है, आसानी से बनाए रखने के लिए लगता है:/

  • संबंधित मुद्दे