2015-09-21 7 views
7

के लिए मैं एक डॉकर पर्यावरण के लिए fluentd का उपयोग कर केंद्रीकृत लॉगिंग सिस्टम बनाने की कोशिश कर रहा हूं। वर्तमान में, मैं फ्लुएंट डॉकर लॉगिंग ड्राइवर का उपयोग करके फ्लैंटड पर डॉकर लॉग भेजने में सक्षम हूं जो कि एक क्लीनर समाधान है जो in_tail विधि का उपयोग करके डॉकर लॉग फ़ाइल पढ़ने की तुलना में है। हालांकि, मैं वर्तमान में बहु लाइन लॉग मुद्दे पर इस मुद्दे का सामना कर रहा हूं।डॉकर फ्लुएंट लॉगिंग ड्राइवर मल्टीलाइन

enter image description here

आप ऊपर चित्र से देख सकते हैं, बहु लाइनों लॉग इन करने के क्रम है जो उपयोगकर्ता के लिए बहुत भ्रामक है से बाहर हैं। क्या इसका हल किया जा सकता है?

धन्यवाद।

Cw

+1

कुछ और शोध करने के बाद बस इस विषय पर कुछ टिप्पणियां जोड़ने के लिए। ऑर्डर समस्या से बाहर फ्लुएंटेड टाइम रिज़ॉल्यूशन के कारण है (अब कोई उप-दूसरा समर्थन नहीं है)। इस उत्तर के लिए धन्यवाद [लिंक] (http://stackoverflow.com/questions/27928479/fluentd-loses-milliseconds-and-now-log-messages-are-stored-out-of-order-in-elast), i रिकॉर्ड क्रम में प्रदर्शित करने में सक्षम हैं और कम से कम उपयोगकर्ता इस लॉग को पढ़ने के दौरान भ्रमित नहीं होंगे। –

+0

मिलीसेकंद मुद्दे के लिए एक और समाधान के लिए, इस ब्लॉग पोस्ट की जांच करें http://work.haufegroup.io/log-aggregation/#timestamp-fix – dutzu

+0

क्या आपके पास अभी तक कोई समाधान है? मुझे यह लिंक https://www.fluentd.org/guides/recipes/docker-logging को मल्टीलाइन लॉग इन डॉकर में मर्ज करने से पहले मिला है, लेकिन कार्यान्वयन लॉग प्रारूप के लिए बहुत विशिष्ट है। – Nextlink

उत्तर

1

उनके दस्तावेज में पार्स करने multiline पर एक नज़र डालें: http://docs.fluentd.org/articles/parser-plugin-overview#

आप मूल रूप से एक regex कि एक नए लॉग संदेश की शुरुआत से मेल खाएंगे निर्दिष्ट करने के लिए है और वह बहु लॉग एकत्र करने के लिए सक्षम हो जाएगा fluentd एक संदेश में घटनाओं। उनके डॉक्स से एक सामान्य जावा स्टैकट्रेस के लिए

उदाहरण:

format multiline format_firstline /\d{4}-\d{1,2}-\d{1,2}/ format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/

+1

फ्लुएंट के दस्तावेज़ों के अनुसार "' multiline' केवल in_tail प्लगइन के साथ काम करता है। " जिसका अर्थ यह है कि जब आप डॉकर से इनपुट के लिए '@type forward' का उपयोग कर रहे हैं तो यह काम नहीं करेगा। –

+0

@AshBerlin - आप इसे एकाधिक प्लगइन में भी उपयोग कर सकते हैं, पार्सिंग का समर्थन करने वाले कोर प्लगइन्स यहां वर्णित हैं http://docs.fluentd.org/articles/parser-plugin-overview#list-of-core-input-plugins- साथ-पार्सर-सपोर्ट – dutzu

+0

@ एशबर्लिन - इसके अलावा, शायद in_forcp के साथ in_forward प्लगइन को प्रतिस्थापित करना संभव है, वे मूल रूप से एक ही चीज हैं Iforward भी यूडीपी पर सुनता है। और in_tcp उन प्लगइनों में से एक है जो फॉर्मेट पार्सर्स को आउट-ऑफ-द-बॉक्स – dutzu

0

मैं जानता हूँ कि यह नहीं और fluentd सवाल का "जवाब" है। एक लॉग लाइन पार्स करने

मैं fluentd के लिए एक समाधान कभी नहीं मिली के बाद

json { 
     source => "log_message" 
     target => "json" 
    } 
उसकी फिल्टर करने के लिए

जोड़कर http://www.labouisse.com/how-to/2015/09/14/elk-and-docker-1-8

JSON समर्थन है, इसलिए इस के साथ चला गया: लेकिन इस गाइड logstash साथ समस्या का हल समाधान के बजाय

अपडेट किया गया लिंक

+0

पर धक्का देने से पहले फ़िल्टर में उन्हें पार्सल करने का प्रयास करें। यह लिंक अब मर चुका है। क्या आप अधिक विस्तार से समझा सकते हैं? – herm

0

धाराप्रवाह-प्लगइन-कॉन्सट प्लगिंग का उपयोग करके मुझे उपरोक्त समस्या को ठीक करने में मदद मिली।

धाराप्रवाह-conf में इन पंक्तियों को जोड़ने

<filter **> 
    @type concat 
    key log 
    stream_identity_key container_id 
    multiline_start_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} 
    multiline_end_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} 
</filter> 

मेरे नियमित अभिव्यक्ति लॉग्स में DateTimeStamp के लिए जाँच कर रहा है जहाँ प्रत्येक पंक्ति और

2017-09-21T15:03:27Z tag  {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:27.289 INFO 1 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.6"} 
2017-09-21T15:03:28Z tag  {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:28.191 INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext"} 
नीचे का दिनांक और समय-चिह्न ( "log":"2017-09-21 15:03:27.289 पर ध्यान देना) के साथ शुरू होता

इसके अलावा, मुझे प्लगइन

RUN ["gem", "install", "fluent-plugin-concat", "--version", "2.1.0"] 
#Works with Fluentd v0.14-debian 
प्लगइन स्थापित करने के लिए डॉकरफ़ाइल में नीचे पंक्तियां जोड़नी थीं

हालांकि यह अपवाद तब होता है जब कोई अपवाद होता है, लेकिन इससे पहले भी काफी बेहतर होता है। Fluentd Link, for reference

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