استخدام Stackdriver Logging وStackdriver Trace مع دوال السحابة

1. مقدمة

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

5815064fec87444b.png

ستستخدم Cloud Function يتم تشغيلها بواسطة HTTP، ولكن كل ما ستغطّيه ينطبق أيضًا على اللغات الأخرى وعلى Cloud Functions التي يتم تشغيلها بواسطة أحداث أخرى.

2. الإعداد والمتطلبات

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

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

Cloud Shell

على الرغم من إمكانية استخدام Cloud Functions وإمكانات تسجيل البيانات والرصد عن بُعد من الكمبيوتر المحمول، ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud.

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

  1. لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (يستغرق توفير البيئة والاتصال بها بضع لحظات فقط).

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

بعد الاتصال بـ 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؟ يمكنك الاطّلاع على المعرّف الذي استخدمته في خطوات الإعداد أو البحث عنه في لوحة بيانات Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

يضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، ما قد يكون مفيدًا عند تنفيذ الأوامر المستقبلية.

echo $GOOGLE_CLOUD_PROJECT

ناتج الأمر

<PROJECT_ID>
  1. أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع.
gcloud config set compute/zone us-central1-f

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

3- نشر دالة Cloud بسيطة

للحصول على شيء يمكن مراقبته، أنشئ Cloud Function باسم "Hello, World". في القائمة اليمنى من Google Cloud Console، انقر على Cloud Functions، ثم انقر على إنشاء دالة.

3c13aa20af602aa7.png

أدخِل "hello-monitor" كاسم لوظيفة Cloud الجديدة.

fa6816c96d6d5b94.png

احتفِظ بجميع الإعدادات التلقائية للرمز المصدر. (ومع ذلك، يمكنك اختيار لغة/وقت تشغيل مختلفَين إذا أردت ذلك).

7aadf164450484e.png

أخيرًا، انقر على إنشاء.

dc74cd21000d6c91.png

يجب أن تظهر Cloud Function مع علامة اختيار خضراء بجانبها، ما يعني أنّها جاهزة للاستدعاء.

5363a34eb001d5ed.png

4. اختبار Cloud Function وإرسال عدد الزيارات باستخدام أداة إنشاء تحميل

بعد نشر Cloud Function بنجاح، اختبِرها من سطر الأوامر.

أولاً، باستخدام Cloud Shell، أصدِر الأمر التالي:

$ gcloud functions describe hello-monitor

من المفترض أن يعرض ذلك وصفًا لوظيفة Cloud، بما في ذلك عنوان URL لـ httpsTrigger، وهو نقطة نهاية HTTP(S) لاستدعاء وظيفة Cloud. يجب أن يبدو على النحو التالي: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.

يجب أن يكون تشغيل Cloud Function الآن بسيطًا مثل استخدام الأمر curl على عنوان URL هذا.

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

الآن، استخدِم Vegeta، وهي أداة بسيطة لاختبار تحميل HTTP. لتثبيته، ما عليك سوى كتابة الأمر التالي من Cloud Shell :

$ go get -u github.com/tsenart/vegeta

لإرسال بعض الزيارات إلى Cloud Function (خمس طلبات في الثانية لمدّة دقيقتَين)، استخدِم الأمر التالي:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

5- التنقّل بين السجلّات

من عرض تفاصيل Cloud Function، انقر على عرض السجلات.

b24157fd3376e6a8.png

من المفترض أن ينقلك ذلك إلى قسم Stackdriver Logging في مشروعك، حيث ستظهر لك سجلات Cloud Function فقط.

5a36fa75d2fb0165.png

يجب أن تعرض جميع الطلبات إلى Cloud Function رمز الحالة 200.

عند عرض السجلات، يمكنك إجراء ما يلي:

  • فلترة السجلّ حسب المستوى (في حالتك، جميع السجلّات هي من المستوى debug).
  • اختَر إطارًا زمنيًا محدّدًا (نسبيًا أو مطلقًا).
  • فعِّل ميزة بث السجلّ (من خلال النقر على تشغيل 751a4600016f34a7.pngفي أعلى الشاشة).
  • انسخ رابطًا إلى إدخال في السجلّ (لمشاركته مع أعضاء الفريق).
  • عرض إدخال في السجلّ في سياق المورد
  • تثبيت إدخال في السجلّ (كإشارة مرئية)
  • تصدير السجلات إلى BigQuery أو Cloud Storage أو Pub/Sub (أو تنزيلها ببساطة كملفات JSON أو CSV)

6. تعديل الدالة

