𝗖𝗲𝗻𝘁𝗿𝗮𝗹𝗶𝘇𝗲𝗱 𝗟𝗼𝗴𝗴𝗶𝗻𝗴 𝗪𝗶𝘁𝗵 𝗚𝗿𝗮𝗳𝗮𝗻𝗮 𝗔𝗹𝗹𝗼𝘆 𝗮𝗻𝗱 𝗟𝗼𝗸𝗶

लॉग्स ढूँढने का मतलब पहले विशिष्ट सर्वरों में SSH करना और grep चलाना होता था।

किसी घटना (incident) के दौरान, आपको अक्सर पता नहीं होता कि किस मशीन (box) में एरर है। आप अलग-अलग होस्ट्स के बीच घूमते रहते हैं और आँखों से टाइमस्टैम्प्स मिलाने की कोशिश करते हैं। जब आपको तेज़ी की ज़रूरत होती है, तो यह प्रक्रिया विफल हो जाती है।

मैं सेंट्रलाइज्ड लॉगिंग पर आ गया हूँ। अब, हर सर्वर की हर लॉग लाइन एक ही जगह रहती है। मैं लॉग्स को Loki तक भेजने के लिए प्रत्येक होस्ट पर Grafana Alloy का उपयोग करता हूँ।

यह स्टैक (stack) क्यों?

  • ELK भारी है। Elasticsearch के लिए बहुत अधिक मेंटेनेंस और हार्डवेयर की आवश्यकता होती है।
  • Loki फुल टेक्स्ट के बजाय लेबल्स (labels) को इंडेक्स करता है। इससे इसे चलाना सस्ता और आसान हो जाता है।
  • जैसे-जैसे आपका फ़्लीट (fleet) बढ़ता है, SaaS टूल्स तेज़ी से महंगे हो जाते हैं।
  • Alloy, Grafana का नया स्टैंडर्ड एजेंट है। यह कुशल और विश्वसनीय है।

सेटअप (The Setup)

Alloy प्रत्येक होस्ट पर फ़ाइलों को पढ़ता है। यह host, environment, और service जैसे लेबल्स जोड़ता है। फिर यह इन्हें Loki पर पुश करता है। मैंने एक Slack bot भी बनाया है। यह Loki API का उपयोग करता है ताकि टीम अपने चैट चैनल को छोड़े बिना लॉग्स निकाल सके।

वास्तविक दुनिया में मेरे सामने आई चुनौतियाँ:

  • परमिशन (Permissions): Alloy अपने स्वयं के यूजर के रूप में चलता है। यदि आपके ऐप लॉग्स प्रतिबंधित (restricted) हैं, तो Alloy बिना किसी सूचना के विफल हो जाता है। आपको alloy यूजर को अपने ऐप ग्रुप्स में जोड़ना होगा।
  • मिश्रित OS फ़्लीट (Mixed OS fleets): आपके पास Debian, Ubuntu, और RHEL बॉक्स होंगे। आपको प्रत्येक के लिए सही पैकेज मैनेजर का उपयोग करना होगा।
  • पुराने एजेंट (Legacy agents): पुराने लॉग शिपर्स के कारण डबल-शिपिंग हो सकती है। रोलआउट के दौरान आपको उन्हें ढूँढकर हटाना होगा।
  • मल्टीलाइन लॉग्स (Multiline logs): Java stack traces कई लाइनों में फैले होते हैं। मल्टीलाइन regex के बिना, एक एकल एरर चालीस अलग-अलग, बेकार प्रविष्टियों (entries) में बदल जाता है।

लेबल्स का स्वर्णिम नियम (The Golden Rule of Labels)

लेबल्स में हाई-कार्डिनैलिटी (high-cardinality) डेटा न डालें। रिक्वेस्ट आईडी (request IDs) या यूजर आईडी (user IDs) का उपयोग कभी भी लेबल्स के रूप में न करें। इससे आपका इंडेक्स खराब हो जाएगा। सर्विस नेम या एनवायरनमेंट जैसी चीज़ों के लिए लेबल्स का उपयोग करें। बाकी सब चीज़ों के लिए फ़िल्टर्स का उपयोग करें।

परिणाम (The Result)

सेंट्रलाइज्ड लॉगिंग लॉग्स को मेट्रिक्स (metrics) में बदल देती है। आप किसी इंसान द्वारा समस्या को नोटिस करने का इंतज़ार करने के बजाय एरर रेट्स पर अलर्ट सेट कर सकते हैं। जब कोई घटना (incident) होती है, तो समाधान बस एक Slack कमांड की दूरी पर होता है।

Source: https://dev.to/azeemsidd3/centralized-logging-across-a-mixed-os-server-fleet-with-grafana-alloy-and-loki-51c6

Optional learning community: https://t.me/GyaanSetuAi