במאמר הזה מוסבר איך להגדיר מעקב בצד הלקוח ומעקב מקצה לקצה באמצעות OpenTelemetry. כדי להצטרף למעקב מקצה לקצה, צריך קודם להגדיר מעקב בצד הלקוח. מידע נוסף זמין במאמר סקירה כללית על איסוף נתוני מעקב.
לפני שמתחילים
-
כדי לוודא שלחשבון השירות שבו האפליקציה משתמשת יש את ההרשאות שנדרשות להגדרת איסוף נתוני מעקב, צריך לבקש מהאדמין להקצות לחשבון השירות שבו האפליקציה משתמשת בפרויקט את תפקיד ה-IAM Cloud Trace Agent (
roles/cloudtrace.agent). מוודאים ש-Cloud Trace API מופעל בפרויקט. מידע נוסף על הפעלת ממשקי API זמין במאמר הפעלת ממשקי API.
הגדרת מעקב בצד הלקוח
כדי להגדיר מעקב בצד הלקוח, צריך לייצא את נתוני המעקב. אפשר לייצא עקבות ל-collector או ישירות ל-backend של כלי observability. אפשר להגדיר מעקב באמצעות ממשקי OpenTelemetry API.
ייצוא עקבות אל מאסף באמצעות ממשקי OpenTelemetry API
כדי לייצא עקבות אל Collector באמצעות ממשקי OpenTelemetry API, צריך להגדיר את OpenTelemetry SDK ואת OLTP exporter:
מוסיפים את יחסי התלות הנדרשים לאפליקציה באמצעות הקוד הבא:
Java
Go
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
Go
Node.js
Python
ייצוא ישירות אל קצה עורפי של יכולת צפייה באמצעות OpenTelemetry APIs
כדי להגדיר את ספריות הלקוח של Spanner כך שייצאו ישירות טווחי מעקב ל-Cloud Trace או ל-backend של ספק אחר של שירותי ניראות (observability), פועלים לפי השלבים הבאים:
מוסיפים את יחסי התלות הנדרשים לאפליקציה באמצעות הקוד הבא:
Java
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-spanner</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-common</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-trace</artifactId> </dependency> <dependency> <groupId>com.google.cloud.opentelemetry</groupId> <artifactId>exporter-trace</artifactId> <version>0.30.0</version> </dependency>
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.24.1
Node.js
"@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", "@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-gcp-trace
מגדירים את האובייקט OpenTelemetry ומפעילים את המעקב.
Java
Go
Node.js
Python
הגדרת מעקב מקצה לקצה
בקטע הזה מוסבר איך להגדיר מעקב מקצה לקצה בספריות לקוח של Spanner:
מוסיפים את יחסי התלות הנדרשים לאפליקציה באמצעות הקוד הבא:
Java
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
Go
בנוסף ליחסי התלות שנדרשים למעקב בצד הלקוח, נדרש גם יחס התלות הבא:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
Python
התלות הקיימת במעקב בצד הלקוח מספיקה להגדרת מעקב מקצה לקצה. לא צריך להוסיף תלות כלשהי.
מצטרפים למעקב מקצה לקצה.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
כדי להפעיל את האפשרות הזו, משתמשים באפשרות
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 = dict( 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 האזור בענן של חזית ה-API של Spanner שמשרת את בקשת האפליקציה שלכם. |
| 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 שבו פועל ה-frontend של Spanner API, שממנו מוגשות הבקשות של האפליקציה. אפשר להשתמש בזה כדי לבדוק קריאות חוצות אזורים בין האפליקציה לבין Spanner.
בדוגמה הבאה, הבקשה של האפליקציה מטופלת על ידי הקצה הקדמי של ה-API של Spanner באזור us-west1, וזמן האחזור ברשת הוא 8.542 אלפיות השנייה (55.47 אלפיות השנייה – 46.928 אלפיות השנייה).

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