התראות: שגיאות מבוססות-רישום בנושאי Pub/Sub

1. מבוא

העדכון האחרון:21 ביוני 2023

התראות על שגיאות מבוססות-יומנים בקשר לזמינות

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

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

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

נושאי Pub/Sub כערוץ התראות עבור התראות

נושא Pub/Sub יכול לשמש כערוץ התראות של Google Cloud Monitoring לשליחת התראות למינוי Pub/Sub. כך ניתן לשלב את ההתראות של Cloud Monitoring עם מערכות אחרות, כולל שירותי התראות של צד שלישי.

כדי להשתמש בנושא Pub/Sub כערוץ התראות, קודם צריך ליצור נושא Pub/Sub ומינוי Pub/Sub. לאחר מכן צריך ליצור ערוץ התראות ב-Cloud Monitoring שהיעד שלו הוא Pub/Sub.

כשהתראה מופעלת, Cloud Monitoring שולח הודעה לנושא Pub/Sub. לאחר מכן, המנוי של המינוי ל-Pub/Sub יוכל לעבד את ההודעה ולבצע את הפעולה המתאימה.

מה תפַתחו

ב-Codelab הזה אנחנו מתכוונים לפרוס אפליקציה, ליצור נושא Pub/Sub וליצור התראה מבוססת יומן שבודקת שגיאות בחלק ספציפי של האפליקציה ומשתמשת בנושא Pub/Sub כערוץ התראות.

מה תלמדו

  • איך יוצרים נושא Pub/Sub
  • איך יוצרים התראה מבוססת יומן

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

מה צריך להכין

  • חשבון Google Cloud עם הרשאות:
  • פריסת אפליקציות של Cloud Run
  • יצירת נושאי Pub/Sub
  • יצירת התראות

2. בתהליך ההגדרה

בחירה או יצירה של פרויקט ב-Google Cloud

כדי לבחור פרויקט קיים, משתמשים בתפריט הנפתח:

b35bf95b8bf3d5d8.png

כדי ליצור פרויקט חדש ב-Google Cloud, אפשר לפעול לפי השלבים הבאים:

  1. נכנסים אל מסוף Google Cloud Platform.
  2. לוחצים על הלחצן Create Project.
  3. נותנים שם לפרויקט.
  4. בוחרים חשבון לחיוב לפרויקט.
  5. לוחצים על הלחצן Create.

הפרויקט ייווצר ותועברו למרכז הבקרה של הפרויקט. משם תוכלו להתחיל להשתמש בשירותי Google Cloud.

ריכזנו כאן כמה פרטים נוספים לגבי כל שלב:

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

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

3. פורסים את אפליקציית ה-API

במה עוסק האפליקציה או ה-API לדוגמה?

האפליקציה שלנו היא אפליקציה פשוטה של Inventory API שחושפת נקודת קצה ל-API ל-REST עם כמה פעולות כדי להציג את רשימת הפריטים במלאי ולקבל ספירת מלאי ספציפית של פריטים.

אחרי שאנחנו פורסים את ה-API ובהנחה שהוא מתארח ב-https://<somehost>, אנחנו יכולים לגשת לנקודות הקצה ל-API באופן הבא:

https://<somehost>/inventory

כך תצוין רשימה של כל פריטי המוצר עם רמות המלאי הזמינות.

https://<somehost>/inventory/{productid}

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

נתוני התגובה שמוחזרים הם בפורמט JSON.

הערה: האפליקציה הזו ל-API מיועדת למטרות הדגמה בלבד ולא מייצגת הטמעת API מאובטחת ואיתנה. היא נועדה לאפשר לנו להשתמש באפליקציה מהירה, כדי לבחון את המטרה העיקרית של שיעור ה-Lab, כלומר הפעילות של Google Cloud.

נתונים לדוגמה ובקשה/תגובה של API

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

קוד זיהוי מוצר

רמת המלאי הזמינים

I-1

10

I-2

20

I-3

30

בקשה ותגובה לדוגמה מה-API מוצגים בהמשך:

בקשת API

תגובת API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

שכפול המאגר

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

ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

bce75f34b2c53987.png

נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:

f6ef2b5f13479f3a.png

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

הגדרת gcloud

