המטרה של קוד ה-Lab הזה היא להבין אתכם איך למנף את כלי הרישום והמעקב המוצעים לכל מפתחי הענן. הכלים האלה מגיעים עם כל פונקציה ב-Cloud Functions שפורסים בכל השפות הנתמכות, ואתם אמורים להיות יותר פרודוקטיביים כשאתם כותבים ומפעילים את הקוד ללא שרת (serverless).
נשתמש בפונקציה המופעלת באמצעות HTTP כאן, אבל כל מה שנתייחס אליו חל גם על שפות אחרות ועל פונקציות שהופעלו על ידי אירועים אחרים (קטגוריית אחסון, pub/sub וכו')
הגדרת סביבה בקצב עצמי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-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, במסוף המפתחים, פשוט לוחצים על הלחצן שבפינה השמאלית העליונה (יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו):
לוחצים על הלחצן "Start Cloud Shell"
לאחר החיבור למעטפת בענן, עליך לראות שכבר ביצעת אימות ושהפרויקט כבר מוגדר ל-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
שלך? בודקים באיזה מזהה השתמשתם בשלבי ההגדרה או מחפשים אותו במרכז השליטה של המסוף:
חשוב: לבסוף, מגדירים את אזור ברירת המחדל ותצורת הפרויקט:
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"E; בחלק העליון של המסך)
- העתקת קישור לרשומה ביומן (לשיתוף עם חברי הצוות)
- הצגת רשומת יומן בהקשר של משאב
- הצמדת רשומה ביומן (כאות חזותי)
- לייצא יומנים ל-BigQuery, ל-Cloud Storage או ל-Cloud Pub/Sub (אפשר גם להוריד אותם בפורמט JSON או CSV)
כמו כן, בבורר הימני העליון אפשר לסנן יומנים לפי פונקציה. אתם יכולים גם לחפש תוויות או חיפוש טקסט מלא בסרגל החיפוש שבחלק העליון של החלון. במקרה שלנו התוויות הן hello-monitor
(שם הפונקציה) ומזהה ביצוע לכל בקשה.
ניתן גם לשתף מסננים (יש לעיין בתפריט הנפתח בתיבת החיפוש) :
באמצעות המסוף, עוברים אל ה "פרטי הפונקציה" ורואים את העלייה החדה שאנחנו יוצרים באמצעות בודק הטעינה שלנו, גם מבחינת מספר ההפעלות לשנייה וגם לפי זמן הביצוע שלהם :
עוד כלי מפורט יותר לבדיקת זמן אחזור ושיחות ב-RPC הוא תכונת Stackdriver Trace, אבל לפני שנוכל להשתמש בתכונה הזו, אנחנו צריכים לבצע כמה שינויים בפונקציות שלנו:
- הוספה של חבילת
node-emoji
שמצילה חיים בתור תלויה - צריך לעדכן את קוד הפונקציה כדי להשתמש במודול אמוג'י צומת ולהוסיף זמן אחזור
- צריך להוסיף משתנה סביבה כדי להפעיל את 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 לרישום ולמעקב אחרי פונקציות!
הנה כמה פרטים להמשך קריאה :
- מדדים מבוססי-יומן של Stackdriver Monitoring
- דיווח על שגיאות ב-Stackdriver
- ... או תוכנות Lab נוספות מקטגוריית ה-serverless
/