2015-10-28 6 views
6

मैं कुछ गैर-तकनीकी लोगों को देखने के लिए ईएलके स्टैक में डेटा का एक सेट पार्स कर रहा हूं। इस के हिस्से के रूप में, मैं ElasticSearch में भेजने से पहले ईवेंट से फ़ील्ड्स के विशिष्ट ज्ञात सबसेट को छोड़कर सभी फ़ील्ड को हटाना चाहता हूं।फ़ील्ड की निर्दिष्ट सूची को छोड़कर सभी फ़ील्ड के लिए लॉगस्टैश फ़िल्टर remove_field

मैं स्पष्ट रूप से ऐसा तरह एक उत्परिवर्तन फिल्टर में ड्रॉप करने के लिए प्रत्येक क्षेत्र निर्दिष्ट कर सकते हैं:

filter { 
    mutate { 
     remove_field => [ "throw_away_field1", "throw_away_field2" ] 
    } 
} 

इस मामले में, किसी भी समय एक नए क्षेत्र इनपुट डेटा पर जुड़ जाता है (जो अक्सर के बाद से डेटा खींच लिया जाता है हो सकता है एक कतार से और कई उद्देश्यों के लिए एकाधिक प्रणालियों द्वारा उपयोग किया जाता है) इसे फ़िल्टरिंग के लिए एक अपडेट की आवश्यकता होगी, जो अतिरिक्त ओवरहेड है जिसकी आवश्यकता नहीं है। उल्लेख नहीं है कि कुछ संवेदनशील डेटा ने इनपुट धाराओं को अपडेट किए जाने के दौरान और जब फ़िल्टरिंग अपडेट की गई थी, तब यह खराब हो सकता था।

क्या किसी ऑब्जेक्ट के प्रत्येक फ़ील्ड पर पुन: स्थापित करने के लिए लॉगस्टैश फ़िल्टर का उपयोग करने का कोई तरीका है, और remove_field अगर यह फ़ील्ड नामों की एक प्रदान की गई सूची में नहीं है? या मुझे ऐसा करने के लिए एक कस्टम फ़िल्टर लिखना होगा? असल में, प्रत्येक वस्तु के लिए, मैं सिर्फ 8 विशिष्ट फ़ील्ड रखना चाहता हूं, और बिल्कुल और सब कुछ टॉस करना चाहता हूं।

ऐसा लगता है कि बहुत कम if ![field] =~ /^value$/ टाइप तर्क logstash.conf फ़ाइल में उपलब्ध है, लेकिन मुझे कोई उदाहरण नहीं दिखता है जो फ़ील्ड्स पर for each शैली में पुन: सक्रिय होगा और फ़ील्ड नाम की तुलना मूल्यों की सूची में करेगा ।

उत्तर:

1.5.0 के लिए logstash अपग्रेड करने के बाद इस तरह के सूखे बेर के रूप में प्लगइन एक्सटेंशन का उपयोग करने में सक्षम हो, समाधान इस तरह देख समाप्त हो गया:

filter { 
    prune { 
     interpolate => true 
     whitelist_names => ["fieldtokeep1","fieldtokeep2"] 
    } 
} 

उत्तर

5

Prune श्वेत सूची में होना चाहिए क्या आप देख रहे हैं।

अधिक विशिष्ट नियंत्रण के लिए, रूबी फ़िल्टर को छोड़ना शायद अगला कदम है।

+0

यही तो मैं के लिए देख रहा हूँ की तरह लग रहा है। मैं इसे आज़मा दूंगा और रिपोर्ट करूंगा ... – redstonemercury

+0

मुझे यह काम करने के लिए लॉगस्टैश अपग्रेड करना पड़ा, इसलिए देरी, लेकिन यह वही है जो मैं ढूंढ रहा हूं। त्वरित उत्तर के लिए धन्यवाद! स्वीकृत :) – redstonemercury

3

एक अन्य विकल्प नई मैदान में और से उपयोग मे बदलें पार्स json स्थानांतरित करने के लिए, उदा होगा:

filter { 
    json { 
     source => "json" 
     target => "parsed_json" 
    } 

    mutate { 
     add_field => {"nested_field" => "%{[parsed_json][nested_field]}"} 
     remove_field => [ "json", "parsed_json" ] 
    } 
} 
+0

यह एक अच्छा वैकल्पिक समाधान है, और मुझे प्रिंटर फ़िल्टर स्थापित करने के लिए लॉगस्टैश अपग्रेड करने से रोक दिया होगा। – redstonemercury

+0

@redstonemercury मुझे लगता है कि आप लॉगस्टैश 'logstash-filter-prune' के लिए अपग्रेड करने के बजाय प्लगइन इंस्टॉल कर सकते हैं – oivoodoo

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