1. مقدمة
تاريخ آخر تعديل: 21 يونيو 2023
التنبيه بشأن الأخطاء المستندة إلى السجلّات في ما يتعلّق بالتوفّر
يمكن استخدام التنبيهات المستندة إلى السجلّ لتحديد مدى توفّر تطبيق من خلال مراقبة أحداث أو أنماط معيّنة في السجلّات*.* من خلال تلقّي تنبيهات بشأن حالات الانقطاع أو المشاكل الأخرى التي تواجه المستخدمين، يمكنك اتّخاذ خطوات للحدّ من التأثير على المستخدمين والعملاء.
في حين أنّ عمليات الفحص في وقت التشغيل تقدّم لمحة عامة عن مدى التوفّر، قد يكون من الأدق استخدام رسائل الخطأ المستمدّة من السجلات كمؤشرات على أنواع أكثر تحديدًا من عدم التوفّر، والتعرّف على نسبة المستخدمين الذين يواجهون مشكلة.
يمكن أن تنشأ الأخطاء لأسباب عديدة، بدءًا من أخطاء المستخدمين إلى صيانة الأنظمة وترقيتها وحتى العوامل الخارجية للنظام، مثل سوء الأحوال الجوية. لا يهدف التنبيه إلى توقّع جميع الأسباب المحتملة، بل إلى اختيار بعض الأعراض الرئيسية التي يمكن أن تكون نقطة بداية لتحديد المشاكل وحلّها.
مواضيع Pub/Sub كقناة لإرسال إشعارات التنبيهات
يمكن استخدام موضوع Pub/Sub كقناة إشعارات في Google Cloud Monitoring لإرسال تنبيهات إلى اشتراك Pub/Sub. يتيح لك ذلك دمج تنبيهات Cloud Monitoring مع أنظمة أخرى، بما في ذلك خدمات الإشعارات التابعة لجهات خارجية.
لاستخدام موضوع Pub/Sub كقناة إشعارات، عليك أولاً إنشاء موضوع Pub/Sub واشتراك Pub/Sub. بعد ذلك، عليك إنشاء قناة إشعارات في Cloud Monitoring تستخدم موضوع Pub/Sub كوجهة.
عند تشغيل تنبيه، سترسل خدمة Cloud Monitoring رسالة إلى موضوع Pub/Sub. يمكن للمشترك في اشتراك Pub/Sub بعد ذلك معالجة الرسالة واتّخاذ الإجراء المناسب.
ما ستنشئه
في هذا الدرس التطبيقي حول الترميز، ستنشر تطبيقًا وتنشئ موضوع Pub/Sub وتنشئ تنبيهًا مستندًا إلى السجلّات يتحقّق من الأخطاء في جزء معيّن من التطبيق ويستخدم موضوع Pub/Sub كقناة إشعارات.
ما ستتعلمه
- كيفية إنشاء موضوع Pub/Sub
- كيفية إنشاء تنبيه مستند إلى السجلّ
يركّز هذا الدرس التطبيقي حول الترميز على إنشاء تنبيه بشأن الأخطاء. يتم تجاهل المفاهيم غير ذات الصلة والرمز البرمجي للتطبيق، ويتم توفيرها لك لنسخها ولصقها ببساطة.
المتطلبات
- حساب Google Cloud لديه الأذونات التالية:
- نشر تطبيقات Cloud Run
- إنشاء مواضيع Pub/Sub
- إنشاء تنبيهات
2. الإعداد
اختيار مشروع Google Cloud أو إنشاؤه
لاختيار مشروع حالي، استخدِم القائمة المنسدلة:

