In diesem Dokument erfahren Sie, wie Sie clientseitiges und End-to-End-Tracing mit OpenTelemetry einrichten. Sie müssen das clientseitige Tracing einrichten, bevor Sie das End-to-End-Tracing aktivieren können. Weitere Informationen finden Sie unter Übersicht zur Trace-Erfassung.
Hinweise
-
Damit das von Ihrer Anwendung verwendete Dienstkonto die erforderlichen Berechtigungen zum Einrichten der Trace-Erfassung hat, bitten Sie Ihren Administrator, dem Dienstkonto die IAM-Rolle Cloud Trace-Agent (
roles/cloudtrace.agent
) für Ihr Projekt zuzuweisen.
Clientseitiges Tracing konfigurieren
Wenn Sie die clientseitige Aufrufabfolge konfigurieren möchten, müssen Sie Traces exportieren. Sie können Traces in einen Collector oder direkt in ein Observability-Backend exportieren. Sie können die Tracing-Funktion mit OpenTelemetry APIs konfigurieren.
Traces mit OpenTelemetry APIs in einen Collector exportieren
Wenn Sie Traces mit OpenTelemetry APIs in einen Collector exportieren möchten, konfigurieren Sie das OpenTelemetry SDK und den OTLP-Exporter:
Fügen Sie Ihrer Anwendung die erforderlichen Abhängigkeiten mit dem folgenden Code 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
Konfigurieren Sie das OpenTelemetry-Objekt und aktivieren Sie die Tracing-Funktion.
Java
Go
Direkter Export in ein Observability-Backend mit OpenTelemetry APIs
So konfigurieren Sie Spanner-Clientbibliotheken, um Trace-Bereiche direkt in Cloud Trace oder in das Backend eines anderen Anbieters von Observability-Diensten zu exportieren:
Fügen Sie Ihrer Anwendung die erforderlichen Abhängigkeiten mit dem folgenden Code hinzu:
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
Konfigurieren Sie das OpenTelemetry-Objekt und aktivieren Sie die Tracing-Funktion.
Java
Go
End-to-End-Analyse konfigurieren
In diesem Abschnitt finden Sie eine Anleitung zum Konfigurieren der End-to-End-Analyse (Vorabversion) in Spanner-Clientbibliotheken:
Fügen Sie Ihrer Anwendung die erforderlichen Abhängigkeiten mit dem folgenden Code hinzu:
Java
Die vorhandenen clientseitigen Abhängigkeiten für die Tracing-Funktion reichen aus, um die End-to-End-Tracing-Funktion zu konfigurieren. Es sind keine zusätzlichen Abhängigkeiten erforderlich.
Go
Zusätzlich zu den Abhängigkeiten, die Sie für die clientseitige Analyse benötigen, ist auch die folgende Abhängigkeit erforderlich:
go.opentelemetry.io/otel/propagation v1.28.0
Aktivieren Sie das End-to-End-Tracing.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
Aktivieren Sie die Option
EnableEndToEndTracing
in der Clientkonfiguration.client, _ := spanner.NewClientWithConfig(ctx, "projects/test-project/instances/test-instance/databases/test-db", spanner.ClientConfig{ SessionPoolConfig: spanner.DefaultSessionPoolConfig, EnableEndToEndTracing: true, }, clientOptions...)
Legen Sie die Weitergabe des Trace-Kontexts 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{})
End-to-End-Tracing-Attribute
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-Frontends, das Ihre Anwendungsanfrage verarbeitet. |
gcp.spanner.query.fingerprint | Der Attributwert ist der Abfragefingerabdruck. Weitere Informationen zur Fehlerbehebung bei dieser Abfrage finden Sie in der Spalte TEXT_FINGERPRINT in den Abfragestatistiktabellen. |
gcp.spanner.participants.count | Die Anzahl der an der Transaktion beteiligten Teilnehmer. Weitere Informationen finden Sie unter Lebensdauer von Lese- und Schreibvorgängen in Cloud Spanner. |
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 es Netzwerkprobleme gibt.
- Die Cloud-Region des Spanner API-Front-Ends, von der aus Ihre Anwendungsanfragen gesendet werden. So können Sie nach regionenübergreifenden Aufrufen zwischen Ihrer Anwendung und Spanner suchen.
Im folgenden Beispiel wird Ihre Anwendungsanfrage vom Spanner API-Frontend 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.