Cloud Trace ו-Cloud Service Mesh
הערה: המדריך הזה תומך רק ב-Cloud Service Mesh עם ממשקי API של Istio, ולא תומך בממשקי API של 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 עם מישור בקרה מנוהל של Traffic Director.
מריצים את הפקודה הבאה כדי להפעיל את 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.
מריצים את הפקודה הבאה:
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).מריצים את הפקודה הבאה כדי להציג את ה-configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
כדי לוודא ש-Cloud Trace מופעל, צריך לוודא שהשורות הבאות מופיעות בקטע
mesh:.... apiVersion: v1 data: mesh: | .... defaultConfig: tracing: stackdriver:{} ...מפעילים מחדש את שרתי ה-proxy.
שימו לב שהגדרת המעקב היא חלק מהגדרת ה-bootstrap של שרת ה-proxy, ולכן צריך להפעיל מחדש כל pod ולהזריק אותו מחדש כדי לקבל את עדכון המעקב. לדוגמה, אפשר להשתמש בפקודה הבאה כדי להפעיל מחדש 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
שימו לב שהגדרת המעקב היא חלק מהגדרת ה-bootstrap של שרת ה-proxy, ולכן צריך להפעיל מחדש את ה-pods ולהוסיף אותם מחדש כדי לקבל את עדכון המעקב. כדי להפעיל מחדש pod-ים ששייכים לפריסה, משתמשים בפקודה הבאה:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
הפצה של הקשר יומן מעקב
למרות שקובצי העזר החיצוניים יכולים לשלוח באופן אוטומטי יחידות לוגיות למעקב, הם צריכים כמה רמזים כדי לקשר את כל יומן המעקב. האפליקציות צריכות להפיץ את כותרות ה-HTTP המתאימות, כדי שכאשר שרתי ה-proxy ישלחו מידע על span, יהיה אפשר לקשר את ה-spans בצורה נכונה למעקב אחד.
כדי לעשות זאת, האפליקציה צריכה לאסוף ולהפיץ את הכותרות המתאימות מהבקשה הנכנסת לכל הבקשות היוצאות. הגדרת המעקב של Cloud Service Mesh Stackdriver תקבל כל אחד מהפורמטים הבאים של כותרות, ותפיץ את כל הפורמטים הבאים:
- 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.
גישה למעקבים
הצגת דוגמאות למעקב אחרי שירות
כדי לראות דגימה של נתוני מעקב של שירות באפליקציה:
נכנסים לדף Cloud Service Mesh במסוף Google Cloud .
בקטע Services, בוחרים את שם השירות שרוצים לבדוק.
בצילום המסך הבא מוצגת דוגמה לשירות
frontend.
בקטע בקשות למעקב, לוחצים על בקשה כלשהי כדי לראות מידע נוסף.
בצילום המסך הבא מוצגת דוגמה לחלונית המשנה של בקשת המעקב.

הצגת כל המעקבים
כדי לראות את כל המעקבים של שירות מסוים:
נכנסים לדף Cloud Service Mesh במסוף Google Cloud .
בקטע Services, בוחרים את שם השירות שרוצים לבדוק.
עוברים לדף מדדים.
בוחרים טווח זמן מהתפריט הנפתח Time Span או מגדירים טווח זמן בהתאמה אישית באמצעות ציר הזמן.
לוחצים על View traces.
המעקבים של שירות ב-Cloud Service Mesh מכילים את המידע הבא:
- זמני האחזור של בקשות בשירותים שונים ברשת.
- מאפיינים של בקשות HTTP, כולל מזהה, כתובת URL, גודל, זמן אחזור ופרוטוקול.
- שם השירות, מרחב השמות ומזהה הרשת כחלק מהתוויות
istio.canonical_service,istio.namespaceו-istio.mesh_id, בהתאמה.