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

پہلے لاگز (logs) تلاش کرنے کا مطلب مخصوص سرورز میں SSH کرنا اور grep چلانا ہوتا تھا۔

کسی حادثے (incident) کے دوران، آپ کو اکثر معلوم نہیں ہوتا کہ کس مشین (box) میں غلطی (error) موجود ہے۔ آپ مختلف ہوسٹس (hosts) کے درمیان گھومتے رہتے ہیں اور آنکھوں سے ٹائم اسٹیمپ (timestamps) ملانے کی کوشش کرتے ہیں۔ جب آپ کو تیزی کی ضرورت ہو تو یہ طریقہ ناکام ہو جاتا ہے۔

میں سینٹرلائزڈ لاگنگ کی طرف منتقل ہو گیا۔ اب، ہر سرور کی ہر لاگ لائن ایک ہی جگہ موجود ہوتی ہے۔ میں لاگز کو Loki تک پہنچانے کے لیے ہر ہوسٹ پر Grafana Alloy استعمال کرتا ہوں۔

یہ اسٹیک (stack) کیوں؟

  • ELK بھاری ہے۔ Elasticsearch کو بہت زیادہ دیکھ بھال (maintenance) اور ہارڈ ویئر کی ضرورت ہوتی ہے۔
  • Loki مکمل متن (full text) کے بجائے لیبلز (labels) کو انڈیکس کرتا ہے۔ اس سے اسے چلانا سستا اور آسان ہو جاتا ہے۔
  • جیسے جیسے آپ کا نیٹ ورک (fleet) بڑھتا ہے، SaaS ٹولز تیزی سے مہنگے ہو جاتے ہیں۔
  • Alloy، Grafana کا نیا اسٹینڈرڈ ایجنٹ ہے۔ یہ موثر اور قابل اعتماد ہے۔

The Setup

Alloy ہر ہوسٹ پر فائلوں کو پڑھتا ہے۔ یہ host، environment، اور service جیسے لیبلز شامل کرتا ہے۔ پھر یہ انہیں Loki پر بھیج دیتا ہے۔ میں نے ایک Slack bot بھی بنایا ہے۔ یہ Loki API کو استعمال کرتا ہے تاکہ ٹیم اپنے چیٹ چینل کو چھوڑے بغیر لاگز حاصل کر سکے۔

وہ حقیقی دنیا کے چیلنجز جن کا میں نے سامنا کیا:

  • Permissions: Alloy اپنے ایک الگ صارف (user) کے طور پر چلتا ہے۔ اگر آپ کے ایپ لاگز محدود (restricted) ہیں، تو Alloy خاموشی سے ناکام ہو جاتا ہے۔ آپ کو alloy صارف کو اپنے ایپ گروپس میں شامل کرنا ہوگا۔
  • Mixed OS fleets: آپ کے پاس Debian، Ubuntu، اور RHEL مشینیں ہوں گی۔ آپ کو ہر ایک کے لیے درست پیکیج مینیجرز استعمال کرنے ہوں گے۔
  • Legacy agents: پرانے لاگ شیپرز (log shippers) کی وجہ سے ڈیٹا دو بار بھیجا جا سکتا ہے۔ آپ کو رول آؤٹ کے دوران انہیں تلاش کر کے ہٹانا ہوگا۔
  • Multiline logs: Java stack traces کئی لائنوں پر محیط ہوتے ہیں۔ ملٹی لائن regex کے بغیر، ایک سنگل ایرر چالیس الگ الگ اور بے کار اندراجات (entries) بن جاتا ہے۔

The Golden Rule of Labels

لیبلز میں ہائی کارڈینالٹی (high-cardinality) ڈیٹا نہ ڈالیں۔ ریکوسٹ آئی ڈیز (request IDs) یا یوزر آئی ڈیز (user IDs) کو کبھی بھی لیبلز کے طور پر استعمال نہ کریں۔ اس سے آپ کا انڈیکس خراب ہو جائے گا۔ لیبلز کو سروس کے نام یا انوائرمنٹ جیسی چیزوں کے لیے استعمال کریں۔ باقی ہر چیز کے لیے فلٹرز کا استعمال کریں۔

The Result

سینٹرلائزڈ لاگنگ لاگز کو میٹرکس (metrics) میں بدل دیتی ہے۔ آپ کسی انسان کے مسئلہ محسوس کرنے کا انتظار کرنے کے بجائے ایرر ریٹس (error rates) پر الرٹ سیٹ کر سکتے ہیں۔ جب کوئی حادثہ پیش آتا ہے، تو اس کا حل صرف ایک 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