מעקב אחרי תנועה נכנסת באמצעות Cloud Trace

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

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

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

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

לפני שמתחילים

  1. מפעילים בפרויקט את Cloud Trace API ואת Network Services API:

    gcloud services enable \
        cloudtrace.googleapis.com \
        networkservices.googleapis.com
    
  2. מוודאים שפרסתם מאזן עומסים נתמך. למידע נוסף, קראו את המאמרים הבאים:

  3. שימו לב לשם ולהיקף של כלל ההעברה של מאזן העומסים. ההיקף של כלל ההעברה תלוי בסוג של מאזן העומסים:

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

    כדי להציג את רשימת כללי ההעברה בפרויקט, משתמשים בפקודה gcloud compute forwarding-rules list:

    gcloud compute forwarding-rules list
    

התפקידים הנדרשים

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

כדי לאפשר למאזן העומסים לכתוב קטעי מעקב ב-Cloud Trace, צריך לתת את התפקיד "סוכן Cloud Trace" (roles/cloudtrace.agent) בפרויקט לחשבונות השירות הבאים:

  • סוכן השירות של Compute Engine: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
  • סוכן השירות של אבטחת הרשת: service-PROJECT_NUMBER@gcp-sa-networksecurity.iam.gserviceaccount.com
  • חשבונות השירות של עומסי העבודה בקצה העורפי, אם הקצוות העורפיים מייצאים את הטווחים שלהם ל-Cloud Trace. בלי התפקיד הזה, ב-Cloud Trace יוצג רק הטווח של מאזן העומסים, והמעקב לא יכלול טווחים של קצה עורפי.

מחליפים את PROJECT_NUMBER במספר הפרויקט ב-Google Cloud .

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

הגדרת מדיניות טלמטריה

מגדירים מדיניות טלמטריה בקובץ YAML בפורמט הבא:

name: "projects/PROJECT_ID/locations/LOCATION/telemetryPolicies/POLICY_NAME"
displayName: "DISPLAY_NAME"
telemetryTarget:
  resources:
  - "FORWARDING_RULE_URI"
tracingConfiguration:
  samplingRate: SAMPLING_RATE
  parentBasedSampling:
    enabled: ENABLE_PARENT_BASED_SAMPLING
    samplingRate: PARENT_BASED_SAMPLING_RATE

בטבלה הבאה מתוארים השדות במדיניות טלמטריה:

שדה תיאור
name

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

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫LOCATION: המיקום של מדיניות הטלמטריה, שצריך להתאים להיקף של כללי ההעברה שהמדיניות מטרגטת. לכללי העברה גלובליים, משתמשים ב-global. בכללי העברה אזוריים, משתמשים באזור של כלל ההעברה, למשל us-central1.
  • ‫POLICY_NAME: השם של מדיניות הטלמטריה. השם צריך להיות באורך של 4 עד 63 תווים, להתחיל באות קטנה, להכיל רק אותיות קטנות, מספרים ומקפים, ולהסתיים באות קטנה או במספר.
displayName זה שינוי אופציונלי. שם קריא לאנשים (DISPLAY_NAME) של מדיניות הטלמטריה.
telemetryTarget.resources

רשימה של שמות המשאבים המלאים (FORWARDING_RULE_URI) של כללי ההעברה שהמדיניות חלה עליהם. אפשר לציין עד 50 משאבים. צריך להשתמש באחד מהפורמטים הבאים:

  • כלל העברה גלובלי: //compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
  • כלל העברה אזורי: //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME
מחליפים את הערכים הבאים:
  • ‫FORWARDING_RULE_NAME: השם של כלל ההעברה
  • ‫REGION: האזור של כלל ההעברה, למשל us-central1
tracingConfiguration.samplingRate שיעור הבקשות למעקב (SAMPLING_RATE), שצוין כערך מ-0.0 (0%) עד 1.0 (100%). לדוגמה, 0.01 דוגם 1% מהבקשות. ערך ברירת המחדל הוא 0.0.
tracingConfiguration.parentBasedSampling.enabled זה שינוי אופציונלי. האם מאזן העומסים מכבד את הדגל שנדגם בכותרת traceparent הנכנסת של W3C‏ (ENABLE_PARENT_BASED_SAMPLING) הוא true או false. ערך ברירת המחדל הוא false. נתמך רק במאזני עומסים פנימיים של אפליקציות (ALB).
tracingConfiguration.parentBasedSampling.samplingRate זה שינוי אופציונלי. החלק היחסי של הבקשות שנדגמו במעלה הזרם למעקב (PARENT_BASED_SAMPLING_RATE), שצוין כערך מ-0.0 עד 1.0. לדוגמה, 1.0 עוקב אחרי כל הבקשות שלקוח או שירות במעלה הזרם כבר דגמו.

