Neste documento, mostramos como configurar o rastreamento do lado do cliente e de ponta a ponta usando o OpenTelemetry. É necessário configurar o rastreamento do lado do cliente antes de ativar o rastreamento de ponta a ponta. Para mais informações, consulte Visão geral da coleta de traces.
Antes de começar
-
Para garantir que a conta de serviço usada pelo aplicativo tenha as permissões necessárias para configurar a coleta de traces, peça ao administrador para conceder à conta de serviço usada pelo aplicativo o papel Agente do Cloud Trace (
roles/cloudtrace.agent) do IAM no projeto. Verifique se a API Cloud Trace está ativada no seu projeto. Para mais informações sobre como ativar APIs, consulte Como ativar APIs.
Configurar o rastreamento do lado do cliente
Para configurar o rastreamento do lado do cliente, é necessário exportar traces. É possível exportar traces para um coletor ou diretamente para um back-end de observabilidade. É possível configurar o rastreamento usando as APIs OpenTelemetry.
Exportar traces para um coletor usando as APIs OpenTelemetry
Para exportar traces para um coletor usando APIs OpenTelemetry, configure o SDK do OpenTelemetry e o exportador OLTP:
Adicione as dependências necessárias ao aplicativo usando o seguinte 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
Configure o objeto do OpenTelemetry e ative o rastreamento.
Java
Go
Node.js
Python
Exportar diretamente para um back-end de observabilidade usando APIs OpenTelemetry
Para configurar as bibliotecas de cliente do Spanner para exportar diretamente períodos de trace para o Cloud Trace ou outro back-end de provedor de serviços de observabilidade, siga estas etapas:
Adicione as dependências necessárias ao aplicativo usando o seguinte 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
Configure o objeto do OpenTelemetry e ative o rastreamento.
Java
Go
Node.js
Python
Configurar o rastreamento de ponta a ponta
Nesta seção, você encontra instruções para configurar o rastreamento de ponta a ponta nas bibliotecas de cliente do Spanner:
Adicione as dependências necessárias ao aplicativo usando o seguinte código:
Java
As dependências de rastreamento do lado do cliente atuais são suficientes para configurar o rastreamento de ponta a ponta. Não são necessárias dependências extras.
Go
Além das dependências necessárias para o rastreamento do lado do cliente, você também precisa da seguinte dependência:
go.opentelemetry.io/otel/propagation v1.28.0Node.js
As dependências de rastreamento do lado do cliente atuais são suficientes para configurar o rastreamento de ponta a ponta. Não são necessárias dependências extras.
Python
As dependências de rastreamento do lado do cliente atuais são suficientes para configurar o rastreamento de ponta a ponta. Não são necessárias dependências extras.
Ative o rastreamento de ponta a ponta.
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
Use a opção
EnableEndToEndTracingna configuração do cliente para ativar.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)
Defina a propagação do contexto de trace no 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 do rastreamento de ponta a ponta
Os traces de ponta a ponta podem incluir as seguintes informações:
| Nome do atributo | Descrição |
|---|---|
| service.name | O valor do atributo é sempre spanner_api_frontend. |
| cloud.region | A região do Google Cloud cloud do front-end da API Spanner que atende à solicitação do aplicativo. |
| gcp.spanner.server.query.fingerprint | O valor do atributo é a impressão digital da consulta. Para depurar essa consulta,
consulte a coluna
TEXT_FINGERPRINT nas tabelas Estatísticas da consulta. |
| gcp.spanner.server.paxos.participantcount | O número de envolvidos na transação. Para mais informações, consulte Durabilidade das leituras e gravações do Spanner. |
| gcp.spanner.isolation_level | O valor do atributo é o nível de isolamento da transação.
Os valores possíveis são SERIALIZABLE e
REPEATABLE_READ. Para mais
informações, consulte Visão geral dos níveis de isolamento. |
Exemplo de trace
Um trace de ponta a ponta permite consultar os seguintes detalhes:
- A latência entre o aplicativo e o Spanner. Calcule a latência da rede para verificar se há problemas.
- A região do Cloud do front-end da API Spanner em que as solicitações do aplicativo são atendidas. Use isso para verificar chamadas entre regiões entre o aplicativo e o Spanner.
No exemplo a seguir, a solicitação do aplicativo é atendida
pelo front-end da API Spanner na região us-west1
e a latência de rede é de 8,542 ms (55,47 ms - 46,928 ms).

A seguir
- Consulte a documentação do OpenTelemetry para mais informações.