Cloud Functions רישום ומעקב ב-Codelab

המטרה של קוד ה-Lab הזה היא להבין אתכם איך למנף את כלי הרישום והמעקב המוצעים לכל מפתחי הענן. הכלים האלה מגיעים עם כל פונקציה ב-Cloud Functions שפורסים בכל השפות הנתמכות, ואתם אמורים להיות יותר פרודוקטיביים כשאתם כותבים ומפעילים את הקוד ללא שרת (serverless).

נשתמש בפונקציה המופעלת באמצעות HTTP כאן, אבל כל מה שנתייחס אליו חל גם על שפות אחרות ועל פונקציות שהופעלו על ידי אירועים אחרים (קטגוריית אחסון, pub/sub וכו')

הגדרת סביבה בקצב עצמי

אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:

צילום מסך מ-2016-02-10 12:45:26.png

חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID.

לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).

משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.

Google Cloud Shell

Google Cloud Functions ויכולות הרישום והמעקב שלה יכולות לשמש מרחוק מהמחשב הנייד שלך, אבל במעבדה זו נעשה שימוש ב-Google Cloud Shell - סביבת שורת פקודה שפועלת בענן.

המכונה הווירטואלית מבוססת Debian מכילה את כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. כלומר, כל מה שדרוש לכם עבור קוד Lab זה הוא דפדפן (כן, הוא פועל ב-Chromebook).

כדי להפעיל את Google Cloud Shell, במסוף המפתחים, פשוט לוחצים על הלחצן שבפינה השמאלית העליונה (יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו):

playCloudShell.png

לוחצים על הלחצן "Start Cloud Shell"

צילום מסך 2017-06-14 בשעה 22:13.43

לאחר החיבור למעטפת בענן, עליך לראות שכבר ביצעת אימות ושהפרויקט כבר מוגדר ל-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 World. בתפריט הימני של המסוף, לוחצים על פונקציות ב-Cloud Functions, ואז על &&&;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' בכתובת ה-URL הזו :

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

עכשיו אנחנו משתמשים ב-Vegeta, כלי פשוט לבדיקת הטעינה של HTTP. כדי להתקין אותו, ב-Cloud Shell, מקלידים את הפקודה הבאה :

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

כדי לשלוח תנועה ל-Cloud Functions (5 בקשות לשנייה למשך מספר דקות), יש להשתמש בפקודה הבאה :

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

בתצוגת פרטי הפונקציה, לוחצים על התפריט "הצגת יומנים" בתפריט הימני :

הפעולה הזו תעביר אתכם לקטע Stackdriver Logging של הפרויקט, שבו מוצגים רק יומני הפונקציה שלכם בענן :

אנחנו מקווים שכל הבקשות לפונקציה שלך יחזירו קוד סטטוס מסוג 200.