הגדרת מעקב במאזן עומסים חיצוני

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

  1. יוצרים קובץ YAML בשם storefront-tracing-policy.yaml:

    cat <<EOF > storefront-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/global/telemetryPolicies/storefront-tracing-policy"
    displayName: "Tracing policy for the storefront load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
    EOF
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב-Google Cloud
    • ‫FORWARDING_RULE_NAME: השם של כלל ההעברה הגלובלי של מאזן העומסים

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

  2. מייבאים את מדיניות הטלמטריה באמצעות הפקודה gcloud beta network-services telemetry-policies import:

    gcloud beta network-services telemetry-policies import storefront-tracing-policy \
        --source=storefront-tracing-policy.yaml \
        --location=global
    

הגדרת מעקב במאזן עומסים פנימי

בדוגמה הזו מוגדר מאזן עומסים פנימי אזורי של אפליקציות (ALB) לשירותי תשלום וקופה פנימיים. המדיניות משתמשת בהגדרות הדגימה הבאות:

  • ערך בסיס samplingRate של 0.01 (1%) לבקשות שלא כוללות החלטת דגימה במעלה הזרם.
  • דגימה מבוססת-הורה עם samplingRate של 1.0 (100%), כך שכל בקשת תשלום שכבר נדגמה בחנות או על ידי שירות במעלה הזרם, נבדקת במאזן העומסים הפנימי.

כדי להגדיר את המדיניות:

  1. יוצרים קובץ YAML בשם checkout-tracing-policy.yaml:

    cat <<EOF > checkout-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/REGION/telemetryPolicies/checkout-tracing-policy"
    displayName: "Tracing policy for the internal checkout load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
      parentBasedSampling:
        enabled: true
        samplingRate: 1.0
    EOF
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב-Google Cloud
    • ‫REGION: האזור של כלל ההעברה, למשל us-central1
    • ‫FORWARDING_RULE_NAME: השם של כלל ההעברה האזורי של מאזן העומסים

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

  2. מייבאים את מדיניות הטלמטריה:

    gcloud beta network-services telemetry-policies import checkout-tracing-policy \
        --source=checkout-tracing-policy.yaml \
        --location=REGION
    

אימות מדיניות הטלמטריה

כדי לוודא שמדיניות הטלמטריה קיימת ומטרגטת את כללי ההעברה הנכונים, משתמשים בפקודה gcloud beta network-services telemetry-policies describe:

gcloud beta network-services telemetry-policies describe POLICY_NAME \
    --location=LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POLICY_NAME: שם מדיניות הטלמטריה
  • ‫LOCATION: global או האזור של מדיניות הטלמטריה

כדי להציג את כל כללי מדיניות הטלמטריה במיקום מסוים, משתמשים בפקודה gcloud beta network-services telemetry-policies list:

gcloud beta network-services telemetry-policies list \
    --location=LOCATION

עדכון של מדיניות טלמטריה

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

  1. עורכים את קובץ ה-YAML של המדיניות. לדוגמה, כדי להחיל את מדיניות החנות על כמה כללי העברה גלובליים, מוסיפים כל כלל העברה לרשימה telemetryTarget.resources:

    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/storefront-https-fr"
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/cart-https-fr"
    
  2. מייבאים את המדיניות המעודכנת:

    gcloud beta network-services telemetry-policies import POLICY_NAME \
        --source=POLICY_FILE \
        --location=LOCATION
    

    מחליפים את הערך של POLICY_FILE בנתיב לקובץ ה-YAML של המדיניות.

הצגת המעקבים

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

  1. נכנסים לדף Trace Explorer במסוף Google Cloud .

    כניסה לדף Trace Explorer

  2. בוחרים את הפרויקט ב- Google Cloud .

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

  4. אם רוצים לחקור מעקב ספציפי, עוברים לסרגל הכלים, לוחצים על Trace ID ומזינים את מזהה המעקב.

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

  6. בודקים את ה-span של מאזן העומסים כדי לראות פרטים כמו משך הזמן הכולל וה-backend שטיפל בבקשה.

מידע נוסף על השימוש ב-Trace Explorer זמין במאמר חיפוש ועיון במעקבים.

התאמה בין נתוני מעקב לבין יומנים ומדדים

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

קישור בין נתוני מעקב ליומנים

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