باستخدام Cloud Console، انتقِل إلى عرض تفاصيل الدالة ولاحظ الارتفاع الذي أنشأته باستخدام أداة اختبار التحميل في عدد عمليات الاستدعاء في الثانية ومدة تنفيذها.

aaee3159bbe395d3.png 7ed347101da5eca0.png

هناك أداة أخرى أكثر تفصيلاً لمراقبة وقت الاستجابة وطلبات الإجراءات البعيدة (RPC) وهي Stackdriver Trace، ولكن قبل استخدامها، عليك إجراء بعض التغييرات على Cloud Functions. فعليك إجراء ما يلي:

  1. أضِف حزمة node-emoji المنقذة للحياة كعنصر تابع.
  2. عدِّل رمز الدالة لاستخدام وحدة node-emoji وإضافة بعض وقت الاستجابة.
  3. أضِف متغيّرًا للبيئة لتفعيل Stackdriver Trace في Cloud Functions.

من تفاصيل الدالة، انقر على تعديل لتعديل الدالة.

39b0f8f98b18a6c0.png

عدِّل الملف package.json لإضافة تبعية لحزمة node-emoji.

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "node-emoji": "^1.8.1"
  }
}

عدِّل الدالة الفعلية من خلال تغيير محتوى index.js إلى ما يلي:

const emoji = require('node-emoji');

exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';

  // add some latency, functions are too quick!
  setTimeout(function() {
     message += emoji.random().emoji;  
     res.status(200).send(message);
  }, (3 * 100));  // 300ms
  
};

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

أخيرًا، أضِف متغيّر بيئة Cloud Functions باسم GOOGLE_CLOUD_TRACE_ENABLED وعيّنه على true على النحو التالي:

9205bd277b76aa21.png

انقر على حفظ.

ارجع إلى Cloud Shell واسترجِع الأمر لإنشاء بعض الأحمال على Cloud Function التي تم نشرها حديثًا:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

أنت الآن على استعداد لمراقبة قائمة عمليات التتبُّع التي تم إنشاؤها بدون أي متطلبات إعداد أخرى وبدون مكتبة تتبُّع محدّدة في الرمز البرمجي.

7. تتبُّع وظيفة Cloud Function المعدَّلة

باستخدام القائمة اليمنى، انتقِل إلى قائمة عمليات التتبُّع (ضمن Stackdriver Trace).

576373f38cad6f8.png

من المفترض أن يظهر لك شيء مشابه للقطة الشاشة التالية:

44a36b758b49f88f.png

من المفترض أن يوضّح ذلك أنّ وقت الاستجابة الذي تم إدخاله في Cloud Function يبلغ 300 ملي ثانية.

تمثّل كل نقطة في الرسم البياني طلبًا يمكنك الاطّلاع على معلومات تفصيلية عنه، مثل الطابع الزمني وطريقة HTTP وحالتها وتصنيفاتها ورابط يؤدي إلى إدخال في السجلّ ذي الصلة وأي استدعاء إجراء عن بُعد (RPC) لاحق تنفّذه "الدالة السحابية".

5815064fec87444b.png

إذا أردت التكبير، ما عليك سوى النقر والسحب على الرسم البياني. اختيار نطاق زمني مخصّص في الرسم البياني للتتبُّع

للتصغير، انقر على التراجع عن التكبير في أعلى الصفحة.

بما أنّك نشرت دالة Cloud واحدة، لا يعرض الرسم البياني سوى GET طلبات على معرّف الموارد المنتظم hello-monitor، ولكن يمكنك فلترة عمليات التتبُّع حسب طريقة HTTP‏ (GET وPOST وDELETE) أو حالة HTTP‏ (2XX و3XX) أو باستخدام فلتر الطلبات.

انتقِل إلى نظرة عامة في القائمة اليمنى:

e920cfca2a50899e.png

من صفحة النظرة العامة هذه، يمكنك العثور على عمليات التتبُّع الأخيرة وإحصاءات أخرى.

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png2e7b1ebf2f0a2b4f.png

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

8. حان وقت تنظيف الموارد

بهذا نكون قد أنهينا الدرس التطبيقي حول الترميز.

على الرغم من أنّ Cloud Functions وأدوات Stackdriver هي منصات للحوسبة بدون خادم لا تتكبّد تكاليف عند عدم استخدامها، ننصحك بحذف Cloud Function. ما عليك سوى النقر على hello-monitor في نظرة عامة ضمن Cloud Functions ثم النقر على حذف.

aceb633cf70a4a27.png

9. ما هي الخطوات التالية؟

في ما يلي بعض المراجع الإضافية:

/