تسجيل السجلات المركزي باستخدام Grafana Alloy و Loki

كان العثور على السجلات يعني سابقاً الدخول عبر SSH إلى خوادم محددة وتشغيل أمر grep.

أثناء وقوع حادث تقني، غالباً ما لا تعرف أي جهاز يحتوي على الخطأ. ينتهي بك الأمر بالتنقل بين المضيفين ومحاولة مطابقة الطوابع الزمنية بالعين المجردة. تفشل هذه العملية عندما تحتاج إلى السرعة.

انتقلتُ إلى تسجيل السجلات المركزي. الآن، كل سطر سجل من كل خادم موجود في مكان واحد. أستخدم Grafana Alloy على كل مضيف لإرسال السجلات إلى Loki.

لماذا هذه المجموعة التقنية (stack)؟

  • ELK ثقيلة. يتطلب Elasticsearch الكثير من الصيانة والأجهزة.
  • يقوم Loki بفهرسة التسميات (labels) بدلاً من النص الكامل، مما يجعله أرخص وأسهل في التشغيل.
  • تصبح أدوات SaaS باهظة الثمن بسرعة مع نمو أسطول خوادمك.
  • Alloy هو العميل (agent) القياسي الجديد من Grafana، وهو فعال وموثوق.

الإعداد

يقرأ Alloy الملفات على كل مضيف، ويضيف تسميات (labels) مثل host و environment و service ، ثم يقوم بدفعها إلى Loki. قمت أيضاً ببناء بوت لـ Slack؛ حيث يتصل بـ Loki API حتى يتمكن الفريق من سحب السجلات دون مغادرة قناة الدردشة الخاصة بهم.

تحديات واقعية واجهتها:

  • الأذونات: يعمل Alloy كمستخدم مستقل. إذا كانت سجلات تطبيقك مقيدة، فسيفشل Alloy بصمت. يجب عليك إضافة مستخدم alloy إلى مجموعات تطبيقك.
  • أساطيل أنظمة تشغيل مختلطة: سيكون لديك أجهزة Debian و Ubuntu و RHEL. يجب عليك استخدام مديري الحزم (package managers) الصحيحين لكل منها.
  • الوكلاء القدامى (Legacy agents): يمكن أن تتسبب أدوات نقل السجلات القديمة في إرسال السجلات بشكل مكرر. يجب عليك العثور عليها وإزالتها أثناء عملية النشر.
  • السجلات متعددة الأسطر: تمتد تتبعات الخطأ (stack traces) في Java عبر أسطر عديدة. بدون تعبير نمطي (regex) متعدد الأسطر، سيتحول خطأ واحد إلى أربعين إدخالاً منفصلاً وغير مفيد.

القاعدة الذهبية للتسميات (Labels)

لا تضع بيانات ذات كثافة عالية (high-cardinality) في التسميات. لا تستخدم أبداً معرفات الطلبات (request IDs) أو معرفات المستخدمين (user IDs) كتسميات، لأن ذلك سيؤدي إلى تعطل الفهرس الخاص بك. استخدم التسميات لأشياء مثل اسم الخدمة (service name) أو البيئة (environment)، واستخدم المرشحات (filters) لكل شيء آخر.

النتيجة

يحول تسجيل السجلات المركزي السجلات إلى مقاييس (metrics). يمكنك ضبط تنبيهات بناءً على معدلات الخطأ بدلاً من انتظار ملاحظة بشري للمشكلة. عندما يقع حادث، تكون الإجابة على بعد أمر واحد في Slack.

المصدر: https://dev.to/azeemsidd3/centralized-logging-across-a-mixed-os-server-fleet-with-grafana-alloy-and-loki-51c6

مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi