التنبيهات: أخطاء متعلقة بالسجلات في مواضيع النشر/الاشتراك

1. مقدمة

تاريخ آخر تعديل: 21 حزيران (يونيو) 2023

التنبيه بشأن الأخطاء المستندة إلى السجلّ بشأن مدى التوفّر

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

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

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

نشر المواضيع/الاشتراكات كقناة إشعارات تنبيه

يمكن استخدام موضوع النشر/الاشتراك كقناة إشعارات Google Cloud Monitoring لإرسال تنبيهات إلى اشتراك في خدمة Pub/Sub. يتيح لك ذلك دمج تنبيهات "مراقبة السحابة الإلكترونية" مع الأنظمة الأخرى، بما في ذلك خدمات الإشعارات التابعة لجهات خارجية.

لاستخدام موضوع Pub/Sub كقناة إشعارات، عليك أولاً إنشاء موضوع Pub/Sub واشتراك في Pub/Sub. بعد ذلك، عليك إنشاء قناة إشعارات Cloud Monitoring تستخدم موضوع Pub/Sub كوجهة.

عندما يظهر تنبيه، سترسل خدمة Cloud Monitoring رسالة إلى موضوع النشر/الاشتراك. ويمكن بعد ذلك للمشترك في اشتراك النشر/الاشتراك معالجة الرسالة واتخاذ الإجراء المناسب.

ما الذي ستنشئه

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

المعلومات التي ستطّلع عليها

  • كيفية إنشاء موضوع على خدمة Pub/Sub
  • كيفية إنشاء تنبيه مستند إلى السجلّ

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

المتطلبات

  • حساب على Google Cloud لديه أذونات لتنفيذ ما يلي:
  • نشر تطبيقات Cloud Run
  • إنشاء مواضيع النشر/الاشتراك
  • إنشاء تنبيهات

2. بدء الإعداد

اختيار مشروع على Google Cloud أو إنشاؤه

لاختيار مشروع حالي، استخدِم القائمة المنسدلة:

b35bf95b8bf3d5d8.png

لإنشاء مشروع جديد على Google Cloud، يمكنك اتّباع الخطوات التالية:

  1. انتقِل إلى وحدة تحكُّم Google Cloud Platform.
  2. انقر على الزر إنشاء مشروع.
  3. أدخِل اسمًا لمشروعك.
  4. اختَر حساب فوترة لمشروعك.
  5. انقر على الزر إنشاء.

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

إليك بعض التفاصيل الإضافية حول كل خطوة:

  • الاسم: يجب أن يكون اسم مشروعك فريدًا داخل مؤسستك.
  • حساب الفوترة: يمكنك استخدام حساب فوترة حالي أو إنشاء حساب جديد.
  • الإنشاء: بعد إدخال جميع المعلومات المطلوبة، انقر على الزر إنشاء لإنشاء مشروعك.

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Google Cloud حول إنشاء المشاريع.

3- نشر تطبيق واجهة برمجة التطبيقات

ما هو موضوع نموذج التطبيق أو واجهة برمجة التطبيقات؟

تطبيقنا عبارة عن تطبيق بسيط لواجهة برمجة تطبيقات Inventory يعرض نقطة نهاية واجهة برمجة تطبيقات REST مع عمليتين لسرد عناصر المخزون والحصول على عدد معين لمخزون العناصر.

بعد نشر واجهة برمجة التطبيقات وفرض استضافتها على https://<somehost>، يمكننا الوصول إلى نقاط نهاية واجهة برمجة التطبيقات على النحو التالي:

https://<somehost>/inventory

سيؤدّي ذلك إلى سرد كل سلع المنتجات التي تتضمّن مستويات المستودع المتوفّرة.

https://<somehost>/inventory/{productid}

سيؤدي ذلك إلى توفير سجلّ واحد مع معرّف المنتج ومستوى المستودع الفعلي لهذا المنتج.

بيانات الاستجابة التي يتم عرضها هي تنسيق JSON.

ملاحظة: إنّ تطبيق واجهة برمجة التطبيقات هذا مخصّص لأغراض التوضيح فقط ولا يمثّل تنفيذًا آمنًا وقويًا لواجهة برمجة التطبيقات. من المفترض أن يتوفّر لنا تطبيق سريع يتيح لنا استكشاف الغرض الرئيسي من هذا التمرين، أي عمليات Google Cloud.

نموذج البيانات وطلب/ردّ من واجهة برمجة التطبيقات

التطبيق لا يعتمد على قاعدة بيانات في الخلفية لتبسيط الأمور. وهي تتضمّن 3 نماذج لمعرّفات المنتجات ومستويات مستودعها الفعلي.

معرِّف المنتج

مستوى المستودع الإعلاني الفعلي

I-1

10

I-2

20

I-3

30

يمكنك الاطّلاع أدناه على نموذجَي طلب وردّ من واجهة برمجة التطبيقات:

طلب بيانات من واجهة برمجة التطبيقات

ردّ من واجهة برمجة التطبيقات

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

استنساخ المستودع

مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

bce75f34b2c53987.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:

f6ef2b5f13479f3a.png

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

إعداد gcloud

في Cloud Shell، اضبط رقم تعريف مشروعك واحفظه كمتغيّر PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

الآن، قم بتنفيذ الأمر التالي:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

سيؤدي ذلك إلى إنشاء مجلد بعنوان cloud-code- sample-repository في هذا المجلد.

(اختياري) تشغيل التطبيق على Cloud Shell

يمكنك تشغيل التطبيق محليًا باتّباع الخطوات التالية:

  1. من الوحدة الطرفية، انتقل إلى إصدار بايثون من واجهة برمجة التطبيقات باستخدام الأمر التالي:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. في الوحدة الطرفية، أدخل الأمر التالي (في وقت الكتابة، كان Cloud Shell مثبّتًا مع Python 3.9.x وسنستخدم الإصدار الافتراضي). فإذا كنت تخطط لتشغيله محليًا على الكمبيوتر المحمول، فيمكنك استخدام Python 3.8+) :

$ python app.py

  1. يمكنك تشغيل الأمر التالي لبدء تشغيل خادم Python على الجهاز.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

انقر على "معاينة" في المنفذ 8080. 5- سيؤدي ذلك إلى فتح نافذة متصفح. سيظهر لك خطأ 404 وهذا لا بأس به. عدِّل عنوان URL وغيِّره إلى أن يحتوي على /inventory فقط بعد اسم المضيف.

على سبيل المثال: على الجهاز، يبدو الأمر كما يلي:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

سيؤدّي ذلك إلى عرض قائمة بالسلع المتوفّرة في المستودع كما هو موضّح سابقًا:

709d57ee2f0137e4.png

  1. يمكنك إيقاف الخادم الآن بالانتقال إلى الوحدة الطرفية والضغط على Ctrl-C

نشر التطبيق

سننشر الآن تطبيق واجهة برمجة التطبيقات هذا في Cloud Run. تضمّنت العملية استخدام عميل سطر الأوامر gcloud لتشغيل الأمر لنشر الرمز في تشغيل الرمز البرمجي على السحابة الإلكترونية.

من الوحدة الطرفية، اكتب الأمر gcloud التالي:

$ gcloud run deploy --source .

سيؤدي هذا إلى طرح عدة أسئلة عليك وبعض النقاط المذكورة أدناه:

  1. اسم الخدمة (python-flask-api): يمكنك اختيار إما هذا الإعداد التلقائي أو اختيار اسم مثل my-inventory-api
  2. لم يتم تفعيل واجهة برمجة التطبيقات [run.googleapis.com] في المشروع [613162942481]. هل تريد التفعيل وإعادة المحاولة (سيستغرق ذلك بضع دقائق)؟ (نعم/لا)؟ نعم
  3. يُرجى تحديد منطقة: اختر 31 (us-west-1)
  4. لم يتم تفعيل واجهة برمجة التطبيقات [artifactregistry.googleapis.com] في المشروع [613162942481]. هل تريد التفعيل وإعادة المحاولة (سيستغرق ذلك بضع دقائق)؟ (نعم/لا)؟ نعم
  5. تتطلّب عملية النشر من المصدر توفّر مستودع Artifact Registry Docker لتخزين الحاويات المُدمجة. سيتم إنشاء مستودع باسم [cloud-run-source-deploy] في المنطقة [us-west1].
  6. هل تريد المتابعة (نعم/لا)؟ نعم
  7. هل تريد السماح بالاستدعاءات غير المُصدَّق عليها في [my-inventory-api] (y/N)؟ نعم

وفي النهاية، سيتم بدء عملية الحصول على رمز المصدر ووضعه في حاويته وإرساله إلى Artifact Registry ثم نشر خدمة Cloud Run + المراجعة. يجب أن تتحلى بالصبر خلال هذه العملية (يمكن أن تستغرق من 3 إلى 4 دقائق) ويُفترض أن تكتمل العملية مع عرض عنوان URL للخدمة.

في ما يلي نموذج تمرين:

87ba8dbf88e8cfa4.png

اختبار التطبيق

والآن بعد نشر التطبيق على Cloud Run، يمكنك الوصول إلى تطبيق واجهة برمجة التطبيقات على النحو التالي:

  1. دوِّن عنوان URL للخدمة من الخطوة السابقة. على سبيل المثال، أثناء الإعداد، يظهر بالتنسيق https://my-inventory-api-bt2r5243dq-uw.a.run.app. ولنسم هذا <SERVICE_URL>.
  2. افتح متصفّحًا وانتقِل إلى عناوين URL الثلاثة التالية لنقاط نهاية واجهة برمجة التطبيقات:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

ويجب أن يكون متوافقًا مع المواصفات التي قدّمناها في قسم سابق يتضمّن نموذج طلب وردّ من واجهة برمجة التطبيقات.

الحصول على تفاصيل الخدمة من Cloud Run

نشرنا خدمة واجهة برمجة التطبيقات على Cloud Run، وهي بيئة حوسبة بدون خادم. ويمكننا الانتقال إلى خدمة Cloud Run في أي وقت من خلال "وحدة تحكُّم Google Cloud".

من القائمة الرئيسية، انتقل إلى Cloud Run. سيؤدي هذا الإجراء إلى عرض قائمة بالخدمات التي يتم تشغيلها في Cloud Run. من المفترض أن تظهر لك الخدمة التي نشرتها للتو. بناءً على الاسم الذي حددته، يُفترض أن يظهر لك شيء مثل هذا:

2633965c4bc957cc.png

انقر على "اسم الخدمة" للاطّلاع على التفاصيل. في ما يلي تفاصيل النموذج:

33042ae64322ce07.png

لاحِظ عنوان URL، وليس عنوان URL الخاص بالخدمة الذي يمكنك تشغيله في المتصفّح والوصول إلى واجهة برمجة التطبيقات Inventory API التي نشرناها للتو. اطّلِع على المقاييس والتفاصيل الأخرى.

لنبدأ الآن باستخدام حزمة Google Cloud Operations.

4. إنشاء موضوع نشر/اشتراك لتلقّي إشعار التنبيه

لإنشاء موضوع نشر/اشتراك، يمكنك اتّباع الخطوات التالية في Google Cloud Console:

  1. ابحث عن نشر/اشتراك في مربّع البحث، وانتقِل إلى نشر/اشتراك. 935028bd8f6328ef.png
  2. انقر على علامة التبويب المواضيع إذا لم تكن قد أضفتها. 7fd8bf91386a88fd.png
  3. انقر على الزرّ إنشاء موضوع. cd9d197f9023c41b.png
  4. أدخِل اسمًا معروفًا لموضوعك.

173f313b4a3c4934.png

  1. انقر على الزر إنشاء. ca9a02477da21a44.png
  2. انسخ اسم الموضوع باستخدام زر رمز النسخ. ستحتاج إليها في القسم التالي.

20848252ee83df93.png

5- إنشاء سياسة تنبيه بشأن الأخطاء

استكشاف سجلات الأخطاء

للاطّلاع على سجلات الأخطاء للتطبيق:

النقر على علامة التبويب التسجيل

سيؤدي ذلك إلى عرض واجهة سجلّ يمكنك من خلالها تحديد/إلغاء اختيار عدة موارد على وجه التحديد (المشروع وموارد السحابة الإلكترونية من Google وأسماء الخدمات وما إلى ذلك) بالإضافة إلى مستويات السجلّ لفلترة رسائل السجلّ حسب الحاجة.

6605b68395185b89.png

محاكاة بعض الطلبات غير الصالحة إلى "خدمة المستودع" من خلال تقديم معرّفات منتجات ليست ضمن I-1 وI-2 وI-3. على سبيل المثال: الطلب غير الصحيح هو:

https://&lt;SERVICE_URL&gt;/inventory/I-999

سنبحث الآن عن جميع التحذيرات التي تم إنشاؤها بواسطة واجهة برمجة التطبيقات لدينا، عند تقديم معرّف منتج غير صحيح في طلب البحث.

إنشاء سياسة تنبيه مخصّصة مستندة إلى السجلّ للأخطاء

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

  1. في مربع طلب البحث، أدخل معلمات طلب البحث التالية:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "تحذير في التطبيق: تم استلام طلب مستودع لمعرّف منتج غير صحيح"

من المفترض أن تظهر بشكلٍ مشابه لما يلي:

f672154cfebf0051.png

  1. انقر فوق "Run Query" (تشغيل الاستعلام). بعد ذلك، ستظهر لك جميع الطلبات الواردة والتي تتضمّن هذه المشكلة.

77c190e3a2fab6bf.png

  1. لتحويل ما سبق إلى تنبيه، انقر على الزر إنشاء تنبيه الذي يظهر في مستكشف السجلات أسفل حقل طلب البحث مباشرةً، على يسار الصفحة:

4cd3fcf142189376.png

  1. سيؤدي ذلك إلى إظهار النموذج لإنشاء سياسة تنبيه مستندة إلى السجلّ.

b82446854bad87fc.png

  1. استخدم طلب البحث الأولي للسجلات المراد تضمينها في التنبيه:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. يمكنك ضبط معدل تكرار الإشعارات ومدة الحادثة. لغرض المثال، يمكنك استخدام الحدّ الأدنى للقيم لكلّ منها:

bb3d96448ec998a1.png

  1. أخيرًا، بالنسبة إلى "من ينبغي إعلامه؟" اختَر قناة إشعارات النشر/الاشتراك التي أنشأتها سابقًا:

3593c48c29d4b76c.png

  1. انقر على حفظ. لعرض سياسة التنبيه وإدارتها، انتقِل إلى صفحة التنبيه وتحقَّق من السياسات: ca08ea380fb37c91.png

6- تهانينا

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