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 über die Trace-Erfassung.
Hinweise
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
      
      
    
    
    
    
    
  
  
  Bitten Sie Ihren Administrator, dem Dienstkonto, das von Ihrer Anwendung verwendet wird, die IAM-Rolle Cloud Trace-Agent ( roles/cloudtrace.agent) für Ihr Projekt zuzuweisen, damit das Dienstkonto die erforderlichen Berechtigungen zum Einrichten der Trace-Erfassung hat.
- Prüfen Sie, ob die Cloud Trace API für Ihr Projekt aktiviert ist. Weitere Informationen zum Aktivieren von APIs finden Sie unter APIs aktivieren. 
Clientseitiges Tracing konfigurieren
Wenn Sie die clientseitige Ablaufverfolgung konfigurieren möchten, müssen Sie Traces exportieren. Sie können Spuren zu einem Collector oder direkt zu einem Observability-Backend exportieren. Sie können das Tracing 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 OLTP-Exporter:
- 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
Direkt in ein Observability-Backend exportieren – OpenTelemetry APIs
So konfigurieren Sie Spanner-Clientbibliotheken, um Trace-Spans direkt in Cloud Trace oder ein anderes Backend eines Anbieters von Observability-Diensten zu exportieren:
- Fügen Sie Ihrer Anwendung mit dem folgenden Code die erforderlichen Abhängigkeiten 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 - 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 
- 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 von 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 für die Konfiguration von End-to-End-Tracing aus. Sie benötigen keine zusätzlichen Abhängigkeiten. - Go- Zusätzlich zu den Abhängigkeiten, die Sie für das clientseitige Tracing benötigen, ist auch die folgende Abhängigkeit erforderlich: - go.opentelemetry.io/otel/propagation v1.28.0- Node.js- Die vorhandenen clientseitigen Tracing-Abhängigkeiten reichen für die Konfiguration von End-to-End-Tracing aus. Sie benötigen keine zusätzlichen Abhängigkeiten. - Python- Die vorhandenen clientseitigen Tracing-Abhängigkeiten reichen für die Konfiguration von End-to-End-Tracing aus. Sie benötigen keine zusätzlichen Abhängigkeiten. 
- Aktivieren Sie das End-to-End-Tracing. - Java- SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build(); - Go- Verwenden Sie die Option - EnableEndToEndTracingin der Clientkonfiguration, um die Funktion zu aktivieren.- 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) 
- Legen Sie die Trace-Kontextweitergabe 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 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 Fingerabdruck der Anfrage. Weitere Informationen zum Debuggen dieser Abfrage finden Sie in der Spalte TEXT_FINGERPRINTin 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 SERIALIZABLEundREPEATABLE_READ. Weitere Informationen finden Sie unter Isolationsebenen – Übersicht. | 
Beispiel-Trace
Mit einem End-to-End-Trace können Sie die folgenden Details aufrufen:
- 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, aus der die Anfragen Ihrer Anwendung bedient werden. Damit können Sie regionenübergreifende Aufrufe zwischen Ihrer Anwendung und Spanner prüfen.
Im folgenden Beispiel wird Ihre Anwendungsanfrage vom Spanner API-Frontend in der Region us-west1 verarbeitet. 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.