मैं कुछ गैर-तकनीकी लोगों को देखने के लिए ईएलके स्टैक में डेटा का एक सेट पार्स कर रहा हूं। इस के हिस्से के रूप में, मैं 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"]
}
}
यही तो मैं के लिए देख रहा हूँ की तरह लग रहा है। मैं इसे आज़मा दूंगा और रिपोर्ट करूंगा ... – redstonemercury
मुझे यह काम करने के लिए लॉगस्टैश अपग्रेड करना पड़ा, इसलिए देरी, लेकिन यह वही है जो मैं ढूंढ रहा हूं। त्वरित उत्तर के लिए धन्यवाद! स्वीकृत :) – redstonemercury