En este documento se explica cómo configurar el seguimiento del lado del cliente y el seguimiento de extremo a extremo con OpenTelemetry. Debes configurar el rastreo del lado del cliente para poder habilitar el rastreo de extremo a extremo. Para obtener más información, consulta el artículo Descripción general de la recogida de trazas.
Antes de empezar
-
Para asegurarte de que la cuenta de servicio que usa tu aplicación tiene los permisos necesarios para configurar la recogida de trazas, pide a tu administrador que asigne a la cuenta de servicio que usa tu aplicación el rol de IAM Agente de Cloud Trace (
roles/cloudtrace.agent
) en tu proyecto. Comprueba que la API Cloud Trace esté habilitada en tu proyecto. Para obtener más información sobre cómo habilitar las APIs, consulta Habilitar APIs.
Configurar el análisis de trazas del lado del cliente
Para configurar el rastreo del lado del cliente, debes exportar los rastreos. Puedes exportar las trazas a un recolector o directamente a un backend de observabilidad. Puedes configurar el seguimiento mediante las APIs de OpenTelemetry.
Exportar trazas a un recolector mediante las APIs de OpenTelemetry
Para exportar trazas a un recolector mediante las APIs de OpenTelemetry, configura el SDK de OpenTelemetry y el exportador OLTP:
Añade las dependencias necesarias a tu aplicación con el siguiente código:
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 el objeto OpenTelemetry y habilita el seguimiento.
Java
Go
Node.js
Python
Exportar directamente a un backend de observabilidad mediante APIs de OpenTelemetry
Para configurar las bibliotecas de cliente de Spanner de forma que exporten directamente los intervalos de traza a Cloud Trace u otro backend de proveedor de servicios de observabilidad, sigue estos pasos:
Añade las dependencias necesarias a tu aplicación con el siguiente código:
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
Configura el objeto OpenTelemetry y habilita el seguimiento.
Java
Go
Node.js
Python
Configurar el seguimiento de extremo a extremo
En esta sección se proporcionan instrucciones para configurar el seguimiento de extremo a extremo en las bibliotecas de cliente de Spanner:
Añade las dependencias necesarias a tu aplicación con el siguiente código:
Java
Las dependencias de seguimiento del lado del cliente son suficientes para configurar el seguimiento de extremo a extremo. No necesitas ninguna dependencia adicional.
Go
Además de las dependencias que necesitas para el rastreo del lado del cliente, también necesitas la siguiente:
go.opentelemetry.io/otel/propagation v1.28.0
Node.js
Las dependencias de seguimiento del lado del cliente son suficientes para configurar el seguimiento de extremo a extremo. No necesitas ninguna dependencia adicional.
Python
Las dependencias de seguimiento del lado del cliente son suficientes para configurar el seguimiento de extremo a extremo. No necesitas ninguna dependencia adicional.
Habilita las trazas integrales.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
Usa la opción
EnableEndToEndTracing
en la configuración del cliente para habilitar esta función.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)
Define la propagación del contexto de seguimiento en 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())
Atributos de seguimiento integral
Los rastreos de extremo a extremo pueden incluir la siguiente información:
Nombre del atributo | Descripción |
---|---|
service.name | El valor del atributo es siempre spanner_api_frontend . |
cloud.region | La Google Cloud región en la nube del frontend de la API de Spanner que sirve la solicitud de tu aplicación. |
gcp.spanner.server.query.fingerprint | El valor del atributo es la huella digital de la consulta. Para depurar esta consulta, consulta la columna TEXT_FINGERPRINT de las tablas Estadísticas de consultas. |
gcp.spanner.server.paxos.participantcount | Número de participantes implicados en la transacción. Para obtener más información, consulta Cómo funcionan las lecturas y escrituras de Spanner. |
Trazas de ejemplo
Una traza de extremo a extremo te permite ver los siguientes detalles:
- La latencia entre tu aplicación y Spanner. Puedes calcular la latencia de la red para comprobar si tienes algún problema de red.
- La región de la nube del frontend de la API de Spanner desde la que se sirven las solicitudes de tu aplicación. Puedes usarlo para comprobar si hay llamadas entre regiones entre tu aplicación y Spanner.
En el siguiente ejemplo, la solicitud de tu aplicación se sirve desde el frontend de la API Spanner en la región us-west1
y la latencia de la red es de 8,542 ms (55,47 ms - 46,928 ms).
Siguientes pasos
- Para obtener más información sobre OpenTelemetry, consulte la documentación de OpenTelemetry.