‫Cloud Trace ו-Cloud Service Mesh

<0x0 Google Cloud מידע נוסף זמין במאמר סקירה כללית על Cloud Service Mesh.

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

‫Cloud Trace זמין בהתקנות של Cloud Service Mesh בפלטפורמות הבאות:

  • ‫GKE ב- Google Cloud
  • אשכולות GKE Enterprise במקום אם התקנתם באמצעות רשות אישורים של Cloud Service Mesh

הערה: Cloud Trace מושבת כברירת מחדל. אחרי ההפעלה, בדפים של Cloud Service Mesh במסוף Google Cloud מופיע קישור למעקב בדף Cloud Trace . למידע מפורט על התמחור, אפשר לעיין בדף המחירון של Cloud Trace.

הפעלת Cloud Trace

בקטע הזה מוסבר איך להפעיל את Cloud Trace.

מנוהל (TD)

בקטע הזה מוסבר איך להפעיל את Cloud Trace ב-Cloud Service Mesh עם מישור בקרה מנוהל של Cloud Service Mesh.

  1. מריצים את הפקודה הבאה כדי להפעיל את Cloud Trace:

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
    EOF
    

מנוהל (Istiod)

בקטע הזה מוסבר איך להפעיל את Cloud Trace ב-Cloud Service Mesh עם מישור בקרה מנוהל של Istiod.

  1. מריצים את הפקודה הבאה:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    data:
       mesh: |-
          defaultConfig:
            tracing:
              stackdriver: {}
    kind: ConfigMap
    metadata:
       name: istio-release-channel
       namespace: istio-system
    EOF
    

    כאשר release-channel הוא ערוץ ההפצה שלכם (asm-managed, ‏asm-managed-stable או asm-managed-rapid).

  2. מריצים את הפקודה הבאה כדי להציג את ה-configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. כדי לוודא ש-Cloud Trace מופעל, מוודאים שהשורות הבאות מופיעות בקטע mesh:.

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. מפעילים מחדש את שרתי ה-proxy.

    הערה: הגדרת כלי המעקב היא חלק מההגדרה של proxy bootstrap, ולכן צריך להפעיל מחדש כל pod ולהוסיף אותו מחדש כדי שהעדכון של כלי המעקב יחול עליו. לדוגמה, אפשר להשתמש בפקודה הבאה כדי להפעיל מחדש פודים ששייכים לפריסה:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

בתוך האשכול

בקטע הזה מוסבר איך להפעיל את Cloud Trace ב-Cloud Service Mesh עם מישור בקרה בתוך האשכול.

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

ברירת מחדל

מריצים את הפקודה הבאה כדי להפעיל את Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-trace

הפקודה הזו מחילה את קובץ השכבה הבא כדי להפעיל מעקב עם אפשרויות ברירת המחדל. שימו לב ששיעור הדגימה שמוגדר כברירת מחדל הוא 1%. אם רוצים לשנות את ברירת המחדל, צריך להשתמש ב---custom-overlay.

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
   values:
     global:
       proxy:
         tracer: stackdriver

רשימת האפשרויות זמינה בחבילה anthos-service-mesh.

בהתאמה אישית

אפשר לשנות את ברירת המחדל על ידי ציון ערך של tracing.sampling. הערך צריך להיות בטווח 0.0 עד 100.0, עם דיוק של 0.01. לדוגמה, כדי לעקוב אחרי 5 בקשות מתוך כל 10,000, משתמשים בערך 0.05.

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

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
     defaultConfig:
        tracing:
        sampling: 100
   values:
     global:
       proxy:
         tracer: stackdriver

מריצים את הפקודה הבאה כדי להפעיל את Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

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

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

העברת הקשר של מעקב

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

לשם כך, אפליקציה צריכה לאסוף ולהפיץ את הכותרות המתאימות מהבקשה הנכנסת לכל הבקשות היוצאות. ההגדרה של Cloud Service Mesh Stackdriver tracing תקבל כל אחד מפורמטי הכותרות הבאים, ותפיץ את כל הפורמטים הבאים:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • W3C TraceContext (traceparent)
  • ‫Google Cloud Trace‏ (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

המשמעות היא שהאפליקציות שלכם יכולות להשתמש בכל אחד מהפורמטים האלה כדי להפיץ את ההקשר של המעקב, והמעקבים ייווצרו ויוגדרו ב-Stackdriver בצורה מתאימה.

דוגמה

הנה דוגמה לבקשת HTTP-Get עם כותרת traceparent בבקשה המקורית. שימו לב לכותרות הנוספות של הקשר למעקב שהפרוקסי מוסיף.

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

שימו לב שקבוצת כותרות הבקשה שמוחזרת כוללת את כל הכותרות של הקשר למעקב.

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

יצירת מעקב מלקוח עם מזהה מותאם אישית

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

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

מידע נוסף על x-client-trace-id זמין במסמכי העזרה של Envoy.

נתוני מעקב של הגישה

הצגת דוגמאות של מעקב בשירות

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

  1. נכנסים אל הדף Cloud Service Mesh במסוף Google Cloud .

    כניסה לדף Cloud Service Mesh

  2. בקטע Services (שירותים), בוחרים את שם השירות שרוצים לבדוק.

    בצילום המסך הבא מוצגת דוגמה ל-frontend Service.

    גרף מעקב של Cloud Service Mesh

  3. בקטע Request traces (בקשות למעקב), לוחצים על מעקב כלשהו כדי לראות מידע נוסף.

    בצילום המסך הבא מוצגת דוגמה לחלונית המשנה של בקשת המעקב.

    חלונית המשנה של Cloud Service Mesh trace

הצגת כל העקבות

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

  1. נכנסים אל הדף Cloud Service Mesh במסוף Google Cloud .

    כניסה לדף Cloud Service Mesh

  2. בקטע Services (שירותים), בוחרים את שם השירות שרוצים לבדוק.

  3. עוברים לדף מדדים.

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

  5. לוחצים על הצגת נתוני מעקב.

הנתונים של מעקב אחר שירות ב-Cloud Service Mesh כוללים את המידע הבא:

  • זמני האחזור של הבקשות בשירותים שונים ברשת.
  • מאפיינים של בקשות HTTP, כולל מזהה, כתובת URL, גודל, זמן אחזור ופרוטוקול.
  • שם השירות, מרחב השמות ומזהה הרשת כחלק מהתוויות istio.canonical_service, istio.namespace ו-istio.mesh_id, בהתאמה.

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