Questo documento mostra come configurare la tracciabilità lato client e end-to-end utilizzando OpenTelemetry. Prima di poter attivare la tracciabilità end-to-end, devi configurare la tracciabilità lato client. Per saperne di più, consulta la panoramica della raccolta delle tracce.
Prima di iniziare
-
Per assicurarti che il account di servizio utilizzato dalla tua applicazione disponga delle autorizzazioni necessarie per configurare la raccolta delle tracce, chiedi all'amministratore di concedere i seguenti ruoli IAM al account di servizio utilizzato dalla tua applicazione nel tuo progetto:
-
Tutti:
Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter)
-
Tutti:
Cloud Telemetry Traces Writer (
Verifica che le API Cloud Trace e Telemetry siano abilitate nel tuo progetto. Per saperne di più sull'abilitazione delle API, vedi Abilitazione delle API.
Configura il monitoraggio lato client
Per esportare le tracce utilizzando OpenTelemetry Protocol (OTLP), configura la tua applicazione. Puoi inviare i dati a un agente di raccolta OpenTelemetry o direttamente a Cloud Trace tramite l'API Telemetry. Entrambi i metodi utilizzano le stesse dipendenze e la stessa configurazione. Differiscono solo per l'endpoint OTLP utilizzato dall'esportatore.
Esportare le tracce utilizzando il protocollo OpenTelemetry
Per esportare le tracce utilizzando OpenTelemetry Protocol, configura l'SDK OpenTelemetry e l'esportatore OTLP:
Aggiungi le dipendenze necessarie alla tua applicazione utilizzando il seguente codice:
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
Configura l'oggetto OpenTelemetry e abilita la tracciabilità.
Java
Go
Node.js
Python
Configura la tracciabilità end-to-end
Questa sezione fornisce istruzioni per configurare la tracciabilità end-to-end nelle librerie client Spanner:
Aggiungi le dipendenze necessarie alla tua applicazione utilizzando il seguente codice:
Java
Le dipendenze di tracciamento lato client esistenti sono sufficienti per configurare il tracciamento end-to-end. Non sono necessarie dipendenze aggiuntive.
Go
Oltre alle dipendenze necessarie per la tracciabilità lato client, devi avere anche la seguente dipendenza:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
Le dipendenze di tracciamento lato client esistenti sono sufficienti per configurare il tracciamento end-to-end. Non sono necessarie dipendenze aggiuntive.
Python
Le dipendenze di tracciamento lato client esistenti sono sufficienti per configurare il tracciamento end-to-end. Non sono necessarie dipendenze aggiuntive.
Attiva il tracciamento end-to-end.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
Utilizza l'opzione
EnableEndToEndTracingnella configurazione del client per attivare la funzionalità.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)
Imposta la propagazione del contesto di traccia in 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())
Attributi di tracciamento end-to-end
Le tracce end-to-end possono includere le seguenti informazioni:
| Nome dell'attributo | Descrizione |
|---|---|
| service.name | Il valore dell'attributo è sempre spanner_api_frontend. |
| cloud.region | La Google Cloud regione cloud del frontend dell'API Spanner che gestisce la richiesta della tua applicazione. |
| gcp.spanner.server.query.fingerprint | Il valore dell'attributo è l'impronta della query. Per eseguire il debug di questa query, consulta la colonna TEXT_FINGERPRINT
nelle tabelle delle statistiche sulle query. |
| gcp.spanner.server.paxos.participantcount | Il numero di partecipanti coinvolti nella transazione. Per maggiori informazioni, vedi Durata di letture e scritture di Spanner. |
| gcp.spanner.isolation_level | Il valore dell'attributo è il livello di isolamento della transazione.
I valori possibili sono SERIALIZABLE e
REPEATABLE_READ. Per ulteriori
informazioni, consulta la Panoramica dei livelli di isolamento. |
Traccia di esempio
Una traccia end-to-end ti consente di visualizzare i seguenti dettagli:
- La latenza tra l'applicazione e Spanner. Puoi calcolare la latenza di rete per verificare se ci sono problemi di rete.
- La regione cloud frontend dell'API Spanner da cui vengono gestite le richieste dell'applicazione. Puoi utilizzarlo per verificare le chiamate tra regioni tra l'applicazione e Spanner.
Nell'esempio seguente, la richiesta dell'applicazione viene gestita dal
frontend dell'API Spanner nella regione us-west1 e la latenza di rete
è di 8,542 ms (55,47 ms - 46,928 ms).

Passaggi successivi
- Per ulteriori informazioni su OpenTelemetry, consulta la documentazione di OpenTelemetry.