Squzy - نظام مراقبة ذاتي مفتوح المصدر مجاني مع الحوادث والإشعارات

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



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



نتيجة لذلك ، حصلنا على نظام مراقبة كامل ، وهو حل مضيف ذاتي مفتوح المصدر تمامًا ولا يحتوي على اتصالات خارجية ، مع حوادث يحددها المستخدم تمامًا.



وفي هذا المنشور نود أن نقدم لك المنتج الناتج.



تفاصيل تقنية



تم اختيار بنية الخدمات المصغرة للتطوير. تم تطوير الواجهة الخلفية في GoLang كلغة سريعة ومريحة لتطوير الخدمات المصغرة. استخدمنا gRPC للتواصل بين الخدمات. بالإضافة إلى حقيقة أن gRPC تعمل على HTTP / 2 مع كل ما تتضمنه ، فإن وصف واجهات الخدمة عبر proto سيسمح لك ، كمستخدمين ، بإنشاء تطبيقاتك الخاصة لأجزاء فردية من النظام ، إذا لزم الأمر.



يستخدم المشروع Mongo كقاعدة بيانات للوصول السريع و Postgres لتخزين الإحصائيات المجمعة.



تم استخدام Bazel للتجميع والنشر. يتيح لك Bazel وصف التبعيات والعلاقات بين الحزم في Golang بشكل إعلاني. بالإضافة إلى ذلك ، بدأنا اختبار Bazel باستخدام ذاكرة تخزين مؤقت عن بُعد ، الأمر الذي له تأثير إيجابي على سرعة النظام. يجمع Bazel أيضًا جميع التطبيقات في Docker وينظم اختبار الوحدة. تم دمج كل هذا في إجراءات Github.



لوحة أجهزة القياس في النظام مكتوبة بزاوية 9.



نحاول الحفاظ على الشريط في اختبارات الوحدة ، في الوقت الذي تتم فيه تغطية كل كيان. في المستقبل القريب ، سيتم تنفيذ اختبارات التكامل و E2E لدعم النظام الأكثر اكتمالا



وصف النظام



كما ذكرنا سابقًا ، Squzy عبارة عن مجموعة من الخدمات المصغرة التي تتفاعل مع بعضها البعض ، كل منها يتعامل مع مهمة منفصلة.



قائمة الخدمات:



  • Agent Client — , . , . Agent Server.
  • Agent Server — , . Mongo, Storage.
  • Application Monitoiring — , / Squzy , . GoLang NodeJS, — PHP & Java .
  • Monitoring — external/internal .
  • Storage — . Postgres, ClickHouse.
  • Incident Manager- . ( ). Mongo, Storage.
  • Notification Manager — . Webhook & Slack.
  • API — API Gateway


مخطط تفاعل الخدمة على النحو التالي:







لإثبات قدرات Squzy ، تم تطوير عرض توضيحي يراقب الخادم الخاص به ويسمح لك بمراقبة النظام على لوحة القيادة: https://demo.squzy.app/ .



يتم تعطيل بعض الميزات ، مثل إضافة / إزالة كيانات جديدة ، في العرض التوضيحي ، ولكنها تتيح لك رؤية جميع أجزاء النظام والشعور بها. أدناه سوف نتناول المزيد من التفاصيل حول كل نوع من أنواع المراقبة.



هذا الجزء من النظام مسؤول عن الفحوصات الخارجية / الداخلية. في الوقت الحالي ، يسمح لك بإرسال الطلبات وتوقع ردود على الأنواع التالية من نقاط النهاية:



  1. Tcp - فحص المنفذ المفتوح ؛
  2. gRPC - فحص البروتوكول ؛
  3. Http - تحقق من الامتثال لرمز الحالة ؛
  4. خريطة الموقع - التحقق من أن جميع عناوين URL من ملف Sitemap تستجيب بـ 200 موافق ؛
  5. JsonValue - مجموعة قيم محددة من استجابة JSON.


يسمح لك Squzy بإضافة رؤوس مخصصة لجميع أنواع عمليات فحص HTTP.



تبدو واجهة إضافة فحص من خلال لوحة معلومات Squzy على النحو التالي:







هنا الفاصل الزمني هو الفاصل الزمني بين عمليات التحقق بالثواني ، والمهلة هي الوقت الذي يعتبر بعده الفحص غير ناجح.



بعد الإنشاء ، يكون للمستخدم حق الوصول إلى تكوين المدقق:







لكل نوع من أنواع الشيكات ، يمكنك كتابة قاعدة الحادث. سيتم وصف المزيد من التفاصيل حول الحوادث أدناه ، ولكن هنا سنقدم فقط مثالاً:







في هذه الحالة ، نقيس قيمة سعر صرف الدولار من الموقع ، وإذا كان أكثر من 80 سنقوم بإنشاء حادثة



رابط للعرض.



يمكن إنشاء الحوادث على:



  • مدة التحقق (وقت تلقي استجابة من الخادم) ؛
  • الحالة (تم إرجاع رمز الحالة) ؛
  • القيمة (المعلومات المنقولة في المدقق).


عامل Squzy



لمراقبة المضيفين في النظام ، يتم استخدام عامل Squzy المثبت على الخادم. تقوم حاليًا بجمع الإحصاءات التالية:



  • وحدة المعالجة المركزية - حمل المعالج ؛
  • الذاكرة - مستعملة / خالية / إجمالي / مشتركة ؛
  • القرص - مستخدم / حر / إجمالي لكل قرص ؛
  • صافي - لكل واجهة شبكة.


