समस्या का विवरण

एनजीआईएनएक्स छवि को मुख्य एनजीआईएनएक्स एक्सेस और त्रुटि लॉग को डॉकर लॉग कलेक्टर को डिफ़ॉल्ट रूप से भेजने के लिए कॉन्फ़िगर किया गया है। यह उन्हें stdout और stderr से जोड़कर किया जाता है, जिसके कारण दोनों लॉग के सभी संदेशों को डॉकर होस्ट पर फ़ाइल /var/lib/docker/containers/<container id>/<container id>-json.log में संग्रहीत किया जाता है।

चूंकि लॉग को कंटेनर से बाहर निकालने और मेजबान में लाने की कड़ी मेहनत पहले ही हमारी देखभाल कर ली गई है, शायद हमें इसका लाभ उठाने की कोशिश करनी चाहिए? लेकिन /var/lib/docker/containers/ में कई अलग-अलग फ़ोल्डर हैं

# ls -alrt /var/lib/docker/containers/
total 84
drwx--x--x 14 root root 4096 Jul  4 13:40 ..
drwx------  4 root root 4096 Jul  4 13:55 a4ee4224c3e4c68a8023eb63c01b2a288019257440b30c4efb7226eb83629956
drwx------  4 root root 4096 Jul  6 16:24 59d1465b5c42f2ce6b13747c39ff3995191d325d641b6ef8cad1a8446247ef24
...
drwx------  4 root root 4096 Jul  9 06:34 cab3407af18d778b259f54df16e60f5e5187f14b01a020b30f6c91c6f8003bdd
drwx------  4 root root 4096 Jul  9 06:35 0b99140af456b29af6fcd3956a6cdfa4c78d1e1b387654645f63b8dc4bbf049c
drwx------ 21 root root 4096 Jul  9 06:35 .

भले ही हम उन्हें छोटा करें a> /var/lib/docker/containers/ के माध्यम से किसी भी प्रकार की फ़ाइलों के लिए पुनरावर्ती खोज करके -json.log और स्ट्रिंग upstream_response_time

# grep -lr "upstream_response_time" /var/lib/docker/containers/ --include "*-json.log"
/var/lib/docker/containers/cfe8...fe18/cfe8...fe18-json.log
/var/lib/docker/containers/c3c3...6662/c3c3...6662-json.log

... अभी भी हमें ऐसी स्थिति में छोड़ देता है जहां हमें कंटेनरों के शुरू/रोकने के कारण सही फ़ोल्डर खोजने के लिए लगातार कदम उठाना होगा ... हम उन्हें क्रॉल करने के लिए FileBeat को पुन: कॉन्फ़िगर करने में फंस जाएंगे।

प्रश्न: तो कैसे एक अनुमानित नाम देने के लिए डॉकटर कंटेनर लॉग फ़ोल्डरों का नाम बदला जा सकता है?

वैकल्पिक

यहां कुछ अन्य विधियां दी गई हैं जिन्हें मैंने खारिज कर दिया है लेकिन अलग होने के लिए स्वतंत्र महसूस करें।

एक named volume सेट करना

$ tree /var/lib/docker/volumes/*nginx-log-volume
/var/lib/docker/volumes/my_swarm_stack_nginx-log-volume
└── _data
    ├── access.log -> /dev/stdout
    └── error.log -> /dev/stderr

नामित वॉल्यूम stack नाम और named volume नाम: my_swarm_stack_nginx-log-volume के संयोजन के रूप में मौजूद है। लेकिन नियमित फ़ाइलें होने के बजाय, ये std स्ट्रीम के लिए किसी प्रकार का सॉफ्टलिंक/पाइप हैं। तो मुझे लगा कि यह तरीका अमान्य है।

4
pulkitsinghal 9 जुलाई 2018, 10:47

1 उत्तर

सबसे बढ़िया उत्तर

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

मेरा सुझाव है कि आप केवल add_docker_metadata प्रोसेसर का उपयोग करें। यह कंटेनर द्वारा उत्पादित प्रत्येक लॉग के लिए image और container name जैसी उपयोगी जानकारी संलग्न करेगा, जिसे तब drop प्रोसेसर द्वारा जांचा जा सकता था और आप यहां ऐसी स्थितियां बना सकते हैं कि आप केवल लॉग स्वीकार करते हैं केवल एक विशिष्ट कंटेनर से।

processors:
- add_docker_metadata:
- drop_event:
    when:
      not:
         regexp:
            docker.container.name: "^nginx"

डॉकर मेटाडेटा दस्तावेज़ीकरण जोड़ना

ड्रॉप प्रोसेसर का उपयोग करके फ़िल्टरिंग

0
Abhishek Jaisingh 18 मार्च 2020, 22:08