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

लॉग्स शोधणे म्हणजे विशिष्ट सर्व्हरमध्ये SSH करणे आणि grep चालवणे असे असायचे.

एखाद्या इन्सिडेंटच्या (incident) वेळी, एरर कोणत्या मशीनमध्ये आहे हे तुम्हाला अनेकदा समजत नाही. यामुळे तुम्हाला एका होस्टवरून दुसऱ्या होस्टवर जावे लागते आणि डोळ्यांनी टाइमस्टॅम्प्स (timestamps) जुळवण्याचा प्रयत्न करावा लागतो. जेव्हा तुम्हाला वेगाची गरज असते, तेव्हा ही प्रक्रिया अपयशी ठरते.

मी सेंट्रलाइज्ड लॉगिंगकडे वळलो आहे. आता, प्रत्येक सर्व्हरमधील प्रत्येक लॉग लाईन एकाच ठिकाणी उपलब्ध असते. मी प्रत्येक होस्टवर Grafana Alloy वापरून लॉग्स Loki कडे पाठवतो.

हे स्टॅक (stack) का?

  • ELK जड (heavy) आहे. Elasticsearch साठी खूप जास्त मेंटेनन्स आणि हार्डवेअर लागते.
  • Loki पूर्ण मजकुराऐवजी (full text) लेबल्स इंडेक्स करते. यामुळे ते चालवणे स्वस्त आणि सोपे होते.
  • तुमचे सर्व्हरचे प्रमाण (fleet) जसजसे वाढते, तसतसे SaaS टूल्स लवकर महाग होतात.
  • Alloy हे Grafana कडून आलेले नवीन स्टँडर्ड एजंट आहे. ते कार्यक्षम आणि विश्वसनीय आहे.

The Setup

Alloy प्रत्येक होस्टवरील फाइल्स वाचते. ते host, environment आणि service सारखी लेबल्स जोडते. त्यानंतर ते हे सर्व Loki कडे पाठवते. मी एक Slack bot देखील तयार केला आहे. तो Loki API वापरतो जेणेकरून टीम त्यांच्या चॅट चॅनेलवरून न बाहेर पडता लॉग्स मिळवू शकेल.

मला आलेल्या वास्तविक जगातील आव्हाने (Real-world challenges):

  • Permissions: Alloy स्वतःच्या युजर म्हणून चालते. जर तुमच्या ॲपचे लॉग्स प्रतिबंधित (restricted) असतील, तर Alloy शांतपणे फेल होते. तुम्हाला 'alloy' युजरला तुमच्या ॲपच्या ग्रुपमध्ये समाविष्ट करावे लागेल.
  • Mixed OS fleets: तुमच्याकडे Debian, Ubuntu आणि RHEL बॉक्सेस असतील. तुम्हाला प्रत्येकासाठी योग्य पॅकेज मॅनेजर वापरावे लागतील.
  • Legacy agents: जुने लॉग शिपर्समुळे 'डबल-शिपिंग' होऊ शकते. रोलआउट दरम्यान तुम्हाला ते शोधून काढून टाकावे लागेल.
  • Multiline logs: Java stack traces अनेक ओळींमध्ये पसरलेले असतात. मल्टिलाईन regex शिवाय, एकच एरर चाळीस वेगवेगळ्या आणि निरुपयोगी एन्ट्रीजमध्ये विभागली जाते.

The Golden Rule of Labels

लेबल्समध्ये हाय-कार्डिनॅलिटी (high-cardinality) डेटा टाकू नका. रिक्वेस्ट आयडी (request IDs) किंवा युजर आयडी (user IDs) कधीही लेबल्स म्हणून वापरू नका. यामुळे तुमचा इंडेक्स खराब होईल. सर्विस नेम किंवा एन्व्हायरमेंट सारख्या गोष्टींसाठी लेबल्स वापरा. इतर सर्व गोष्टींसाठी फिल्टर्स वापरा.

The Result

सेंट्रलाइज्ड लॉगिंग लॉग्सचे रूपांतर मेट्रिक्समध्ये (metrics) करते. एखाद्या व्यक्तीने समस्या लक्षात घेण्याची वाट पाहण्याऐवजी, तुम्ही एरर रेटवर अलर्ट सेट करू शकता. जेव्हा एखादा इन्सिडेंट येतो, तेव्हा उत्तर फक्त एका 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