يُطلعك هذا البرنامج التعليمي على جولة في Google Stackdriver، تتيح لك إجراء ما يلي مع تطبيقات Google Cloud Platform:
- يمكنك أخذ لقطة تصحيح أخطاء في تطبيقاتك التي تعمل على App Engine وCompute Engine وحاويات Engine.
- عرض سجلات التطبيق.
- إعداد المقاييس ومراقبتها والحصول على التنبيهات.
- تتبُّع طلبات البيانات من واجهة برمجة التطبيقات والحصول على تفاصيل عن أوقات الاستجابة والمشاكل المحتملة في الرمز.
- أضِف نقاط السجلّ إلى تطبيق قيد التشغيل، بدون الحاجة إلى نشر تطبيقك. هذه ميزة فريدة حقًا (ونأمل أن تكون مفيدة).
في هذا البرنامج التعليمي، سنجري ما يلي من البداية:
- إنشاء مشروع Google Cloud Platform (App Engine على وجه التحديد)
- إعداد مستودع مصادر مشاريع Google Cloud Platform
- استخدام مصدر تطبيق Python لملف Python العادي والمتوفّر من Github
- نشر الرمز
- الاطّلاع على كيفية الحصول على لقطات تصحيح الأخطاء للتطبيق قيد التشغيل
- الاطّلاع على عمليات تسجيل الدخول وتتبُّع المكالمات
- إضافة نقاط تسجيل إلى التطبيق الحالي قيد التشغيل تمت تغطية هذه الميزة في البداية في مشاركة المدونة هذه: إضافة سجلات التطبيق إلى تطبيق بدون عمليات إعادة تشغيل
لنبدأ الآن.
تم إنشاء هذا المحتوى في البداية من قِبل رومين إيراني ونشره هنا.
إعداد البيئة الذاتية
إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:
عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID
.
بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.
من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).
يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.
Google Cloud Shell
في هذا الدرس التطبيقي حول الترميز، سنستخدم Google Cloud Shell، وهو عبارة عن بيئة سطر أوامر يتم تشغيلها في Cloud.
يتم تحميل هذا الجهاز الافتراضي الذي يعمل بنظام التشغيل Debian بكل أدوات التطوير التي ستحتاج إليها. وتوفِّر هذه الآلة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتمّ تشغيله على Google Cloud، ما يحسّن كثيرًا أداء الشبكة والمصادقة. ويعني ذلك أنّ كل ما ستحتاج إليه في هذا الدرس التطبيقي هو متصفّح (نعم، يعمل على جهاز Chromebook).
لتفعيل Google Cloud Shell، من وحدة تحكّم مطوّري البرامج، انقر على الزر في أعلى يسار الصفحة (من المفترض أن تستغرق إدارة الحسابات والاتصال بضع لحظات فقط):
بعد ذلك، اقبَل بنود الخدمة وانقر على الرابط &بدء برنامج Cloud Shell:
بعد الاتصال بواجهة السحابة الإلكترونية، من المفترض أن ترى أنه قد تمت المصادقة عليك وأن المشروع قد سبق وتم ضبطه على 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
؟ تحقق من رقم التعريف الذي استخدمته في خطوات الإعداد أو ابحث عنه في لوحة بيانات وحدة التحكم:
ملاحظة مهمة: وأخيرًا، يمكنك ضبط المنطقة التلقائية وإعدادات المشروع:
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 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.
سحب تطبيق دفتر الزوار من Github
تجدر الإشارة إلى أن التطبيق الذي سنستخدمه هو تطبيق App Engine عادي يُطلق عليه "دفتر الزوار" ويتوفر في مستودع Github الرسمي على Google Cloud Platform. يُعد هذا التطبيق أيضًا جزءًا من المستندات الرسمية للبدء. يتوفّر مشروع 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 إلى Project Git Repository
لنبدأ الآن في إرسال هذا الرمز إلى مستودع GIT Project Git، حتى نتمكن من إعداد نقاط الإيقاف ونقاط السجلّ والمزيد للرمز الخاص بنا. تجدر الإشارة إلى أن هذه ليست خطوة إلزامية لأنه يمكنك الدمج مباشرةً مع Github، والجهاز المحلي وغير ذلك من الطرق لربط رمز المصدر.
ولكن بالنسبة إلى حسابنا، سنرسل هذا الرمز إلى مستودع GIT Project Git. ويتم تنفيذ ذلك من خلال الأمر git بالدفع العادي كما هو موضّح أدناه:
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
الآن، ارجِع إلى Google Cloud Console، وفي قسم التطوير فقط تحديدًا. انقر على رمز المصدر، وبالنسبة إلى المستودع التلقائي، من المفترض أن تتمكن من الاطّلاع على جميع ملفات المشروع. في ما يلي مثال على الناتج:
أصبحت جاهزًا الآن لنشر تطبيق Appbook 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"
.
وبما أنّ تطبيق دفتر الزوار يستخدم ميزة تخزين البيانات في Google Cloud للاحتفاظ بالبيانات، يجب تعديل فهارس البيانات. يتم تحديد الفهارس في الملف 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
قد يستغرق تعديل فهارس البيانات بعض الوقت. للتحقّق من الحالة، ابحث عن "DatastoreIndexs" وانقر على الفهارس. بينما يتم إنشاء الفهارس، سترى حالة تحتوي على قيمة "Index" كما هو موضح أدناه:
يمكننا التحقق مما إذا كان قد تم نشر تطبيقنا الذي يحمل الإصدار رقم 1 ومتاحًا من خلال الانتقال إلى Compute → App Engine، ثم النقر على الإصدارات كما هو موضح أدناه:
من المفترض أن يظهر كل شيء الآن بشكل جيد، ويمكنك إلقاء نظرة على مشروعك من خلال الانتقال إلى https://<PROJECT_ID>.appspot.com
. مرة أخرى، قد يستغرق الأمر بضع دقائق قصيرة حتى تصبح فهارس مخزن البيانات جاهزة، لذا إذا تسبب التطبيق في حدوث خطأ (على سبيل المثال: خطأ في الخادم الداخلي)، يُرجى إعادة المحاولة بعد بضع دقائق.
لنستخدم الآن التطبيق عن طريق تسجيل الدخول وإنشاء بعض إدخالات سجلّ الزوار كما هو موضّح أدناه:
رائع! نحن جاهزون الآن لاستكشاف ميزات Stackdriver.
لنلقِ نظرة أولاً على كيفية تسجيل لقطات للتطبيق الذي يتم تشغيله. اللقطات مفيدة إذا كنت تريد تصحيح أخطاء جزء محدّد من الرمز، وفحص المتغيرات والمزيد. ويحدث كل ذلك أثناء استمرار عرض تطبيقك. يعد هذا مفيدًا جدًا في حال كنت تتلقى تقارير عن مشكلة في تطبيقك وكنت تريد محاولة تصحيح الأخطاء ومعرفة ما يحدث في تطبيقك وفحص مجموعة من المتغيرات وطلب لقطة مشروطة وغير ذلك.
لنفعل ذلك الآن لتطبيق دفتر الزوار. سنطلب لقطة إذا كان أي شخص يطلب الصفحة الرئيسية ونريدها تحديدًا في مكان استرداد قائمة رسائل الترحيب الموجودة حاليًا في مخزن البيانات.
رمز ذلك موجود في ملف guestbook.py
. وعلى وجه التحديد، نحن مهتمون ببدء فحص الرمز في وقت التشغيل بعد استرداد قائمة رسائل الترحيب من مخزن البيانات. ويتم ذلك في السطر رقم 72. لنتمكن من وضع نقطة إيقاف على السطر 74، حتى نعرف أنه قد تم تنفيذ #72.
ولإجراء ذلك، عليك النقر على "Debug" من عرض إصدار AppEngine أو الانتقال إلى Stackdriver ← تصحيح الأخطاء . سيؤدي هذا إلى عرض الشاشة الموضحة أدناه. وما عليك سوى اختيار الملف (guestbook.py
) على يمين الصفحة، ثم النقر على رقم السطر كما هو موضَّح.
وسيؤدي هذا إلى ظهور رسالة مميزة في المربع الأحمر أعلاه، بأنها في انتظار تشغيل لقطة. كل ما نحتاج إليه هو النقر على صفحتنا على
https://<PROJECT_ID>.appspot.com
بعد تنفيذ ذلك، سيتم تنشيط اللقطة وسترى تعبئة أقسام المتغيّرات وحزمة الاتصال كما هو موضح أدناه. اطّلِع على طريقة عرض المتغيّرات ويمكنك توسيعها للتحقّق من القيم. هذه الميزة مفيدة جدًا.
على سبيل المثال، في حال توسيع متغيّر رسائل الترحيب، ستلاحظ أنّه يحتوي على السجلّات المقابلة لعدد إدخالات سجلّ الزوار التي أنشأتها.
ومن الميزات السهلة جدًا إعادة أخذ لقطة في أي وقت. ما عليك سوى النقر على رمز الكاميرا في أي وقت وسيؤدي ذلك إلى انتظار وصول اللقطة كما هو موضّح أدناه:
يمكنك استخدام حقل التعبيرات كما هو موضح أدناه لتتبع متغيرات محددة. على سبيل المثال، نعرف أن لدينا تحيات متغيرة ونحن مهتمون بفحص قيمتها في اللحظة التي يتم فيها تسجيل لقطة. يمكننا وضع متغير رسائل الترحيب كما هو موضّح في لقطة الشاشة أدناه. عند النقر على اللقطة، ستتم تعبئتها مع القيم كما هو موضّح.
إذا كنت تريد تفعيل النبذة في شرط معيّن فقط، يمكنك استخدام الحقل "الحالة" كما هو موضّح أدناه. ونذكر هنا أنّ اللقطة يجب أن تحدث فقط إذا كان عدد رسائل الترحيب أكبر من 1. يمكنك إجراء ذلك إذا أردت.
من المهم جدًا التأكد من أن أداء تطبيق الويب يستوفي المتطلبات التي وضعتها. أداة Stackdriver Trace هي أداة رئيسية تساعدك على فهم وقت الاستجابة في تطبيقاتك.
ويتم تفعيل هذه الميزة تلقائيًا في جميع تطبيقات App Engine وتوفّر لنا تفاصيل مفيدة للغاية عن أداء جميع نقاط النهاية الخاصة بنا، بالإضافة إلى فواصل بين الطلبات المختلفة.
في هذه الحالة، كنا ندخل الصفحة الرئيسية ("/") وعرض / إضافة إدخالات سجل الزوار. تكفي هذه المعلومات كافية من أجل تتبُّع وقت الاستجابة لمعرفة المزيد من المعلومات عن وقت الاستجابة. ما عليك سوى الانتقال إلى نظرة عامة على تسلسلات Stackdriver وسنشاهد لقطة شاشة كما هو موضح أدناه. ملاحظة بشأن آثار الأنشطة الأخيرة ووقت الاستجابة
في حال النقر على أيٍّ من بيانات التتبّع، أي النقر على رابط معرّف الموارد المنتظم (URI)، سيؤدي ذلك إلى عرض التتبُّع التفصيلي كما هو موضَّح أدناه:
ويُرجى العِلم بأنّه تمكّننا من التخلص من وقت الاستجابة والمكالمات التي تستغرق معظم الوقت. يمكنك أن ترى من التمثيل البصري أعلاه أن طلب بحث مخزن البيانات يستغرق بعض الوقت. وربما يكون هناك خيار واحد للبحث عنه هو التخزين المؤقت للبيانات لتقليل هذا المؤثِّر. ومرة أخرى، يعتمد ذلك على طلبك، وينبغي أن يكون هذا مفيدًا للغاية لتحديد المناطق في تتبع المكالمات التي قد تتطلب بعض إعادة الاستخدام.
يمكنك عرض سجلات التطبيق في أي وقت بالانتقال إلى تسجيل Stackdriver (كما هو موضح أدناه). هناك العديد من الفلاتر المتوفرة بدءًا من مختلف خدمات Google Cloud Platform → أنواع السجل → مستوى السجل → التاريخ والمزيد.
تعرض لقطة الشاشة أدناه سجلات تطبيق App Engine والإصدار التلقائي 1.
وأخيرًا، لنلقِ نظرة على ميزة من شأنها إثارة حماسك بشأن الإمكانيات التي توفرها. عادةً ما نبذل قصارى جهدنا كمطوّري برامج لوضع بيانات السجلّ في الترميز الخاص بنا، ونشر رمزنا، ثم نأمل أن يخبرنا السجل كل ما نريد معرفته.
ندرك أنّ هذا الإجراء لا يكفي وبهدف تصحيح الأخطاء فقط، وندرك أنّه من المفترض أن نضع بعض بيانات السجلّ الإضافية هنا. سيكون مسار العمل المعتاد هو تعديل الرمز ووضع عبارة السجل الإضافية وإعادة النشر والمراقبة.
لا بأس في ذلك ولكن ماذا لو كان بإمكانك إضافة عبارات السجل هذه (Let's تسميتها logpoints الآن) إلى التطبيق قيد التشغيل؟ وهذا يعني أننا لسنا بحاجة إلى إجراء عملية إيقاف التطبيق وتغيير الرمز وإعادة النشر. بدلاً من ذلك، يمكننا إدارة قائمة نقاط التسجيل من خارج تطبيقنا باستخدام دعم logpoint.
لا تزال من داخل Cloud Shell، دعنا نتحقق من القائمة الحالية بنقاط السجل التي تم ضبطها (والتي من المفترض أن تكون 0). ويتم تنفيذ ذلك من خلال الأمر gcloud
كما هو موضّح أدناه:
gcloud debug logpoints list
مخرجات وحدة التحكم التي ستظهر لك هي :
Debug target not specified. Using default target: default-1 Listed 0 items.
الآن، سنضيف نقطة سجل إلى التطبيق قيد التشغيل. لإضافة نقطة تسجيل، علينا تنفيذ الإجراءات التالية:
- حدِّد ملف رمز المصدر ورقم السطر الذي نريد إضافة نقطة السجل إليه.
- حدِّد رسالة السجلّ. يمكن أن تكون رسالة السجل هذه قابلة للتغيير أو حتى تعبيرًا.
في هذه الحالة، سنضيف نقطة سجل إلى ملف guestbook.py في السطر رقم 74 عبر أمر إنشاء نقاط التسجيل كما هو موضح أدناه:
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. لا يزال هناك الكثير لاستكشافه. يمكنك الاطّلاع على مدونة Romin Irani's (المؤلف الأصلي لهذا الدرس التطبيقي حول الترميز) على https://rominirani.com/ للحصول على مزيد من البرامج التعليمية على Google Cloud Platform.
يمكنك أيضًا الاطّلاع على هذا الدرس التطبيقي التطبيقي الآخر المسمّى &"باستخدام Stackdriver's المراقبة والتسجيل للحصول على رؤية أفضل بشأن سلامة تطبيقك.
إذا كانت لديك أي ملاحظات أو أردت الإبلاغ عن مشاكل في هذا الدرس التطبيقي حول الترميز، يُرجى استخدام &الرابط، ويُرجى البحث عن الخطأ" في أسفل يمين هذه الصفحة.