במאמר הזה נסביר איך להגדיר מעקב בצד הלקוח ומעקב מקצה לקצה באמצעות OpenTelemetry. כדי להפעיל מעקב מקצה לקצה, צריך להגדיר מעקב בצד הלקוח. מידע נוסף זמין במאמר בנושא סקירה כללית על איסוף נתוני מעקב.
לפני שמתחילים
-
כדי לוודא שלחשבון השירות שבו האפליקציה משתמשת יש את ההרשאות הנדרשות להגדרת איסוף נתוני מעקב, צריך לבקש מהאדמין להקצות לחשבון השירות שבו האפליקציה משתמשת בפרויקט את תפקידי ה-IAM הבאים:
-
All:
Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter)
-
All:
Cloud Telemetry Traces Writer (
מוודאים ש-Cloud Trace ו-Telemetry API מופעלים בפרויקט. מידע נוסף על הפעלת ממשקי API זמין במאמר הפעלת ממשקי API.
הגדרת מעקב בצד הלקוח
כדי לייצא עקבות באמצעות פרוטוקול OpenTelemetry (OTLP), צריך להגדיר את האפליקציה. אפשר לשלוח נתונים אל OpenTelemetry Collector או ישירות אל Cloud Trace דרך Telemetry API. שתי השיטות משתמשות באותן תלות והגדרות. ההבדל היחיד ביניהם הוא נקודת הקצה של OTLP שבה משתמשים ב-exporter.
ייצוא מעקבים באמצעות OpenTelemetry Protocol
כדי לייצא מעקבים באמצעות פרוטוקול OpenTelemetry, צריך להגדיר את OpenTelemetry SDK ואת כלי הייצוא OTLP:
מוסיפים את יחסי התלות הנדרשים לאפליקציה באמצעות הקוד הבא:
Java
המשך
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
Node.js
"@opentelemetry/exporter-trace-otlp-grpc": "^0.57.0", "@opentelemetry/sdk-trace-base": "^1.26.0", "@opentelemetry/sdk-trace-node": "^1.26.0",
Python
pip install opentelemetry-api opentelemetry-sdk pip install opentelemetry-exporter-otlp
מגדירים את האובייקט OpenTelemetry ומפעילים את האפשרות 'מעקב'.
Java
המשך
Node.js
Python
הגדרת מעקב מקצה לקצה
בקטע הזה מוסבר איך להגדיר מעקב מקצה לקצה בספריות לקוח של Spanner:
מוסיפים את יחסי התלות הנדרשים לאפליקציה באמצעות הקוד הבא:
Java
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
המשך
בנוסף ליחסי התלות שנדרשים למעקב בצד הלקוח, נדרש גם יחס התלות הבא:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
Python
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
הצטרפות למעקב מקצה לקצה.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
המשך
כדי להפעיל את התכונה, משתמשים באפשרות
EnableEndToEndTracingבהגדרות הלקוח.client, _ := spanner.NewClientWithConfig(ctx, "projects/test-project/instances/test-instance/databases/test-db", spanner.ClientConfig{ SessionPoolConfig: spanner.DefaultSessionPoolConfig, EnableEndToEndTracing: true, }, clientOptions...)
Node.js
const spanner = new Spanner({ projectId: projectId, observabilityOptions: { tracerProvider: openTelemetryTracerProvider, enableEndToEndTracing: true, } })
Python
observability_options={ "tracer_provider": tracer_provider, "enable_end_to_end_tracing": True, } spanner = spanner.Client(project_id, observability_options=observability_options)
מגדירים את ההפצה של הקשר המעקב ב-OpenTelemetry.
Java
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal();
Go
// Register the TraceContext propagator globally. otel.SetTextMapPropagator(propagation.TraceContext{})
Node.js
const {propagation} = require('@opentelemetry/api'); const {W3CTraceContextPropagator} = require('@opentelemetry/core'); propagation.setGlobalPropagator(new W3CTraceContextPropagator());
Python
from opentelemetry.propagate import set_global_textmap from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator set_global_textmap(TraceContextTextMapPropagator())
מאפיינים של מעקב מקצה לקצה
עקבות מקצה לקצה יכולות לכלול את המידע הבא:
| שם המאפיין | תיאור |
|---|---|
| service.name | ערך המאפיין הוא תמיד spanner_api_frontend. |
| cloud.region | האזור Google Cloud בענן של ממשק הקצה (frontend) של Spanner API שמשרת את בקשת האפליקציה. |
| gcp.spanner.server.query.fingerprint | ערך המאפיין הוא טביעת האצבע של השאילתה. כדי לנפות באגים בשאילתה הזו, אפשר לעיין בעמודה TEXT_FINGERPRINT בטבלאות של נתוני השאילתות. |
| gcp.spanner.server.paxos.participantcount | מספר המשתתפים בעסקה. מידע נוסף זמין במאמר Life of Spanner Reads & Writes. |
| gcp.spanner.isolation_level | ערך המאפיין הוא רמת הבידוד של הטרנזקציה.
הערכים האפשריים הם SERIALIZABLE ו-REPEATABLE_READ. מידע נוסף זמין במאמר סקירה כללית על רמות בידוד. |
תיעוד עקבות לדוגמה
בעקבות מקצה לקצה אפשר לראות את הפרטים הבאים:
- זמן האחזור בין האפליקציה לבין Spanner. אתם יכולים לחשב את זמן האחזור ברשת כדי לראות אם יש בעיות ברשת.
- האזור ב-Cloud של חזית ה-API של Spanner שממנו מוגשות הבקשות של האפליקציה. אפשר להשתמש בזה כדי לבדוק קריאות חוצות אזורים בין האפליקציה לבין Spanner.
בדוגמה הבאה, בקשת האפליקציה שלכם מוגשת על ידי הקצה הקדמי של ה-API של Spanner באזור us-west1, וחביון הרשת הוא 8.542ms (55.47ms – 46.928ms).

המאמרים הבאים
- מידע נוסף על OpenTelemetry זמין במסמכי התיעוד של OpenTelemetry.