In diesem Dokument erfahren Sie, wie Sie mit OpenTelemetry clientseitiges und End-to-End-Tracing einrichten. Bevor Sie sich für das End-to-End-Tracing anmelden können, müssen Sie das clientseitige Tracing einrichten. Weitere Informationen finden Sie unter Trace collection overview.
Hinweis
-
Damit das Dienstkonto, das Ihre Anwendung verwendet, die erforderlichen Berechtigungen zum Einrichten der Trace-Erfassung hat, bitten Sie Ihren Administrator, dem Dienstkonto, das Ihre Anwendung in Ihrem Projekt verwendet, die folgenden IAM-Rollen zuzuweisen:
-
Alle:
Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter)
-
Alle:
Cloud Telemetry Traces Writer (
Prüfen Sie, ob die Cloud Trace und Telemetry API in Ihrem Projekt aktiviert sind. Weitere Informationen zum Aktivieren von APIs finden Sie unter APIs aktivieren.
Clientseitiges Tracing konfigurieren
Konfigurieren Sie Ihre Anwendung, um Traces mit dem OpenTelemetry Protocol (OTLP) zu exportieren. Sie können Daten entweder an einen OpenTelemetry Collector oder direkt an Cloud Trace über die Telemetry API senden. Beide Methoden verwenden dieselben Abhängigkeiten und dieselbe Konfiguration. Sie unterscheiden sich nur im OTLP-Endpunkt, den der Exporter verwendet.
Traces mit dem OpenTelemetry Protocol exportieren
Konfigurieren Sie das OpenTelemetry SDK und den OTLP-Exporter, um Traces mit dem OpenTelemetry Protocol zu exportieren:
Fügen Sie Ihrer Anwendung mit dem folgenden Code die erforderlichen Abhängigkeiten hinzu:
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
Konfigurieren Sie das OpenTelemetry-Objekt und aktivieren Sie das Tracing.
Java
Go
Node.js
Python
End-to-End-Tracing konfigurieren
In diesem Abschnitt finden Sie eine Anleitung zum Konfigurieren des End-to-End-Tracing in Spanner-Clientbibliotheken:
Fügen Sie Ihrer Anwendung mit dem folgenden Code die erforderlichen Abhängigkeiten hinzu:
Java
Die vorhandenen clientseitigen Tracing-Abhängigkeiten reichen aus, um das End-to-End-Tracing zu konfigurieren. Sie benötigen keine zusätzlichen Abhängigkeiten.
Go
Zusätzlich zu den Abhängigkeiten, die Sie für das clientseitige Tracing benötigen, benötigen Sie auch die folgende Abhängigkeit:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
Die vorhandenen clientseitigen Tracing-Abhängigkeiten reichen aus, um das End-to-End-Tracing zu konfigurieren. Sie benötigen keine zusätzlichen Abhängigkeiten.
Python
Die vorhandenen clientseitigen Tracing-Abhängigkeiten reichen aus, um das End-to-End-Tracing zu konfigurieren. Sie benötigen keine zusätzlichen Abhängigkeiten.
Melden Sie sich für das End-to-End-Tracing an.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
Verwenden Sie die Option
EnableEndToEndTracingin der Clientkonfiguration, um sich anzumelden.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)
Legen Sie die Trace-Kontextverteilung in OpenTelemetry fest.
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())
Attribute für das End-to-End-Tracing
End-to-End-Traces können die folgenden Informationen enthalten:
| Attributname | Beschreibung |
|---|---|
| service.name | Der Attributwert ist immer spanner_api_frontend. |
| cloud.region | Die Google Cloud Cloud-Region des Spanner API Front-Ends, das Ihre Anwendungsanfrage verarbeitet. |
| gcp.spanner.server.query.fingerprint | Der Attributwert ist der Abfrage-Fingerabdruck. Weitere Informationen zum Debuggen dieser Abfrage
finden Sie in der TEXT_FINGERPRINT
Spalte in den Abfragestatistiktabellen. |
| gcp.spanner.server.paxos.participantcount | Die Anzahl der an der Transaktion beteiligten Teilnehmer. Weitere Informationen finden Sie unter Lebensdauer von Lese- und Schreibvorgängen in Spanner. |
| gcp.spanner.isolation_level | Der Attributwert ist die Isolationsebene der Transaktion.
Mögliche Werte sind SERIALIZABLE und
REPEATABLE_READ. Weitere Informationen finden Sie unter Isolationsebenen – Übersicht. |
Beispiel-Trace
In einem End-to-End-Trace können Sie die folgenden Details sehen:
- Die Latenz zwischen Ihrer Anwendung und Spanner. Sie können die Netzwerklatenz berechnen, um festzustellen, ob Netzwerkprobleme vorliegen.
- Die Cloud-Region des Spanner API-Front-Ends, in der Ihre Anwendungsanfragen verarbeitet werden. So können Sie regionsübergreifende Aufrufe zwischen Ihrer Anwendung und Spanner prüfen.
Im folgenden Beispiel wird Ihre Anwendungsanfrage vom Spanner API-Front-End in der Region us-west1 verarbeitet und die Netzwerklatenz beträgt 8,542 ms (55,47 ms – 46,928 ms).

Nächste Schritte
- Weitere Informationen zu OpenTelemetry finden Sie in der OpenTelemetry Dokumentation.