projects/PROJECT_ID/traces/TRACE_ID

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud .

    כניסה לדף Logs Explorer

  2. מרחיבים רשומת יומן של מאזן עומסים.

  3. בסיכום של רשומת היומן, לוחצים על סמל המעקב.

    סמל המעקב לצד סיכום של רשומת יומן ב-Logs Explorer.

  4. לוחצים על הצגת פרטי המעקב.

המעקב נפתח בדף Trace Explorer.

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

  1. נכנסים לדף Trace Explorer במסוף Google Cloud .

    כניסה לדף Trace Explorer

  2. לוחצים על מעקב כדי לפתוח את החלונית Details.

  3. לוחצים על View Logs.

רשומות היומן של מאזן העומסים לבקשה יופיעו.

התאמה בין נתוני מעקב למדדים

השוו בין קפיצות חדות בזמן האחזור במדדים של מאזן העומסים לבין פירוט של טווחי המעקב, כדי לקבוע אם מקור זמן האחזור הוא במאזן העומסים או בקצה העורפי. אפשר להציג את המדדים האלה ולשלוח אליהם שאילתות ב-Metrics Explorer ב-Cloud Monitoring. משתמשים במדדים הבאים:

  • מאזן עומסים גלובלי חיצוני של אפליקציות (ALB): loadbalancing.googleapis.com/https/total_latencies ו-loadbalancing.googleapis.com/https/backend_latencies
  • מאזן עומסים חיצוני אזורי של אפליקציות (ALB): loadbalancing.googleapis.com/https/external/regional/total_latencies
  • מאזן עומסים פנימי של אפליקציות (ALB): loadbalancing.googleapis.com/https/internal/total_latencies

השבתת המעקב

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

  • מסירים את כלל ההעברה מהרשימה telemetryTarget.resources של המדיניות, ואז מייבאים את המדיניות המעודכנת.
  • מוחקים את מדיניות הטלמטריה באמצעות הפקודה gcloud beta network-services telemetry-policies delete:

    gcloud beta network-services telemetry-policies delete POLICY_NAME \
        --location=LOCATION
    

שיטות מומלצות

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

  • התאמת תדירות הדגימה לנפח התנועה: בעומסי עבודה בסביבת הייצור עם נפח תנועה גבוה, כדאי להשתמש ב-samplingRate של 0.01 (1%) או 0.001 (0.1%) כדי לאזן בין יכולת התצפית לבין עלויות הטמעת הנתונים ב-Cloud Trace.
  • שימוש בדגימה מבוססת-הורה בארכיטקטורות מרובות שכבות: במאזני עומסים פנימיים של אפליקציות (ALB), מפעילים דגימה מבוססת-הורה כדי שהבקשות שנדגמו במעלה הזרם יתועדו בכל קפיצה פנימית.
  • הוספת כלים לקצוות העורפיים: משתמשים ב-OpenTelemetry SDK עם מפיץ ההקשר של W3C Trace Context בשירותים לקצה העורפי, כדי שהטווחים של הקצה העורפי יצטרפו למעקב שמאזן העומסים מתחיל.

פתרון בעיות

בקטע הזה מתוארות בעיות נפוצות והפתרונות שלהן.

המעקבים לא מופיעים ב-Cloud Trace

אם המעקבים לא מופיעים ב-Cloud Trace, בצעו את הפעולות הבאות:

  1. מוודאים ש-Cloud Trace API מופעל בפרויקט:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. מוודאים שהתפקיד "סוכן Cloud Trace"‏ (roles/cloudtrace.agent) מוקצה לחשבונות השירות שמפורטים בקטע התפקידים הנדרשים.

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

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

הטווחים של המעקב מנותקים או לא מלאים

אם ה-spans של מאזן העומסים מופיעים כמעקבים נפרדים ברמה הבסיסית (root) במקום כחלק מהמעקבים של האפליקציה, בצעו את הפעולות הבאות:

  1. במאזני עומסים פנימיים של אפליקציות (ALB), צריך לוודא שדגימה מבוססת-הורה מופעלת (parentBasedSampling.enabled: true) במדיניות הטלמטריה.

  2. מוודאים שלחשבונות השירות של עומסי העבודה של הלקוח ושל הקצה העורפי יש את התפקיד "סוכן Cloud Trace"‏ (roles/cloudtrace.agent), כדי שאפשר יהיה לייצא את הטווחים שלהם ל-Cloud Trace.

  3. מוודאים שהאפליקציות משתמשות ב-OpenTelemetry SDK עם הפצה מופעלת של הקשר יומן מעקב של W3C, כדי שהכותרת traceparent תופץ בין גבולות השירות. מידע נוסף זמין במסמכי התיעוד של OpenTelemetry בנושא הפצת הקשר.

המאמרים הבאים