لإنشاء مشروع جديد في Google Cloud، يمكنك اتّباع الخطوات التالية:
- انتقِل إلى وحدة تحكّم Google Cloud Platform.
- انقر على الزر إنشاء مشروع.
- أدخِل اسمًا لمشروعك.
- اختَر حساب فوترة لمشروعك.
- انقر على الزر إنشاء.
سيتم إنشاء مشروعك وسيتم نقلك إلى لوحة بيانات المشروع. بعد ذلك، يمكنك البدء في استخدام خدمات Google Cloud.
في ما يلي بعض التفاصيل الإضافية حول كل خطوة:
- الاسم: يجب أن يكون اسم مشروعك فريدًا داخل مؤسستك.
- حساب الفوترة: يمكنك استخدام حساب فوترة حالي أو إنشاء حساب جديد.
- إنشاء: بعد إدخال جميع المعلومات المطلوبة، انقر على الزر إنشاء لإنشاء مشروعك.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Google Cloud حول إنشاء المشاريع.
3- نشر تطبيق واجهة برمجة التطبيقات
ما هو موضوع التطبيق النموذجي أو واجهة برمجة التطبيقات؟
تطبيقنا هو تطبيق بسيط لواجهة برمجة التطبيقات Inventory API يعرض نقطة نهاية REST API مع عمليتين لعرض عناصر المستودع والحصول على عدد مستودع عنصر معيّن.
بعد نشر واجهة برمجة التطبيقات، وبافتراض أنّها مستضافة على https://<somehost>، يمكننا الوصول إلى نقاط نهاية واجهة برمجة التطبيقات على النحو التالي:
https://<somehost>/inventory
سيتم عرض قائمة بجميع المنتجات مع مستويات المستودع المتوفرة.
https://<somehost>/inventory/{productid}
سيؤدي ذلك إلى توفير سجلّ واحد يتضمّن productid ومستوى المخزون المتوفّر لهذا المنتج.
تكون بيانات الردّ المُرجَعة بتنسيق JSON.
ملاحظة: تطبيق واجهة برمجة التطبيقات هذا مخصّص لأغراض العرض التوضيحي فقط ولا يمثّل عملية تنفيذ آمنة وقوية لواجهة برمجة التطبيقات. من المفترض أن يتوفّر لنا تطبيق سريع لاستكشاف الغرض الرئيسي من المختبر، أي عمليات Google Cloud.
نموذج بيانات وطلب/ردّ من واجهة برمجة التطبيقات
لا يعتمد التطبيق على قاعدة بيانات في الخلفية لتبسيط الأمور. تحتوي على 3 معرّفات منتجات نموذجية ومستويات المخزون المتوفّر.
معرِّف المنتج | مستوى المخزون المتوفّر |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
في ما يلي نموذج لطلب بيانات من واجهة برمجة التطبيقات ونموذج لردّ:
طلب بيانات من واجهة برمجة التطبيقات | ردّ من واجهة برمجة التطبيقات |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -1} |
إنشاء نسخة طبق الأصل من المستودع
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

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

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 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
يمكنك تشغيل التطبيق محليًا باتّباع الخطوات التالية:
- من الوحدة الطرفية، انتقِل إلى إصدار Python من واجهة برمجة التطبيقات باستخدام الأمر التالي:
$ cd cloud-code-sample-repository
$ cd python-flask-api
- في نافذة الجهاز، أدخِل الأمر التالي (في وقت كتابة هذا المستند، يتضمّن Cloud Shell الإصدار 3.9.x من Python، وسنستخدم الإصدار التلقائي. إذا كنت تخطّط لتشغيله محليًا على الكمبيوتر المحمول، يمكنك استخدام الإصدار 3.8 من Python أو إصدار أحدث:
$ python app.py
- يمكنك تنفيذ الأمر التالي لبدء خادم Python محليًا.

انقر على "معاينة" على المنفذ 8080. 5- سيؤدي ذلك إلى فتح نافذة متصفّح. سيظهر لك الخطأ 404، وهذا أمر طبيعي. عدِّل عنوان URL واجعله يتضمّن /inventory فقط بعد اسم المضيف.
على سبيل المثال، يظهر على جهازي بالشكل التالي:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
سيؤدي ذلك إلى عرض قائمة عناصر المستودع كما هو موضّح سابقًا:

- يمكنك إيقاف الخادم الآن من خلال الانتقال إلى "الوحدة الطرفية" والضغط على Ctrl-C
نشر التطبيق
سننشر الآن تطبيق واجهة برمجة التطبيقات هذا على Cloud Run. تضمّنت العملية استخدام أداة سطر الأوامر gcloud لتنفيذ الأمر اللازم لنشر الرمز البرمجي على Cloud Run.
من الوحدة الطرفية، أدخِل أمر gcloud التالي:
$ gcloud run deploy --source .
سيتم طرح أسئلة متعددة عليك، وفي ما يلي بعض النقاط التي سيتم تناولها:
- اسم الخدمة (python-flask-api): يمكنك استخدام هذا الاسم التلقائي أو اختيار اسم آخر، مثل my-inventory-api
- لم يتم تفعيل واجهة برمجة التطبيقات [run.googleapis.com] في المشروع [613162942481]. هل تريد تفعيلها وإعادة المحاولة (سيستغرق ذلك بضع دقائق)؟ (y/N)؟ نعم
- يُرجى تحديد منطقة: اختَر 31 (us-west-1)
- لم يتم تفعيل واجهة برمجة التطبيقات [artifactregistry.googleapis.com] في المشروع [613162942481]. هل تريد تفعيلها وإعادة المحاولة (سيستغرق ذلك بضع دقائق)؟ (y/N)؟ نعم
- يتطلّب النشر من المصدر مستودع Artifact Registry Docker لتخزين الحاويات التي تم إنشاؤها. سيتم إنشاء مستودع باسم [cloud-run-source-deploy] في المنطقة [us-west1].
- هل تريد المتابعة (نعم/لا)؟ نعم
- Allow unauthenticated invocations to [my-inventory-api] (y/N)? نعم
سيؤدي ذلك في النهاية إلى بدء عملية أخذ الرمز المصدر ووضعه في حاوية وإرساله إلى Artifact Registry ثم نشر خدمة Cloud Run وإصدارها. يجب التحلي بالصبر أثناء هذه العملية (قد تستغرق من 3 إلى 4 دقائق)، ومن المفترض أن تكتمل العملية ويظهر لك عنوان URL الخاص بالخدمة.
في ما يلي نموذج لعملية التنفيذ:

اختبار التطبيق
بعد نشر التطبيق على Cloud Run، يمكنك الوصول إلى تطبيق واجهة برمجة التطبيقات على النحو التالي:
- سجِّل عنوان URL الخاص بالخدمة من الخطوة السابقة. على سبيل المثال، يظهر في إعداداتي على النحو التالي:
https://my-inventory-api-bt2r5243dq-uw.a.run.app. لنسمّي هذا<SERVICE_URL>. - افتح متصفحًا وانتقِل إلى عناوين URL الثلاثة التالية لنقاط نهاية واجهة برمجة التطبيقات:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
يجب أن يكون التنسيق مطابقًا للمواصفات التي قدّمناها في قسم سابق مع نموذج لطلب بيانات من واجهة برمجة التطبيقات ونموذج لردّ.
الحصول على تفاصيل الخدمة من Cloud Run
نشرنا خدمة واجهة برمجة التطبيقات على Cloud Run، وهي بيئة حوسبة بدون خادم. يمكننا الانتقال إلى خدمة Cloud Run من خلال Google Cloud Console في أي وقت.
من القائمة الرئيسية، انتقِل إلى Cloud Run. سيؤدي ذلك إلى عرض قائمة بالخدمات التي يتم تشغيلها في Cloud Run. من المفترض أن تظهر لك الخدمة التي تم نشرها للتو. استنادًا إلى الاسم الذي اخترته، من المفترض أن يظهر لك ما يلي:

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

لاحظ عنوان URL، وهو ليس سوى عنوان URL للخدمة يمكنك إدخاله في المتصفّح والوصول إلى Inventory API الذي تم نشره للتو. اطّلِع على المقاييس والتفاصيل الأخرى.
لنبدأ باستخدام "حزمة عمليات Google Cloud" الآن.
4. إنشاء موضوع Pub/Sub لتلقّي إشعار التنبيه
لإنشاء موضوع Pub/Sub، يمكنك اتّباع الخطوات التالية في Google Cloud Console:
- ابحث عن Pub/Sub في مربّع البحث، ثم انتقِل إلى Pub/Sub.

- انقر على علامة التبويب المواضيع إذا لم تكن في هذه الصفحة.

- انقر على الزر إنشاء موضوع.

- أدخِل اسمًا يمكن التعرّف عليه للموضوع.

- انقر على الزر إنشاء.

- انسخ اسم الموضوع باستخدام زر رمز النسخ. ستحتاج إليه في القسم التالي.

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

محاكاة بعض الطلبات غير الصالحة إلى "خدمة المستودع" من خلال تقديم أرقام تعريف منتجات لا تتضمّن I-1 وI-2 وI-3 على سبيل المثال، الطلب غير الصحيح هو:
https://<SERVICE_URL>/inventory/I-999
سنبحث الآن عن جميع التحذيرات التي أنشأتها واجهة برمجة التطبيقات عندما يتم تقديم معرّف منتج غير صحيح في طلب البحث.
إنشاء سياسة تنبيه مخصّصة مستندة إلى السجلّ للأخطاء
لنفترض أنّنا نريد مراقبة ظهور رسالة خطأ محدّدة جدًا في جزء من التطبيق. على سبيل المثال، إذا لاحظنا عددًا كبيرًا من الأخطاء في البحث عن معرّفات المنتجات. هذه المشكلة هي أحد أعراض العديد من المشاكل المحتملة (مثل رابط غير صالح أو عدم اتساق قاعدة البيانات أو روبوت يعدد موقعنا الإلكتروني). على الرغم من صعوبة أو استحالة توقّع كل الأسباب المحتملة، فإنّ التطبيق الذي يرسل هذه الرسالة ولو لمرة واحدة يمثّل مشكلة كبيرة نريد أن نكون على دراية بها. لإصدار تنبيه بشأنها، علينا إنشاء سياسة استنادًا إلى البيانات الواردة في سجلّات الأخطاء.
- في "مربّع طلب البحث"، أدخِل مَعلمات طلب البحث التالية:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
من المفترض أن تظهر بشكلٍ مشابه لما يلي:

- انقر على "تنفيذ طلب البحث". سيؤدي ذلك إلى عرض جميع الطلبات التي وردت والتي تتضمّن هذه المشكلة.

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

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

- استخدِم طلب البحث الأوّلي للسجلات المطلوب تضمينها في التنبيه:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

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

- أخيرًا، في قسم "مَن يجب إعلامه؟"، اختَر قناة إشعارات Pub/Sub التي أنشأتها سابقًا:

- انقر على حفظ. للاطّلاع على سياسة التنبيه وإدارتها، انتقِل إلى صفحة التنبيه وتحقّق من السياسات:

6. تهانينا
تهانينا، لقد نجحت في إعداد ميزة "التحقّق من وقت التشغيل" لإرسال تنبيهات إلى Pub/Sub.