ב-Cloud Shell, מגדירים את מזהה הפרויקט ושומרים אותו כמשתנה PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

עכשיו, מריצים את הפקודה הבאה:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

הפעולה הזו תיצור תיקייה בשם cloud-code-sample-repository, בתיקייה הזו.

(אופציונלי) מריצים את האפליקציה ב-Cloud Shell

אפשר להריץ את האפליקציה באופן מקומי באמצעות השלבים הבאים:

  1. בטרמינל, עוברים לגרסת Python של ה-API באמצעות הפקודה הבאה:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. בטרמינל, שולחים את הפקודה הבאה (בזמן הכתיבה ב-Cloud Shell מותקנת גרסת Python 3.9.x ואנחנו נשתמש בגרסת ברירת המחדל. אם אתם מתכננים להריץ אותו באופן מקומי במחשב הנייד, תוכלו להשתמש ב-Python 3.8 ומעלה:

$ python app.py

  1. אפשר להריץ את הפקודה הבאה כדי להפעיל את שרת Python באופן מקומי.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

לוחצים על Preview ביציאה 8080. 5. פעולה זו תפתח חלון דפדפן. תופיע שגיאה 404, וזה בסדר. משנים את כתובת ה-URL ומשנים אותה כך שיופיע רק /מלאי אחרי שם המארח.

לדוגמה: במחשב שלי, הוא נראה כך:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

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

709d57ee2f0137e4.png

  1. אפשר לעצור את השרת עכשיו על ידי מעבר לטרמינל ולחיצה על Ctrl-C

פורסים את האפליקציה

עכשיו נפרוס את אפליקציית ה-API הזו ל-Cloud Run. התהליך כולל שימוש בלקוח שורת הפקודה של Google Cloud כדי להריץ את הפקודה לפריסת הקוד ב-Cloud Run.

מהטרמינל, מזינים את הפקודה הבאה של gcloud:

$ gcloud run deploy --source .

יוצגו לכם כמה שאלות, וחלק מהנקודות יצוינו בהמשך:

  1. שם השירות (python-flask-api): בוחרים באפשרות ברירת המחדל הזו או בוחרים בשם כמו my-inventory-api
  2. ה-API [run.googleapis.com] לא מופעל בפרויקט [613162942481]. רוצה להפעיל ולנסות שוב (הפעולה תימשך כמה דקות)? (y/N)? Y
  3. יש לציין אזור: יש לבחור 31 (us-west-1)
  4. ה-API [artifactregistry.googleapis.com] לא מופעל בפרויקט [613162942481]. רוצה להפעיל ולנסות שוב (הפעולה תימשך כמה דקות)? (y/N)? Y
  5. פריסה מקוד המקור דורשת מאגר Docker של Artifact Registry לאחסון קונטיינרים שנוצרו. המערכת תיצור מאגר בשם [cloud-run-source-deploy] באזור [us-west1].
  6. רוצה להמשיך (Y/n)? Y
  7. לאפשר הפעלות לא מאומתות ל-[my-inventory-api] (y/N)? Y

בסופו של דבר, התהליך הזה יאפשר לקחת את קוד המקור, ליצור אותו בקונטיינרים, לדחוף אותו ל-Artifact Registry ואז לפרוס את השירות Cloud Run ואת הגרסה הקודמת. תודה על הסבלנות במהלך התהליך (התהליך עשוי להימשך 3-4 דקות), והתהליך אמור להסתיים בכתובת ה-URL של השירות.

כך מוצגת הרצה לדוגמה:

87ba8dbf88e8cfa4.png

בדיקת האפליקציה

עכשיו, לאחר שפרסנו את האפליקציה ב-Cloud Run, אתם יכולים לגשת לאפליקציית ה-API באופן הבא:

  1. שימו לב לכתובת ה-URL של השירות מהשלב הקודם. לדוגמה, בהגדרה שלי, הוא מוצג בתור https://my-inventory-api-bt2r5243dq-uw.a.run.app. זה המקום לקרוא לזה <SERVICE_URL>.
  2. פותחים דפדפן ונכנסים ל-3 כתובות ה-URL הבאות של נקודות הקצה ל-API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

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

קבלת פרטי שירות מ-Cloud Run

פרסנו את שירות ה-API שלנו ב-Cloud Run, סביבת מחשוב ללא שרת (serverless). אנחנו יכולים להיכנס לשירות Cloud Run דרך מסוף Google Cloud בכל שלב.

מהתפריט הראשי, עוברים אל Cloud Run. פעולה זו תציג את רשימת השירותים שאתם מפעילים ב-Cloud Run. אתם אמורים לראות את השירות שפרסתם עכשיו. בהתאם לשם שבחרתם, אתם אמורים לראות משהו כזה:

2633965c4bc957cc.png

לוחצים על שם השירות כדי להציג את הפרטים. פרטי הדוגמה מוצגים בהמשך:

33042ae64322ce07.png

שימו לב לכתובת ה-URL, שהיא רק כתובת ה-URL של השירות שניתן להזין לדפדפן ולגשת ל-Inventory API שפרסנו כרגע. אפשר לעיין ב'מדדים' ובפרטים אחרים.

נתחיל עם חבילת התפעול של Google Cloud.

4. יצירת נושא Pub/Sub כדי לקבל את ההתראה

כדי ליצור נושא Pub/Sub, אפשר לבצע את השלבים הבאים במסוף Google Cloud:

  1. מחפשים את האפשרות Pub/Sub בתיבת החיפוש ומנווטים אל Pub/Sub. 935028bd8f6328ef.png
  2. אם אתם לא נמצאים עדיין בכרטיסייה נושאים, לוחצים עליה. 7fd8bf91386a88fd.png
  3. לוחצים על הלחצן יצירת נושא. cd9d197f9023c41b.png
  4. מזינים לנושא שם שהמערכת יכולה לזהות.

173f313b4a3c4934.png

  1. לוחצים על הלחצן Create. ca9a02477da21a44.png
  2. מעתיקים את שם הנושא באמצעות הלחצן של סמל ההעתקה. צריך אותה בקטע הבא.

20848252ee83df93.png

5. יצירת מדיניות התראות עבור שגיאות

חקירה של יומני שגיאות

כדי להציג את יומני השגיאות של האפליקציה:

לוחצים על הכרטיסייה Logging.

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

6605b68395185b89.png

כדי לדמות מספר בקשות לא חוקיות לשירות המלאי, צריך לציין מזהי מוצרים שהם לא אחד מהרכיבים I-1 , I-2 ו-I-3. לדוגמה: בקשה שגויה היא:

https://&lt;SERVICE_URL&gt;/inventory/I-999

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

יצירת מדיניות של התראות מבוססות-יומנים בהתאמה אישית לגבי שגיאות

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

  1. בתיבת השאילתה, מזינים את הפרמטרים הבאים של השאילתה:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "אזהרה באפליקציה: התקבלה בקשת מלאי עבור מזהה מוצר שגוי"

הוא אמור להיראות כך:

f672154cfebf0051.png

  1. לוחצים על 'הרצת שאילתה'. כך יוצגו כל הבקשות שהתקבלו ובאילו בעיות זוהתה הבעיה.

77c190e3a2fab6bf.png

  1. כדי להמיר את ההתראה שלמעלה להתראה, לוחצים על הלחצן יצירת התראה שמופיע ב-Logs Explorer מתחת לשדה השאילתה, משמאל:

4cd3fcf142189376.png

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

b82446854bad87fc.png

  1. משתמשים בשאילתה הראשונית עבור יומנים שייכללו בהתראה:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. מגדירים את תדירות ההתראות ואת משך האירוע. לצורך הדוגמה, ניתן להשתמש בערכים המינימליים לכל אחד מהערכים:

bb3d96448ec998a1.png

  1. לבסוף, מדברים על 'למי צריך לקבל התראות?' בוחרים את ערוץ ההתראות של Pub/Sub שיצרתם קודם:

3593c48c29d4b76c.png

  1. לוחצים על שמירה. כדי להציג ולנהל את מדיניות ההתראות, נכנסים לדף Alerting ובודקים בקטע 'מדיניות': ca08ea380fb37c91.png

6. מזל טוב

כל הכבוד! הגדרת בהצלחה את בדיקת זמני הפעילות לשליחת התראות אל Pub/Sub!