تسجيل الرموز التطبيقية لوظائف السحابة الإلكترونية وتتبّعها

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

سنستخدم وظيفة يتم تشغيلها باستخدام HTTP هنا، ولكن كل ما نغطيه ينطبق أيضًا على اللغات الأخرى وعلى الوظائف التي تشغّلها أحداث أخرى (حاوية التخزين/pub/sub، وغير ذلك).

إعداد البيئة الذاتية

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

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

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

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

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

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

Google Cloud Shell

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

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

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

تفعيلCloudShell.png

انقر على الزر &بدء؛ Cloud Shell &&quot:

لقطة شاشة يوم 14-06-2017 الساعة 10.13.43 مساءً.png

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

gcloud auth list

مخرجات الأوامر

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

مخرجات الأوامر

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

مخرجات الأوامر

<PROJECT_ID>

إذا لم يتم إعداد المشروع لسبب ما، فما عليك سوى إصدار الأمر التالي :

gcloud config set project <PROJECT_ID>

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

Project_ID.png

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

gcloud config set compute/zone us-central1-f

يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. اطّلع على مزيد من المعلومات في وثائق المناطق والمناطق؛

لإتاحة شيء لمراقبته، دعنا ننشئ وظيفة سحابة إلكترونية Hello Hello. في القائمة اليمنى من وحدة التحكّم، انقر على وظائف السحابة الإلكترونية، ثم "Create function" :

اختَر اسمًا للدالة الجديدة "hello-monitor" :

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

أخيرًا، أنشئ الدالة باستخدام الزر &&Create;&;; :

بعد لحظات قصيرة، من المفترض أن تظهر الدالة مُدرَجة على أنها جاهزة لاستدعاءها (كما هو موضّح في علامة الاختيار الخضراء) :

الآن وقد تم نشر وظيفة السحابة الإلكترونية بنجاح، سنختبرها من سطر الأوامر.

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

$ gcloud functions describe hello-monitor

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

يجب أن يكون تشغيل الدالة الآن بسيطًا مثل curl'ing عنوان URL هذا :

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

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

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

لإرسال بعض الزيارات إلى دالة السحابة الإلكترونية (5 طلبات في الثانية لبضع دقائق)، استخدِم هذا الأمر :

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

من طريقة عرض تفاصيل الوظيفة، انقر على &عرض قائمة "السجلات&"؛

سيؤدي ذلك إلى توجيهك إلى قسم Stackdriver Logging في المشروع، حيث يعرض لك سجلات وظائف السحابة الإلكترونية فقط :

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

باستخدام عارض السجل هذا، يمكنك :

  • الفلترة حسب مستوى السجلّ (في هذه الحالة، كل السجلّات هي Debug مستوى)
  • تحديد إطار زمني محدد (نسبي أو مطلق)
  • تفعيل بث السجلّ (&"play" أعلى الشاشة)
  • نسخ رابط إلى إدخال السجلّ (للمشاركة مع أعضاء الفريق)
  • عرض إدخال سجلّ في سياق المورد
  • تثبيت إدخال في السجلّ (كإشارة مرئية)
  • تصدير السجلات إلى BigQuery أو Cloud Storage أو Cloud Pub/Sub (أو تنزيلها فقط بتنسيق JSON أو CSV)

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

يمكن أيضًا نسخ الفلاتر لمشاركتها (اطّلع على القائمة المنسدلة في مربّع البحث) :

باستخدام وحدة التحكّم، انتقِل إلى &تفاصيل تفاصيل الوظيفة والتوقّع مع الارتفاع المفاجئ في معدّل الاستجابة الذي أنشأناه باستخدام أداة اختبار التحميل، وذلك من حيث عدد الاستدعاءات في الثانية ووقت تنفيذها :

هناك أداة أكثر تفصيلاً لملاحظة وقت الاستجابة واستدعاءات RPC وهي ميزة تتبع Stackdriver، ولكن قبل أن نتمكن من استخدام هذه الميزة، علينا إجراء بعض التغييرات على وظائفنا، وهي:

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

من صفحة &quot؛تفاصيل الوظيفة&&;؛ انقر على تعديل لتعديل الدالة :

عدِّل الملف 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 مللي ثانية.

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

لا تنسَ النقر على "حفظ".

والآن ارجع إلى Cloud Shell وتذكّر الأمر لإنشاء بعض الحمل على الدالة التي تم نشرها حديثًا :

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

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

باستخدام القائمة اليمنى، انتقل إلى قائمة التتبع (ضمن تتبع Stackdriver) :

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

ويجب أن يوضح ذلك تمامًا أن وقت الاستجابة المُقدَّم في الدالة يتم قياسه فعلاً بمقدار 300 ملّي ثانية.

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

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

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

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

انتقِل الآن إلى قسم "الآثار والإحصاءات" في القائمة اليمنى :

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

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

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

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

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

على الرغم من أن أدوات Cloud Functions وStackdriver هي منصّات بدون خادم لن تتحمل أي تكلفة في حال عدم استخدامها، إلا أنّنا ندرك أنّنا مواطنين صالحين يمكن أن يعملنا على حذف وظائفنا.

ما عليك سوى اختيار الدالة hello-monitor في صفحة النظرة العامة على وظائف السحابة الإلكترونية والنقر على &quot&delete".

بهذا نخلّص هذا الدرس التطبيقي البسيط حول الترميز باستخدام تسجيل وظائف السحابة الإلكترونية وتتبُّعها.

في ما يلي بعض رسائل المتابعة :

/