1. מבוא
ב-Codelab הזה תלמדו להשתמש בכלי הרישום והמעקב שזמינים לכל המפתחים שעובדים עם Cloud Functions. הכלים כוללים כל פונקציה של Cloud Functions שאתם פורסים בכל השפות הנתמכות, והם אמורים לאפשר לכם לשפר את הפרודוקטיביות כשאתם כותבים קוד ללא שרת (serverless) ומפעילים אותו.
משתמשים בפונקציה של Cloud Functions שמופעלת ב-HTTP, אבל כל מה שתכסו רלוונטי גם לשפות אחרות ולפונקציות של Cloud Functions שהופעלו על ידי אירועים אחרים.
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
Cloud Shell
אפשר להשתמש ב-Cloud Functions וביכולות הרישום והמעקב שלו מרחוק מהמחשב הנייד, אבל משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.
המכונה הווירטואלית הזו שמבוססת על Debian נטענת עם כל הכלים למפתחים שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כלומר, כל מה שדרוש ל-Codelab הזה הוא דפדפן (כן, הוא פועל ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, לוחצים על Activate Cloud Shell (ההקצאה וההתחברות לסביבה אמורות להימשך כמה דקות).
אחרי ההתחברות ל-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:
Cloud Shell גם מגדירה משתני סביבה כברירת מחדל, והוא יכול להיות שימושי כשמריצים פקודות עתידיות.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
- בשלב האחרון, מגדירים את ברירת המחדל של האזור והפרויקט.
gcloud config set compute/zone us-central1-f
אפשר לבחור מגוון אזורים שונים. מידע נוסף זמין במאמר אזורים ו אזורים.
3. פריסת פונקציה פשוטה של Cloud Functions
כדי שיהיה משהו לעקוב אחריו, צור את המשפט "שלום, עולם" הפונקציה של Cloud Functions. בתפריט השמאלי של מסוף Google Cloud, לוחצים על Cloud Functions ואז על Create Function.
כותבים "hello-tracking" בתור השם של הפונקציה החדשה של Cloud Functions.
שומרים את כל ברירות המחדל של קוד המקור. (עם זאת, תוכלו לבחור שפה אחרת או זמן ריצה אחר, אם תרצו.)
לבסוף, לוחצים על Create.
הפונקציה של Cloud Functions אמורה להופיע עם סימן וי ירוק לצידה, שמציין שהיא מוכנה להפעלה.
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.
זה יוביל אתכם לקטע Stackdriver Logging בפרויקט, שבו יוצגו רק יומני הפונקציה של Cloud Functions.
כל הבקשות לפונקציה של Cloud Functions צריכות להחזיר קוד סטטוס 200.
כשמציגים את היומנים, אפשר לבצע את הפעולות הבאות:
- יש לסנן לפי רמת יומן (במקרה שלכם, כל היומנים הם ברמת
debug
). - בוחרים מסגרת זמן ספציפית (יחסית או מוחלטת).
- מפעילים סטרימינג של יומנים (עם האפשרות הפעלה בחלק העליון של המסך).
- מעתיקים קישור לרשומה ביומן (לשיתוף עם חברי צוות).
- הצגת רשומה ביומן בהקשר של המשאב.
- הצמדה של רשומה ביומן (כסימן ויזואלי).
- ניתן לייצא יומנים ל-BigQuery, ל-Cloud Storage או ל-Pub/Sub (או פשוט להוריד אותם כקובצי JSON או CSV).
6. עדכון הפונקציה
באמצעות מסוף Cloud, נכנסים לתצוגה פרטי הפונקציה ומגלים את העלייה החדה שיצרתם עם בודק העומסים במספר ההפעלות לשנייה ובזמן הביצוע שלהן.
כלי מפורט נוסף לבדיקת זמן האחזור וקריאות RPC הוא Stackdriver Trace, אבל כדי להשתמש בו צריך לבצע כמה שינויים ב-Cloud Functions. בצע את הפעולות הבאות:
- מוסיפים את חבילת
node-emoji
להצלת החיים כתלות. - צריך לעדכן את קוד הפונקציה כדי להשתמש במודול ה-emoji של הצומת ולהוסיף זמן אחזור מסוים.
- מוסיפים משתנה סביבה כדי להפעיל את Stackdriver Trace ל-Cloud Functions.
בקטע Function details (פרטי הפונקציה), לוחצים על Edit כדי לשנות את הפונקציה.
עורכים את הקובץ 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
באופן הבא:
לוחצים על שמירה.
חזרו ל-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).
אתם אמורים לראות משהו שדומה לצילום המסך הבא:
זה אמור להיות ברור לגמרי שזמן האחזור בפונקציה של Cloud Functions אכן נמדד ב-300 אלפיות השנייה.
כל נקודה בתרשים היא בקשה שלגביה ניתן לראות מידע מפורט, כמו חותמת זמן, השיטה והסטטוס של HTTP, התוויות שלה, קישור לרשומה המתאימה ביומן וכל קריאה נוספת ל-RPC שהפונקציה של Cloud Functions מבצעת.
אם רוצים להגדיל את התצוגה, פשוט לוחצים על התרשים וגוררים אותו.
כדי להתרחק, לוחצים על ביטול המרחק מהתצוגה בחלק העליון של הדף.
בגלל שפרסתם פונקציה אחת של Cloud Functions, בתרשים מוצגות רק בקשות GET
ב-URI hello-monitor
, אבל אפשר לסנן עקבות לפי שיטת HTTP (GET, POST, DELETE) לפי סטטוס HTTP (2XX, 3XX) או באמצעות מסנן הבקשות.
עוברים אל סקירה כללית בתפריט הימני:
בדף הסקירה הכללית אפשר למצוא עקבות מהזמן האחרון ותובנות נוספות.
תוכלו גם ליצור דוחות בהתאמה אישית על סמך שילוב של מסנן בקשות URI, שיטת HTTP, סטטוס HTTP וטווח זמן. הוא אפילו מאפשר לכם להשוות את הערכים שנוצרו לערך בסיס של זמן.
אם תצליחו להגדיר את טווחי הזמן הנכונים עם מספיק נקודות על הגרף, תוכלו להפיק דוח שמראה את זמני האחזור החשובים בין הפונקציה הראשונית של Cloud Functions לבין הפונקציה החדשה.
דוח מותאם אישית כזה מאפשר לזהות מתי הייתה בעיית ביצועים וגם לעקוב אחר אינדיקטור רמת שירות (SLI), כמו זמן האחזור של בקשה של משתמש קצה.
8. הגיע הזמן לנקות את המשאבים
סיימנו את ה-Codelab!
הכלים Cloud Functions ו-Stackdriver הם פלטפורמות ללא שרת (serverless) שלא כפופות לעלויות השימוש בהן. עם זאת, עליכם להיות אזרחי ענן טובים ולמחוק את הפונקציה של Cloud Functions. פשוט בוחרים hello-monitor
ב-Overview בקטע Cloud Functions ולוחצים על Delete.
9. מה השלב הבא?
הנה כמה מקורות מידע למעקב:
/