الجدول الزمني للوكيل:



  1. يسجل الوكيل مع خادم الوكيل ويتلقى معرفًا (أثناء التسجيل ، من الممكن تحديد فترة المراقبة واسم الوكيل) ؛
  2. يرسل الوكيل الإحصائيات إلى الخادم في فترة زمنية معينة ؛
  3. ….
  4. يقوم الوكيل بإعلام الخادم بالإغلاق.


إذا لم يكن هناك اتصال بالخادم ، فسيستمر الوكيل في جمع الإحصائيات وسيتم إرسالها عند استعادة الاتصال.



يمكن الاطلاع على النسخة التجريبية من الوكيل هنا: https://demo.squzy.app/agents/5f142b6141a1c6518723483a/live



يمكن أن يكون للوكيل مجموعة من القواعد للتحقق من الحوادث:





مراقبة التطبيق Squzy



بالنسبة لتطبيقات المراقبة ، تم تطوير عمليات الدمج باستخدام أطر عمل شائعة لـ Go / NodeJs (أكثر ، كما يقول المسوقون الناجحون). تحدد عمليات الدمج نوع المعاملة ( Http / Router / gRPC / WebSocket / إلخ) وتحليل الاستجابات من المحركات / الطلبات.



يدعم Squzy أيضًا تتبع المعاملات ، والذي يسمح لك بمراقبة المعاملات ذات الصلة للعديد من الخوادم / الخدمات. مثال على مراقبة مثل هذه المعاملات على لوحة التحكم الرئيسية: https://demo.squzy.app/transactions/om8l8LP96PRsvx67UxkES .



مكتبات للتكامل في Go و Node Js.





المكتبات في جوهرها عبارة عن برمجيات وسيطة تحدد الوقت قبل إرسال المعاملة والوقت الذي يلي معالجتها ، وتقوم بتحليل الاستجابة. كتبنا أيضًا نموذجًا لتطبيق مراقبة GO: https://github.com/squzy/test_tracing.



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



يمكنك إنشاء حوادث لكل معاملة بناءً على البيانات التالية:



  • مدة الصفقة
  • حالة عملية؛
  • تم استلام الأخطاء ؛
  • نوع المعاملة.


مدير الحوادث Squzy + مدير الإخطارات



الحوادث في Squzy تستند إلى القواعد. عند إضافة كيان جديد إلى التخزين ، يتم التحقق من القاعدة الموصوفة ، وإذا كانت كذلك ، يتم إنشاء حادثة (إذا لم يتم إنشاؤها بالفعل).



القواعد هي نسخة موسعة من expr ، تمت إضافة قواعد محددة إليها ، مع مراعاة مواصفات النظام ، مثل Last (يأخذ آخر n من السجلات من التخزين) ، Use (يستخدم مرشحًا محددًا لهذا) ، وما إلى ذلك. يمكن العثور على وصف مفصل لجميع القواعد على https://squzy.app/usage/squzy-incident/incident-rules ، هنا سنركز على مثال توضيحي.



لنفترض أن لديك خادمًا به 1792 معالجًا و 256 جيجابايت من ذاكرة الوصول العشوائي و 16 تيرابايت من مساحة القرص الثابت. وتريد حقًا التحقق من أن أجهزة التطوير لديك لا تعمل Doom على شاشة تحميل وحدة المعالجة المركزية. أنت تعلم أن الحفاظ على موقع صفحة واحدة يخدم خادمك لا يؤدي أبدًا إلى تحميل أكثر من 8 معالجات بنسبة 100 بالمائة لأكثر من دقيقة. بالإضافة إلى ذلك ، فإن ذاكرة الوصول العشوائي أكثر من نصف مجانية. بينما يحتوي القرص الصلب على مساحة خالية كاملة في المحمية (إذا لم تقم بتخزين أرشيفات معروفة في المنزل ، سترى زوجتك). في هذه الحالة ، مع العلم أنه يتم جمع المقاييس كل 10 ثوانٍ ، يمكنك تحديد القاعدة التالية للتحقق من أن خادمك يعمل بشكل صحيح:



any(Last(7, UseType(All)), 
    {all(.CpuInfo.Cpus, {.Load > 80}) &&
    .MemoryInfo.Mem.UsedPercent < 50 &&
    .DiskInfo.Disks["System"].Free > 1000000000000}
)


وبالمثل ، يسمح لك Squzy بوصف أنماط مختلفة من سلوك النظام غير المرغوب فيه.



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



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



لكل كيان محدد ، سواء كان تطبيقًا / مدققًا / وكيلًا ، يمكنك إنشاء إشعاراتك الخاصة حول الحوادث.



خاتمة



نحن الآن بصدد جمع الملاحظات والتعليقات من مجتمع تكنولوجيا المعلومات.



لدينا بالفعل عدد من الخطط لتطوير المنتجات:



  1. إضافة تكاملات Java / PHP ؛
  2. مدققات قاعدة البيانات
  3. الهجرة من Postgres إلى ClickHouse ؛
  4. المزيد من طرق الإخطار ؛
  5. التكامل مع kubernetes ؛
  6. تحسين التوثيق
  7. واجهة برمجة تطبيقات GQL ؛
  8. اختبارات التكامل و E2E ؛
  9. مراقبة تطبيقات الهاتف المحمول.
  10. الإكمال التلقائي لقواعد الحوادث على واجهة المستخدم


سنكون سعداء لتلقي أي ملاحظات أو اقتراحات.



الروابط





ملاحظة:

شكرا على المقال Vonotirax



جرب بنقرة واحدة



All Articles