استخدام Google Stackdriver Debug وTrace وLogging وLogpoints

يرشدك هذا البرنامج التعليمي إلى كيفية استخدام Google Stackdriver، ما يتيح لك إجراء ما يلي باستخدام تطبيقات Google Cloud Platform:

  • التقِط لقطة تصحيح الأخطاء في تطبيقاتك التي تعمل على App Engine وCompute Engine وContainer Engine.
  • عرض سجلات التطبيق
  • إعداد المقاييس ومراقبتها وتلقّي تنبيهات بشأنها
  • تتبُّع طلبات البيانات من واجهة برمجة التطبيقات والحصول على تفاصيل عن أوقات الاستجابة والاختناقات المحتملة في الرمز البرمجي
  • إضافة نقاط تسجيل إلى تطبيق قيد التشغيل بدون الحاجة إلى نشر تطبيقك، وهي ميزة فريدة (ونأمل أن تكون مفيدة).

في هذا البرنامج التعليمي، سننفّذ ما يلي من البداية:

  1. إنشاء مشروع على Google Cloud Platform (في App Engine تحديدًا)
  2. إعداد مستودع مصدر مشروع Google Cloud Platform
  3. استخدام مصدر تطبيق Guestbook Python العادي المتاح من Github
  4. نشر الرمز
  5. التعرّف على كيفية الحصول على لقطات تصحيح الأخطاء للتطبيق قيد التشغيل
  6. الاطّلاع على سجلّات التتبُّع وتتبُّع طلبات التطبيق
  7. إضافة نقاط تسجيل إلى التطبيق الحالي قيد التشغيل تمت تغطية هذه الميزة في البداية في مشاركة المدونة هذه : إضافة سجلات التطبيقات إلى تطبيق بدون إعادة تشغيل

لنبدأ

تم إنشاء هذا المحتوى في الأصل من قِبل "رومان إيراني" ونشره هنا.

إعداد البيئة بالسرعة التي تناسبك

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، عليك إنشاء حساب. سجِّل الدخول إلى "وحدة تحكّم Google Cloud Platform" (console.cloud.google.com) وأنشِئ مشروعًا جديدًا:

لقطة شاشة من 2016-02-10 12:45:26.png

تذكَّر معرّف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس العملي باسم PROJECT_ID.

بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.

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

يمكن للمستخدمين الجدد في Google Cloud Platform الاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

Google Cloud Shell

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

يتم تحميل هذا الجهاز الظاهري المستند إلى Debian بجميع أدوات التطوير التي تحتاج إليها. وتوفِّر هذه الآلة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتمّ تشغيله على Google Cloud، ما يحسّن كثيرًا أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما تحتاج إليه في هذا الدرس العملي هو متصفّح (نعم، يعمل على جهاز Chromebook).

لتفعيل Google Cloud Shell، ما عليك سوى النقر على الزرّ في أعلى يسار صفحة "وحدة تحكّم المطوّرين" (يستغرق توفير البيئة والاتصال بها بضع لحظات فقط):

activateCloudShell.png

بعد ذلك، وافِق على بنود الخدمة وانقر على الرابط "بدء Cloud Shell":

x.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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

gcloud auth list

ناتج الأمر

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

ناتج الأمر

[core]
project = <PROJECT_ID>

إذا لم يتم ضبط المشروع لسبب ما، ما عليك سوى تنفيذ الأمر التالي :

gcloud config set project <PROJECT_ID>

هل تبحث عن PROJECT_ID؟ يمكنك الاطّلاع على المعرّف الذي استخدمته في خطوات الإعداد أو البحث عنه في لوحة بيانات وحدة التحكّم:

Project_ID.png

ملاحظة مهمة: أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع:

gcloud config set compute/zone us-central1-f

يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. يمكنك الاطّلاع على مزيد من المعلومات في مستند المناطق والأحياء.

الاطّلاع على واجهات برمجة تطبيقات StackDriver المفعَّلة

لنلقِ نظرة على واجهات برمجة التطبيقات التي تم تفعيلها لمشروعك. استخدِم شريط البحث للعثور على "لوحة بيانات واجهة برمجة التطبيقات" كما هو موضّح أدناه.

اطّلِع على واجهات برمجة التطبيقات المحدّدة التي تم تفعيلها لمشروعك :

توفّر جميع مشاريع Google Cloud Platform خدمة استضافة Git خاصة، ولكن علينا أولاً إنشاء مستودع تلقائي للعمل معه. انتقِل إلى "مستودعات المصدر" باستخدام مربّع البحث في وحدة التحكّم :

