‫Cloud Trace ו-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)

אם כבר יש לכם משאב מותאם אישית של Istio telemetry API, צריך לכלול אותו במשאב המותאם אישית החדש של Istio telemetry API כדי לשמור על הגדרות ההתאמה האישית הקודמות במשאב המותאם אישית הקיים של Istio telemetry.

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

  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
    

    כברירת מחדל, תדירות הדגימה היא 1%. כדי לשנות את ברירת המחדל, אפשר לציין את randomSamplingPercentage ולהגדיר לו ערך בין 0.0 ל-100.0.

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

    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
         randomSamplingPercentage: 100.0
    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. מפעילים מחדש את השרתים הפרוקסי.

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

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

באשכול

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

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

ברירת מחדל

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

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

הפקודה הזו מחילה את קובץ שכבת-העל הבא כדי להפעיל מעקב עם אפשרויות ברירת המחדל. שימו לב: תדירות הדגימה שמוגדרת כברירת מחדל היא 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 המתאימות, כך שכשהשרתים הפרוקסי שולחים מידע על טווחים, אפשר יהיה לקשר את הטווחים בצורה נכונה למעקב יחיד.

כדי לעשות את זה, האפליקציה צריכה לאסוף ולהפיץ את הכותרות המתאימות מהבקשה הנכנסת לכל הבקשות היוצאות. ההגדרה של 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 בבקשה המקורית. שימו לב לכותרות הנוספות של הקשר יומן המעקב שנוספו על ידי שרת ה-proxy.

$ 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. בקטע בקשות למעקב, לוחצים על בקשה כלשהי כדי לראות מידע נוסף.

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

    חלונית המשנה של מעקב ב-Cloud Service Mesh

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

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

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

    כניסה לדף Cloud Service Mesh

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

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

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

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

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

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

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