استخدام 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_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-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_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen 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" الخاصة بك في القائمة مع علامة اختيار خضراء بجانبها، ما يعني أنّها جاهزة للاستدعاء.

5363a34eb001d5ed.png

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

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

أولاً، باستخدام Cloud Shell، نفِّذ الأمر التالي:

$ gcloud functions describe hello-monitor

من المفترض أن يعرض ذلك وصفًا لـ "دالة السحابة الإلكترونية"، بما في ذلك عنوان URL لـ httpsTrigger، وهو نقطة نهاية HTTP(S) لاستدعاء "دالة السحابة الإلكترونية". يجب أن يبدو على النحو التالي: 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، ولكن قبل استخدامها، عليك إجراء بعض التغييرات على "وظائف السحابة الإلكترونية". فعليك إجراء ما يلي:

  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.png

2e7b1ebf2f0a2b4f.png

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

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

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

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

aceb633cf70a4a27.png

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

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

/