2015-05-13 6 views
5

मेरे पास कुछ लॉगस्टैश इनपुट है जहां मैं डुप्लिकेट को हटाने के लिए document_id का उपयोग करता हूं। हालांकि, अधिकांश इनपुट में document_id नहीं है। निम्नलिखित document_id के माध्यम से वास्तविक अंगूठे हैं, लेकिन यदि यह अस्तित्व में नहीं है, तो इसे सचमुच %{document_id} के रूप में स्वीकार किया जाता है, जिसका अर्थ है कि अधिकांश दस्तावेज़ एक-दूसरे के डुप्लिकेट के रूप में देखे जाते हैं। यहां मेरा आउटपुट ब्लॉक जैसा दिखता है:documentstid के साथ elasticsearch के लिए logstash आउटपुट; जब मेरे पास document_id नहीं है तो क्या करें?

output { 
     elasticsearch_http { 
      host => "127.0.0.1" 
      document_id => "%{document_id}" 
     } 
} 

मैंने सोचा कि मैं आउटपुट में सशर्त उपयोग करने में सक्षम हो सकता हूं। यह विफल रहता है, और त्रुटि कोड के नीचे दी गई है।

output { 
     elasticsearch_http { 
      host => "127.0.0.1" 
      if document_id { 
       document_id => "%{document_id}" 
      } 
     } 
} 

Error: Expected one of #, => at line 101, column 8 (byte 3103) after output { 
     elasticsearch_http { 
    host => "127.0.0.1" 
    if 

मैं कुछ "अगर" बयान करने की कोशिश की और वे सब असफल है, जिसके कारण मैं समस्या यह है कि ब्लॉक में किसी भी तरह की एक सशर्त रहा है मान लेते हैं। यहाँ विकल्प मैंने कोशिश कर रहे हैं: इस को हल करने के

if document_id <> "" { 
if [document_id] <> "" { 
if [document_id] { 
if "hello" <> "" { 

उत्तर

9

आप सशर्त विचार के करीब हैं लेकिन आप इसे प्लगइन ब्लॉक के अंदर नहीं रख सकते हैं। बजाय यह करें: (। उपयोग करने के लिए UUID फिल्टर भी अच्छा है लेकिन अन्य उत्तर में से एक में सुझाव)

output { 
    if [document_id] { 
    elasticsearch_http { 
     host => "127.0.0.1" 
     document_id => "%{document_id}" 
    } 
    } else { 
    elasticsearch_http { 
     host => "127.0.0.1" 
    } 
    } 
} 

+0

सही है। जैसा कि मैंने वैल से कहा था, अगर यूआईआईडी गलती से छोड़ा जाता है तो मैं इसे पसंद करता हूं। – tedder42

5

एक तरह से यकीन है कि एक document_id हमेशा उपलब्ध है बनाने के लिए है। आप फिल्टर अनुभाग में UUID filter जोड़ कर इसे प्राप्त कर सकते हैं जो document_id फ़ील्ड को मौजूद नहीं करेगा यदि यह मौजूद नहीं है।

filter { 
    if "" in [document_id] { 
     uuid { 
      target => "document_id" 
     } 
    } 
} 

मैगनस पीठ के सुझाव के अनुसार संपादित। धन्यवाद!

+0

एक क्षेत्र के होने की जाँच करने के लिए विशिष्ट तरीका 'हो सकता है अगर [ document_id] {...} '। –

+0

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

+0

निश्चित बात! सर्वश्रेष्ठ दोनों दृष्टिकोणों को आजमाएं और खुद के लिए देखें, हालांकि; – Val

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