انقر على "إنشاء مستودع" (CREATE REPOSITORY) لإنشاء مستودع رموز جديد باسم "default" :

باستخدام Cloud Shell، سنستنسخ هذا الدليل الآن إلى مثيل Google Cloud Shell. لإجراء ذلك، لننشئ أولاً دليلاً في مثيل Google Cloud Shell وننتقل إليه كما هو موضّح أدناه (نموذج الإخراج):

mkdir stackdriver-demo
cd stackdriver-demo/

يمكننا الآن استنساخ المستودع التلقائي هنا من خلال أمر gcloud كما هو موضّح أدناه:

gcloud source repos clone default

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

Cloning into '/home/gcp123_student/default'...
warning: You appear to have cloned an empty repository.
Project [qwiklabs-gcp-1234abc1234] repository [default] was cloned to [/home/gcp123_student/default].

رائع! لنستغرق لحظة للتعمّق أكثر في خوادم git البعيدة التي تم إعدادها. هذا ليس ضروريًا، ولكنّه يهدف إلى مساعدتك في فهم ما حدث خلف الكواليس بشكل أفضل.

انتقِل إلى الدليل التلقائي الذي تم إنشاؤه وأدخِل الأمر git remote -v كما هو موضّح أدناه

cd default
git remote -v

في ما يلي ناتج وحدة التحكّم الذي من المفترض أن يظهر لك:

origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (fetch)
origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (push)

يمكنك ملاحظة أنّ هذا يشير بشكل صحيح إلى مستودع Git المرتبط بمشروع Google Cloud Platform.

سحب تطبيق Guestbook من Github

التطبيق الذي سنستخدمه هو تطبيق App Engine عادي باسم Guestbook، وهو متاح في مستودع Google Cloud Platform الرسمي على Github. يشكّل هذا التطبيق أيضًا جزءًا من المستندات الرسمية الخاصة ببدء الاستخدام. يتوفّر مشروع Github على الرابط : https://github.com/GoogleCloudPlatform/appengine-guestbook-python

سننقل الآن هذه التعليمات البرمجية إلى نسخة Cloud Shell. يظهر الأمر ونتيجته هنا :

git pull https://github.com/GoogleCloudPlatform/appengine-guestbook-python

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

remote: Counting objects: 485, done.
remote: Total 485 (delta 0), reused 0 (delta 0), pack-reused 485
Receiving objects: 100% (485/485), 436.42 KiB | 163.00 KiB/s, done.
Resolving deltas: 100% (195/195), done.
From https://github.com/GoogleCloudPlatform/appengine-guestbook-python
* branch HEAD -> FETCH_HEAD

تتوفّر لدينا الآن جميع الرموز محليًا في مثيل Google Cloud Shell. يمكنك الاطّلاع على الملفات المختلفة التي تم استخراجها من مشروع Github.

إرسال الرمز البرمجي الحالي باستخدام Cloud Shell إلى مستودع Git الخاص بالمشروع

لننقل الآن هذا الرمز إلى مستودع Git الخاص بمشروع Google Cloud Platform، حتى نتمكّن من ضبط نقاط توقّف ونقاط تسجيل والمزيد لرمزنا. يُرجى العِلم أنّ هذه الخطوة ليست إلزامية، إذ يمكنك الدمج مباشرةً مع Github وجهازك المحلي وطرق أخرى لربط رمز المصدر.

ولكن لغرضنا هنا، سننقل هذا الرمز إلى مستودع Git الخاص بمشروع Google Cloud. يتم ذلك من خلال الأمر القياسي git push كما هو موضّح أدناه:

git push origin master

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

Counting objects: 485, done.
Compressing objects: 100% (280/280), done.
Writing objects: 100% (485/485), 436.42 KiB | 0 bytes/s, done.
Total 485 (delta 195), reused 485 (delta 195)
remote: Storing objects: 100% (485/485), done.
remote: Processing commits: 100% (152/152), done.
To https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default
* [new branch] master -> master

الآن، ارجع إلى Cloud Console في Google Cloud Platform، وتحديدًا إلى قسم "التطوير". انقر على "رمز المصدر" (Source Code)، ومن المفترض أن تتمكّن من رؤية جميع ملفات المشروع في المستودع التلقائي. يظهر الناتج النموذجي أدناه:

يمكننا الآن نشر تطبيق Guestbook على App Engine. لنشر التطبيق، تأكَّد من أنّك في Google Cloud Shell وفي الدليل التلقائي كما فعلنا طوال الوقت. استخدِم الأمر gcloud app deploy كما هو موضّح أدناه:

gcloud app deploy --version 1

عندما يُطلب منك اختيار منطقة، اختَر [1] us-east1.

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

