डॉकर कंटेनर लॉग को एल्क में कैसे अग्रेषित करें?

मैं जानना चाहूंगा कि मेरे डॉकर कंटेनर लॉग को एल्क सर्वर पर अग्रेषित करने का सबसे आसान तरीका क्या है, अब तक मैंने इंटरनेट पर खोज करने के बाद जो समाधान आजमाए हैं, वे बिल्कुल भी काम नहीं करते हैं ।

मूल रूप से मेरे पास एक डॉकर छवि है जिसे मैं डॉकर-कंपोज़ का उपयोग करके चलाता हूं, यह कंटेनर स्थानीय रूप से कुछ भी लॉग नहीं करता है (यह विभिन्न सेवाओं से बना है लेकिन उनमें से कोई भी लॉगस्टैश या जो भी हो) लेकिन मुझे लॉगिंग दिखाई देती है docker logs -tf imageName या docker-compose logs. चूंकि मैं कंपोज़ के साथ कंटेनर शुरू कर रहा हूं, इसलिए मैं इसका उपयोग नहीं कर सकता (या कम से कम मुझे नहीं पता कि कैसे) --logs-driver डॉकर का विकल्प।

इस प्रकार मैं सोच रहा था कि क्या कोई मुझे इस बारे में थोड़ा बता सकता है कि उदाहरण के लिए एल्क कंटेनर में लॉग कैसे अग्रेषित किया जाए ।

अग्रिम धन्यवाद,

सादर

समाधान:

मैडीडी के लिए धन्यवाद मैं अपने मुद्दे को निम्नलिखित तरीके से हल करने के लिए प्राप्त कर सकता हूं, उल्लेख करें कि मैंने मूल एल्क-स्टैक-इन-कंटेनरों का उपयोग किया था जो मैडीडी ने अपनी पोस्ट में सुझाया था ।

पहले मैं अपडेट करता हूं docker-compose.yml लॉगिंग संदर्भ के लिए प्रविष्टियां जोड़ने के लिए मेरे कंटेनर की फ़ाइल जैसा कि मैडीडी ने मुझे बताया,मैंने प्रति सेवा एक प्रविष्टि शामिल की, मेरे डॉकर-रचना का एक स्निपेट इस तरह दिखता है

   version: '2'    services:      mosquitto:        image: ansi/mosquitto        ports:          - "1883:1883" # Public access to MQTT          - "12202:12202"  #mapping logs        logging:            driver: gelf           options:              gelf-address: udp://localhost:12202    redis:     image: redis     command: redis-server --appendonly yes     ports:       - "6379:6379" # No public access to Redis       - "12203:12203" #mapping logs     volumes:       - /home/dockeruser/redis-data:/data     logging:        driver: gelf       options:          gelf-address: udp://localhost:12203 

दूसरे, मुझे लॉग को अग्रेषित करने में सक्षम होने के लिए प्रति सेविस एक अलग पोर्ट नंबर का उपयोग करना पड़ा ।

अंत में, मैंने अपना एल्क कंटेनर अपडेट किया docker-compose.yml प्रत्येक यूपीडी पोर्ट को मैप करने के लिए फ़ाइल जहां मैं अपने लॉग को उस लॉग को भेज रहा था जिसे लॉगस्टैश सुनता है

logstash:  build: logstash/  command: logstash -f /etc/logstash/conf.d/logstash.conf  volumes:    - ./logstash/config:/etc/logstash/conf.d  ports:    - "5000:5000"    - "12202:12201/udp" #mapping mosquitto logs    - "12203:12201/udp" #mapping redis logs

इस विन्यास और की प्रविष्टि जोड़ने gelf {} में logstash.conf इसे काम किया, डॉकर सेवा के आईपी पते को ठीक से स्थापित करना भी महत्वपूर्ण है ।

सादर!

डॉकर कंपोज़ में लॉगिंग कीवर्ड है:स्रोत

logging:   driver: syslog  options:     syslog-address: "tcp://192.168.0.42:123"

तो अगर आपको पता है कि वहां से कहां जाना है, तो इसके लिए जाएं ।

यदि नहीं, तो मैं आपको सलाह दे सकता हूं कि आप इस पर गौर करें gelf डॉकर के लिए लॉगिंग ड्राइवर और यह logstash gelf इनपुट प्लगइन

यदि आप उदाहरण के लिए उपयोग करेंगे यह बेसिक एल्क-स्टैक-इन-कंटेनर सेटअप, आप डॉकर-कंपोज़ फ़ाइल को अपडेट करेंगे और पोर्ट जोड़ेंगे - "12201:12201/udp" करने के लिए logstash.

