שימוש ב-Stackdriver Logging וב-Stackdriver Trace ל-Cloud Functions

1. מבוא

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

5815064fec87444b.png

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

2. הגדרה ודרישות

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

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

Cloud Shell

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

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

  1. כדי להפעיל את Cloud Shell ממסוף Cloud, לוחצים על Activate Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (ההקצאה וההתחברות לסביבה אמורות להימשך כמה דקות).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

צילום מסך מתאריך 2017-06-14 בשעה 22:13.43.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:

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 Functions

כדי שיהיה משהו לעקוב אחריו, צור את המשפט "שלום, עולם" הפונקציה של Cloud Functions. בתפריט השמאלי של מסוף Google Cloud, לוחצים על Cloud Functions ואז על Create Function.

3c13aa20af602aa7.png

כותבים "hello-tracking" בתור השם של הפונקציה החדשה של Cloud Functions.

fa6816c96d6d5b94.png

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

7aadf164450484e.png

לבסוף, לוחצים על Create.

dc74cd21000d6c91.png

הפונקציה של Cloud Functions אמורה להופיע עם סימן וי ירוק לצידה, שמציין שהיא מוכנה להפעלה.

5363a34eb001d5ed.png

4. בדיקת הפונקציה של Cloud Functions ושליחת תעבורת הנתונים באמצעות מחולל עומסים

עכשיו, לאחר שהפונקציה של Cloud Functions פרוסה, מומלץ לבדוק אותה משורת הפקודה.

בשלב הראשון, באמצעות Cloud Shell, מריצים את הפקודה הבאה:

$ gcloud functions describe hello-monitor

הפונקציה אמורה להחזיר תיאור של הפונקציה של Cloud Functions, כולל כתובת ה-URL של httpsTrigger, שהיא נקודת הקצה (endpoint) HTTP(S) להפעלת הפונקציה של Cloud Functions. הוא אמור להיראות כך: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.

הפעלת הפונקציה של Cloud Functions אמורה להיות פשוטה ומצריכה שימוש בפקודה curl בכתובת ה-URL הזו.

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

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

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

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

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

5. ניווט ביומנים

בתצוגת הפרטים של הפונקציה של Cloud Functions, לוחצים על View Logs.

b24157fd3376e6a8.png

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

5a36fa75d2fb0165.png

כל הבקשות לפונקציה של Cloud Functions צריכות להחזיר קוד סטטוס 200.

כשמציגים את היומנים, אפשר לבצע את הפעולות הבאות:

  • יש לסנן לפי רמת יומן (במקרה שלכם, כל היומנים הם ברמת debug).
  • בוחרים מסגרת זמן ספציפית (יחסית או מוחלטת).
  • מפעילים סטרימינג של יומנים (עם האפשרות הפעלה 751a4600016f34a7.pngבחלק העליון של המסך).
  • מעתיקים קישור לרשומה ביומן (לשיתוף עם חברי צוות).
  • הצגת רשומה ביומן בהקשר של המשאב.
  • הצמדה של רשומה ביומן (כסימן ויזואלי).
  • ניתן לייצא יומנים ל-BigQuery, ל-Cloud Storage או ל-Pub/Sub (או פשוט להוריד אותם כקובצי JSON או CSV).

6. עדכון הפונקציה

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

aaee3159bbe395d3.png 7ed347101da5eca0.png

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

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

בקטע Function details (פרטי הפונקציה), לוחצים על Edit כדי לשנות את הפונקציה.

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
  
};

הפעולה הזו מוסיפה אמוג'י אקראי להודעה שמוחזרת על ידי הפונקציה של Cloud Functions אחרי שהיא מושהית למשך 300 אלפיות השנייה.

לבסוף, מוסיפים משתנה סביבה של פונקציה של Cloud Functions שנקרא GOOGLE_CLOUD_TRACE_ENABLED ומגדירים את הערך true באופן הבא:

9205bd277b76aa21.png

לוחצים על שמירה.

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

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

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

7. מעקב אחר הפונקציה המעודכנת של Cloud Functions

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

576373f38cad6f8.png

אתם אמורים לראות משהו שדומה לצילום המסך הבא:

44a36b758b49f88f.png

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

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

5815064fec87444b.png

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

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

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

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

e920cfca2a50899e.png

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

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

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

8. הגיע הזמן לנקות את המשאבים

סיימנו את ה-Codelab!

הכלים Cloud Functions ו-Stackdriver הם פלטפורמות ללא שרת (serverless) שלא כפופות לעלויות השימוש בהן. עם זאת, עליכם להיות אזרחי ענן טובים ולמחוק את הפונקציה של Cloud Functions. פשוט בוחרים hello-monitor ב-Overview בקטע Cloud Functions ולוחצים על Delete.

aceb633cf70a4a27.png

9. מה השלב הבא?

הנה כמה מקורות מידע למעקב:

/