You are about to deploy the following services:
— qwiklabs-gcp-1234abc1234/default/1 (from [/home/gcp123-student/default/app.yaml])
Deployed URL: [https://qwiklabs-gcp-1234abc1234.appspot.com]
Do you want to continue (Y/n)? Y
Beginning deployment of service [default]...
File upload done.
Updating service [default]...done.
Deployed service [default] to https://qwiklabs-gcp-1234abc1234.appspot.com]

يُرجى العِلم أنّنا قدّمنا مَعلمة إصدار لأمر نشر التطبيق. لقد منحناه القيمة "1".

بما أنّ تطبيق Guestbook يستخدم Google Cloud Datastore للاحتفاظ بالبيانات، علينا تعديل فهارس Datastore. يتم تحديد الفهارس في الملف index.yaml، ونستخدم ببساطة الأمر gcloud datastore create-indexes كما هو موضّح أدناه:

gcloud datastore create-indexes index.yaml

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

You are about to update the following configurations:
— qwiklabs-gcp-1234abc1234/index From: [/home/gcp123_student/default/index.yaml]
Do you want to continue (Y/n)? Y

قد يستغرق تعديل فهارس Datastore بعض الوقت. للتحقّق من الحالة، ابحث عن "فهارس Datastore" وانقر على "الفهارس". أثناء إنشاء الفهارس، ستظهر لك الحالة "جارٍ الفهرسة" كما هو موضّح أدناه:

يمكننا التحقّق من نشر تطبيقنا بالإصدار 1 وتوفّره من خلال الانتقال إلى Compute → App Engine ثم النقر على "الإصدارات" كما هو موضّح أدناه:

من المفترض أن يبدو كل شيء على ما يرام الآن، ويمكنك إلقاء نظرة على مشروعك من خلال الانتقال إلى https://<PROJECT_ID>.appspot.com. مرة أخرى، قد يستغرق إعداد فهارس متجر البيانات بضع دقائق قصيرة، لذا إذا عرض التطبيق رسالة خطأ (على سبيل المثال: خطأ في الخادم الداخلي)، يُرجى إعادة المحاولة بعد بضع دقائق.

لنستخدِم التطبيق الآن من خلال تسجيل الدخول وإنشاء بعض إدخالات دفتر الضيوف كما هو موضّح أدناه:

رائع! نحن الآن على استعداد للتعمّق في ميزات Stackdriver.

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

لننفّذ ذلك الآن لتطبيق Guestbook. سنطلب لقطة شاشة إذا طلب أي مستخدم الصفحة الرئيسية، ونريد تحديدًا أن يتم استرداد قائمة التحيّات المتوفرة حاليًا في Datastore.

يتوفّر الرمز البرمجي لذلك في الملف guestbook.py. وعلى وجه التحديد، يهمّنا أن نبدأ فحص الرمز البرمجي في وقت التشغيل بعد أن يسترد قائمة التحيات من مستودع البيانات. يتم ذلك في السطر رقم 72. يمكننا إذن وضع نقطة توقّف في السطر 74، حتى نعرف أنّه تم تنفيذ السطر 72.

لإجراء ذلك، انقر على "تصحيح الأخطاء" (Debug) من طريقة عرض إصدار AppEngine أو انتقِل إلى Stackdriver → تصحيح الأخطاء (Debug). سيؤدي ذلك إلى عرض الشاشة الموضّحة أدناه. ما عليك فعله هو اختيار الملف (guestbook.py) على يمين الشاشة، ثم النقر على رقم السطر كما هو موضّح.

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

https://<PROJECT_ID>.appspot.com.

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

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

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

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

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

من المهم جدًا التأكّد من أنّ أداء تطبيق الويب يستوفي المتطلبات التي حدّدتها. ‫Stackdriver Trace هي أداة رئيسية تساعدك في فهم وقت الاستجابة في تطبيقاتك.

يتم تفعيلها تلقائيًا لجميع تطبيقات App Engine، وتوفّر لنا تفاصيل أداء مفيدة جدًا لجميع نقاط النهاية بالإضافة إلى تقسيم على مستوى الطلبات المختلفة.

في حالتنا، كنا ننتقل إلى الصفحة الرئيسية ("/") ونعرض إدخالات دفتر الضيوف أو نضيفها. هذا يكفي لكي يقدّم لك Trace المزيد من المعلومات عن وقت الاستجابة. ما عليك سوى الانتقال إلى "نظرة عامة" في Stackdriver Traces، وستظهر لك لقطة شاشة كما هو موضّح أدناه. لاحظ عمليات التتبُّع الأخيرة ومدة استجابتها.

إذا نقرنا على أيّ من عمليات التتبُّع، أي على رابط معرّف الموارد المنتظم (URI)، سيتم عرض عملية التتبُّع التفصيلية كما هو موضّح أدناه:

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

يمكنك الاطّلاع على سجلّات تطبيقك في أي وقت من خلال الانتقال إلى Stackdriver Logging (كما هو موضّح أدناه). تتوفّر فلاتر متعدّدة تبدأ من "خدمات Google Cloud Platform" المختلفة → "أنواع السجلّ" → "مستوى السجلّ" → "التاريخ" والمزيد.

تعرض لقطة الشاشة أدناه سجلّات تطبيق App Engine والإصدار التلقائي 1.

logging.png

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

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

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

من داخل Cloud Shell، لنراجع قائمة نقاط تسجيل الدخول الحالية التي أعددناها (والتي من المفترض أن تكون 0). يتم ذلك من خلال الأمر gcloud كما هو موضّح أدناه:

gcloud debug logpoints list

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

Debug target not specified. Using default target: default-1
Listed 0 items.

الآن، سنضيف نقطة تسجيل إلى التطبيق قيد التشغيل. لإضافة نقطة تسجيل، علينا تنفيذ ما يلي:

  • حدِّد ملف الرمز المصدر ورقم السطر الذي نريد إضافة نقطة تسجيل الدخول إليه.
  • تحديد رسالة السجلّ يمكن أن تكون رسالة السجلّ هذه مبرمَجة بشكل ثابت أو حتى تعبيرًا.

في حالتنا، سنضيف نقطة تسجيل إلى ملف guestbook.py في السطر رقم 74 من خلال الأمر logpoints create كما هو موضّح أدناه:

gcloud debug logpoints create guestbook.py:74 "Fetched greetings from Datastore. Count of greetings : {len(greetings)}"

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

Debug target not specified. Using default target: default-1
— id: 53538243519d4-f9a0-bdbce
location: guestbook.py:74
logLevel: INFO
logMessageFormat: Fetched greetings from Datastore. Count of greetings : {len(greetings)}
condition: None
status: ACTIVE

لقد قدّمنا filename:linenumber ورسالة السجلّ أعلاه. يُرجى العِلم أنّ رسالة السجلّ تحتوي أيضًا على عبارة ستعرض عدد التحيات التي تم استرجاعها من مستودع البيانات.

يعرض الأمر الرسالة التي تفيد بأنّه تمت إضافة نقطة تسجيل الدخول. في ما يلي لقطة شاشة من Cloud Shell:

الآن، إذا نفّذت أمر قائمة نقاط تسجيل الدخول، سيظهر لك الناتج التالي:

gcloud debug logpoints list

في ما يلي نتائج وحدة التحكّم التي من المفترض أن تظهر لك :

Debug target not specified. Using default target: default-1
STATUS LOCATION CONDITION LOG_LEVEL LOG_MESSAGE_FORMAT ID
ACTIVE
guestbook.py:74 INFO Fetched greetings from Datastore. Count of greetings : {len(greetings)} 53538243519d4-f9a0-bdbce

لمشاهدة ذلك عمليًا، يمكننا الانتقال مرة أخرى إلى الصفحة الرئيسية على https://<PROJECT_ID>.appspot.com. سيؤدي ذلك إلى استدعاء الرمز وبالتالي نقطة تسجيل الدخول. يُرجى العِلم أنّه سيتم تسجيل هذا الإجراء تلقائيًا في سجلّات التطبيق. كل ما علينا فعله هو الانتقال إلى Stackdriver Logging مرة أخرى كما هو موضّح أدناه:

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

نأمل أن يكون هذا البرنامج التعليمي قد نال إعجابك. وهي تتناول بعض الإمكانات التي توفّرها منصة Stackdriver. هناك الكثير من المحتوى الذي يمكنك استكشافه. يمكنك الاطّلاع على مدوّنة "رومين إيراني" (المؤلف الأصلي لهذا الدرس العملي) على https://rominirani.com/ للحصول على المزيد من الدروس التعليمية حول Google Cloud Platform.

يمكنك أيضًا الاطّلاع على هذا الدرس العملي الآخر بعنوان "استخدام ميزة المراقبة وتسجيل البيانات في Stackdriver للحصول على إمكانية أفضل للاطّلاع على حالة تطبيقك".

إذا كانت لديك أي ملاحظات أو أردت الإبلاغ عن مشاكل في هذا الدرس العملي، يُرجى استخدام الرابط "الإبلاغ عن خطأ" في أسفل يمين هذه الصفحة.