संपादित करें logstash.conf इनपुट अनुभाग:

input {    tcp {        port => 5000    }    gelf {    }}

फिर लॉगिंग ड्राइवर का उपयोग करने के लिए अपने कंटेनरों को कॉन्फ़िगर करें gelf (नहीं syslog) और विकल्प gelf-address=udp://ip_of_logstash:12201 (के बजाय syslog पते).

एकमात्र जादू जो आपको ध्यान रखना होगा वह यह है कि डॉकर को लॉगस्टैश कंटेनर का आईपी पता या होस्टनाम कैसे मिलेगा । आप इसे डॉकर-कंपोज़ नामकरण, डॉकर लिंक या केवल मैन्युअल रूप से हल कर सकते हैं ।

डॉकर और एल्क शक्तिशाली, लचीले, लेकिन इसलिए बड़े और जटिल जानवर भी हैं । पढ़ने और प्रयोग में कुछ गंभीर समय लगाने की तैयारी करें ।

यह सब खोजते समय आपके सामने आने वाले नए (और अधिमानतः बहुत विशिष्ट) प्रश्नों को खोलने से डरो मत ।

क्या आप प्रति सेवा 12201 पोर्ट को कॉन्फ़िगर करते हैं? क्योंकि आपको नहीं करना चाहिए

मैं इसे पूरी तरह से नहीं समझता,क्या आपका मतलब है कि मेरा लॉगिंग विकल्प प्रति कंटेनर के बजाय सेवाओं टैग के समान स्तर पर होना चाहिए?

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

मैडीडी मुझे उस एल्क स्टैक के साथ एक छोटी सी समस्या का सामना करना पड़ रहा है, मैं देख सकता हूं कि किबाना या इलास्टिक्स खोज लगभग 2 घंटे या तो रिबूट करता है, क्या आपने इस व्यवहार को भी देखा है? अगर मैं अपनी छवियों को बिल्ड के बजाय नवीनतम पर सेट करता हूं, तो क्या यह स्टैक अभी भी काम करेगा?

मुझे पता है कि अब आपका क्या मतलब है, मुझे लगता है कि मैंने कोशिश की कि त्रुटि प्राप्त करने से पहले कि बंदरगाह पहले से ही उपयोग में था, लेकिन मैं दूसरी कोशिश दे सकता हूं । फिर से धन्यवाद

मैडीडी मेरे सर्वर में कम लोड होने के लिए, मैं पोर्ट फ़ॉवरिंग को बदलना चाहता था, हालांकि, मैं इसे काम करने के लिए मैनेज नहीं कर सकता । मैंने प्रत्येक सेवा में इस तरह की एक पंक्ति जोड़ी गेलफ-पता: यूडीपी://172.17.0.1:12201, जब मैं उपयोग में बंदरगाह के कारण सेवाओं को शुरू करता हूं तो त्रुटि हो रही है त्रुटि: रेडिस ड्राइवर के लिए एंडपॉइंट टीटीएनबैकेंड_रेडिस_1 पर बाहरी कनेक्टिविटी प्रोग्रामिंग विफल रही : 0.0.0.0 के लिए बाध्य करें: 12201 विफल: पोर्ट पहले त्रुटि : ब्रोकर ड्राइवर के लिए एंडपॉइंट टीटीएनबैकेंड_ब्रोकर_1 पर बाहरी कनेक्टिविटी प्रोग्रामिंग विफल:0.0.0.0: 12201 के लिए बाध्य विफल: पोर्ट पहले से ही आवंटित है

मैंने ऐसा करने की कोशिश की, लेकिन डॉकर-कंपोज़ अप चलाते समय मैंने एक शिकायत देखी कि पोर्ट पहले से ही उपयोग में था ।

हां, क्योंकि आप अपने कंटेनरों पर लॉगस्टैश के लिए एक पोर्ट खोलते हैं, जबकि आपको इसे केवल लॉगस्टैश कंटेनर के लिए खोलना चाहिए । लॉगस्टैश कनेक्शन सुनने के लिए अन्य सभी कंटेनरों की कोई आवश्यकता नहीं है, इसलिए, उन्हें इसके लिए एक पोर्ट खोलने की आवश्यकता नहीं है ।

मुझे लगता है कि मैंने किया, क्या मुझे केवल गेलफ-एड्रेस: यूडीपी://172.17.0.1 जैसी लाइन जोड़नी चाहिए ? फिर यह शिकायत करेगा कि इसे एक बंदरगाह की आवश्यकता है

आजकल मैं “पोर्ट फ़ॉरवर्डिंग” समाधान का उपयोग करता रहता हूं । …