2015-07-09 122 views
6

का उपयोग कर बेस्ट डॉकर लॉगिंग आर्किटेक्चर हाल ही में मैं ईएलके स्टैक का उपयोग करके सर्वश्रेष्ठ डॉकर लॉगिंग तंत्र को खोजने का प्रयास कर रहा हूं। मुझे उत्पादन में उपयोग करने वाले सर्वोत्तम काम प्रवाह के बारे में कुछ प्रश्न हैं। हमारे सिस्टम में टॉमकैट, पोस्टग्रेएसक्यूएल, मोंगोडीबी, एनजिनक्स, रैबिटएमक्यू, कॉचबेस इत्यादि सहित विशिष्ट सॉफ़्टवेयर स्टैक है। अभी तक, हमारा स्टैक कोरोस क्लस्टर में चलता है। कृपया नीचे दिए गए मेरे प्रश्नईएलके स्टैक

  1. ईएलके स्टैक के साथ, लॉग अग्रेषण करने के लिए सबसे अच्छी पद्धति क्या है - क्या मुझे लंबरजैक का उपयोग करना चाहिए? मैं यह पूछ रहा हूं क्योंकि मैंने वर्कफ़्लो देखा है जहां लोग लॉगस्टैश में लॉग अग्रेषित करने के लिए सिस्लॉग/रुस्लॉग का उपयोग करते हैं।
  2. चूंकि हमारे सभी सॉफ़्टवेयर टुकड़े कंटेनरकृत हैं, क्या मुझे अपने सभी कंटेनरों में लॉग-फ़ॉरवर्डर शामिल करना चाहिए? मैं ऐसा करने की योजना बना रहा हूं क्योंकि मेरे अधिकांश कंटेनर स्वास्थ्य के आधार पर नोड्स स्विच करते हैं, इसलिए मैं फाइल सिस्टम को कंटेनर से होस्ट करने के लिए उत्सुक नहीं हूं।
  3. क्या मुझे लॉग को अग्रेषित करने में ब्रोकर के रूप में रेडिस का उपयोग करना चाहिए? यदि हां क्यों?
  4. लॉग-कॉन्फ़िगरेशन फ़ाइलों को लिखना कितना मुश्किल है जो लॉग-स्टेश पर लॉग प्रारूप को अग्रेषित करने के लिए परिभाषित करता है?

यह एक व्यक्तिपरक प्रश्न है, लेकिन मुझे यकीन है कि यह एक समस्या है जिसे लोगों ने बहुत पहले हल किया है और मैं पहिया को फिर से आविष्कार करने के इच्छुक नहीं हूं।

उत्तर

4

अच्छे प्रश्न और उत्तर कई अन्य मामलों में जैसे हैं - "यह निर्भर करता है"।

  1. शिपिंग लॉग्स - हम कुछ मामलों में आंतरिक रूप से डोकर कंटेनर और logstash-फारवर्डर के रूप में rsyslog का उपयोग करें - logstash-फारवर्डर का लाभ यह है लॉग एन्क्रिप्ट करता है और उन्हें कुछ मामलों है कि महत्वपूर्ण है में तो संपीड़ित करता है। मुझे rsyslog संसाधनों पर बहुत स्थिर और कम होने के लिए लगता है ताकि हम इसे डिफ़ॉल्ट शिपर के रूप में उपयोग कर सकें। पूर्ण लॉगस्टैश छोटी मशीनों के लिए भारी हो सकता है (लॉगस्टैश के बारे में कुछ और डेटा - http://logz.io/blog/5-logstash-pitfalls-and-how-to-avoid-them/)

  2. हम भी पूरी तरह से डॉकराइज्ड हैं और प्रत्येक rsyslog/lumberjack के लिए एक अलग डॉकर का उपयोग करते हैं। बनाए रखने में आसान, संस्करण अपडेट करें और आवश्यकता होने पर चारों ओर स्थानांतरित करें।

  3. हां, निश्चित रूप से रेडिस का उपयोग करें। मैंने उत्पादन ईएलके (http://logz.io/blog/deploy-elk-production/) बनाने के बारे में एक ब्लॉग लिखा था - मैंने उत्पादन में ईएलके को तैनात करने के लिए सही आर्किटेक्चर के बारे में बताया था

  4. यह सुनिश्चित नहीं है कि आप इसके साथ क्या हासिल करने की कोशिश कर रहे हैं।

HTH

2

डोकर अगस्त 2015 के रूप में, "Logging Driver" ताकि आप अन्य स्थानों में लॉग भेज सकते है। लॉग को दूरस्थ रूप से शिप करने के लिए ये समर्थित तरीका हैं।

0

मैं हर डोकर छवि में प्रवेश फारवर्डर डालने के खिलाफ की सिफारिश करेंगे।इससे आपके डॉकर कंटेनर में अनियंत्रित जटिलता और ब्लोट जोड़ा जाता है। एक क्लीनर समाधान लॉग फॉरवर्डर (एलस्टिक से नवीनतम लॉग फॉरवर्डर FileBeat, जो लॉगस्टैश फॉरवर्डर को प्रतिस्थापित करता है) को अपने कंटेनर में रखना है और मेजबान मशीन की /var/lib/docker निर्देशिका को उस कंटेनर के वॉल्यूम के रूप में माउंट करना है।

docker run --detach --name=docker-filebeat -v /var/lib/docker:/var/lib/docker

/var/lib/docker मेजबान के डोकर डेमॉन पर चल रहे हर कंटेनर के लिए सभी लॉग होता है। इस निर्देशिका में लॉग फ़ाइलों का डेटा वही डेटा है जो आपको प्रत्येक कंटेनर पर docker logs <container_id> चलाने से प्राप्त होगा।

फिर filebeat.yml विन्यास फाइल में, डाल:

filebeat: 
    prospectors: 
    - 
     paths: 
     - /var/lib/docker/containers/*/*.log 

फिर अपने ELK ढेर के आराम करने के लिए आगे और कंटेनर शुरू करने के लिए Filebeat config। उस मशीन पर सभी डॉकर कंटेनर लॉग आपके ईएलके स्टैक को स्वचालित रूप से अग्रेषित किए जाएंगे।

इस दृष्टिकोण के बारे में अच्छी बात यह है कि यह आपको मेजबान सिस्टम लॉग के बाकी हिस्सों को आगे बढ़ाने की अनुमति देता है। बस होस्ट सिस्टम लॉग फ़ाइलों को इंगित करने वाली एक और वॉल्यूम जोड़ें जिसे आप आगे बढ़ाना चाहते हैं और उस पथ को अपने filebeat.yml कॉन्फ़िगरेशन में भी जोड़ें।

मुझे यह विधि क्लीनर और अन्य विधियों की तुलना में अधिक लचीला लगता है जैसे डॉकर लॉगिंग ड्राइवरों का उपयोग करना क्योंकि आपका डॉकर सेटअप शेष रहता है। आपको प्रत्येक डॉकर रन कमांड (या डॉकर डिमन पैरामीटर) में लॉगिंग ड्राइवर झंडे जोड़ने की ज़रूरत नहीं है।

+1

यह खतरनाक है क्योंकि आप अपने लॉगस्टैश त्रुटि लॉग को अनंत लूपिंग को समाप्त कर सकते हैं जो उचित रूप से पार्स नहीं करते हैं, यहां विभिन्न लॉग प्रकारों की पहचान करना भी मुश्किल है –

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