אפשר להשתמש במציג היומן כדי :

  • סינון לפי רמת יומן (במקרה שלנו, כל היומנים הם ברמת Debug)
  • ניתן לבחור מסגרת זמן ספציפית (יחסית או אבסולוטית)
  • הפעלת סטרימינג ביומן ("play&QUOTE; בחלק העליון של המסך)
  • העתקת קישור לרשומה ביומן (לשיתוף עם חברי הצוות)
  • הצגת רשומת יומן בהקשר של משאב
  • הצמדת רשומה ביומן (כאות חזותי)
  • לייצא יומנים ל-BigQuery, ל-Cloud Storage או ל-Cloud Pub/Sub (אפשר גם להוריד אותם בפורמט JSON או CSV)

כמו כן, בבורר הימני העליון אפשר לסנן יומנים לפי פונקציה. אתם יכולים גם לחפש תוויות או חיפוש טקסט מלא בסרגל החיפוש שבחלק העליון של החלון. במקרה שלנו התוויות הן hello-monitor (שם הפונקציה) ומזהה ביצוע לכל בקשה.

ניתן גם לשתף מסננים (יש לעיין בתפריט הנפתח בתיבת החיפוש) :

באמצעות המסוף, עוברים אל ה "פרטי הפונקציה" ורואים את העלייה החדה שאנחנו יוצרים באמצעות בודק הטעינה שלנו, גם מבחינת מספר ההפעלות לשנייה וגם לפי זמן הביצוע שלהם :

עוד כלי מפורט יותר לבדיקת זמן אחזור ושיחות ב-RPC הוא תכונת Stackdriver Trace, אבל לפני שנוכל להשתמש בתכונה הזו, אנחנו צריכים לבצע כמה שינויים בפונקציות שלנו:

  1. הוספה של חבילת node-emoji שמצילה חיים בתור תלויה
  2. צריך לעדכן את קוד הפונקציה כדי להשתמש במודול אמוג'י צומת ולהוסיף זמן אחזור
  3. צריך להוסיף משתנה סביבה כדי להפעיל את Stackdriver Trace ל-Cloud Functions

בדף "פרטי הפונקציה" לוחצים על 'עריכה' כדי לשנות את הפונקציה :

יש לערוך את הקובץ 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 באופן הבא:

אל תשכחו ללחוץ על 'שמירה'!

עכשיו חוזרים אל Cloud Shell ומשחזרים את הפקודה כדי ליצור עומס מסוים על הפונקציה שנפרסה לאחרונה :

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

עכשיו אנחנו מוכנים לראות את רשימת נתוני המעקב שהופקו ללא דרישות הגדרה נוספות וללא ספרייה ספציפית של מעקב בקוד!

בתפריט הימני, עוברים לרשימת המעקב (בקטע Stackdriver Trace) :

אמור להופיע משהו דומה לצילום המסך הזה :

עכשיו ברור שזמן האחזור שמוצג בפונקציה שלנו אכן נמדד ב-300 אלפיות השנייה.

כל נקודה בתרשים הזה היא בקשה להצגת מידע מפורט, כמו חותמת זמן, שיטת HTTP והסטטוס שלה, התוויות שלה, קישור בחזרה לרשומת היומן התואמת וכל קריאה ל-RPC שהפונקציה מבצעת :

אם רוצים להתקרב, פשוט לוחצים על התרשים וגוררים אותו:בחירת טווח זמן מותאם אישית בתרשים המעקב

כדי להתרחק, לוחצים על הלחצן &מירכאות;ביטול מרחק התצוגה;& בראש הדף.

מכיוון שפרסנו פונקציה אחת, התרשים מציג רק GET בקשות ב-URI של hello-monitor, אבל אפשר לסנן מעקבים לפי שיטת HTTP (GET, POST, DELETE, ...), לפי סטטוס HTTP (2XX, 3XX, ...), או באמצעות מסנן הבקשות.

ניווט עכשיו לקטע 'מעקב ומירכאות';סקירה כללית; בתפריט הימני :

בדף הסקירה הכללית מוצגים עקבות מהתקופה האחרונה ותובנות נוספות.

... כמו גם אפשרות ליצור דוחות בהתאמה אישית על סמך שילוב של מסנן בקשות URI, שיטת HTTP, סטטוס HTTP וטווח זמן. הוא גם מאפשר לכם להשוות את הערכים שנוצרו לבסיס זמן :

אם הצלחתם להגדיר את טווחי הזמן הנכונים ויש לכם מספיק נקודות נתונים, אתם יכולים להפיק דוח שיציג את המעבר החשוב בין זמן האחזור של הפונקציה הראשונית לבין זו החדשה :

דוח מותאם אישית כזה יכול לשמש כדי למצוא מתי הייתה בעיית ביצועים ולעקוב אחר אינדיקטור של רמת שירות (SLI) כמו זמן אחזור של בקשות משתמש קצה.

הגענו לסוף השיעור המעשי הזה, שמכסה פריסת פונקציה חדשה ב-Cloud Functions, ניווט ביומנים שלה ותצפית על עקבות הבקשה שלה.

בעוד שפונקציות Cloud Functions וכלים ל-Stackdriver הן פלטפורמות ללא שרתים שאינן עולות כסף, אבל אזרח טוב יוכל למחוק את הפונקציה שלנו בעזרת אזרחות טובה בענן.

פשוט בוחרים בפונקציה hello-monitor בדף הסקירה הכללית של הפונקציות ב-Cloud, ולוחצים על "delete".

הגענו לסוף השיעור הפשוט הזה של התחלת השימוש ב-Cloud Functions לרישום ולמעקב אחרי פונקציות!

הנה כמה פרטים להמשך קריאה :

/