Este documento descreve como configurar a exportação no processo de dados de rastreio pelo SDK OpenTelemetry para o seu projeto do Google Cloud. Google Cloud Os exemplos para Java, Go, Python e Node.js mostram como configurar o SDK para enviar dados de rastreio para a API de telemetria (OTLP) quando usa a instrumentação manual. Para cada idioma, a página fornece informações sobre a utilização de exportadores OTLP para enviar dados de rastreio através dos protocolos de exportação suportados.
A instrumentação descrita nesta página aplica-se apenas aos dados de rastreio. Não envia dados de registo nem de métricas para o seu Google Cloud projeto.
Se a sua aplicação depender de um coletor do OpenTelemetry para enviar dados de rastreio para o seu Google Cloud projeto, este documento não se aplica:
- Para ver exemplos de instrumentação, consulte os Exemplos de instrumentação baseados no coletor.
- Para ver informações sobre coletores, consulte o artigo Coletor OpenTelemetry criado pela Google.
Por que motivo deve migrar
Os SDKs OpenTelemetry geram dados de registo, métricas e rastreios num formato geralmente consistente com os ficheiros proto definidos pelo protocolo OTLP OpenTelemetry. No entanto, os campos podem ser convertidos de um tipo de dados específico do OpenTelemetry para um tipo de dados JSON antes do armazenamento.
Quando uma aplicação exporta esses dados para um Google Cloud projeto através de um Google Cloud exportador, esse exportador executa os seguintes passos:
- Transforma os dados registados do formato OTLP num formato proprietário definido pela API Cloud Logging, pela API Cloud Monitoring ou pela API Cloud Trace.
- Envia os dados transformados para a API adequada, que são depois armazenados no seu Google Cloud projeto.
Para dados de rastreio, recomendamos que migre a sua aplicação para usar a API Telemetry (OTLP) para exportar dados, porque esta exportação não requer uma transformação de dados. A transformação de dados pode causar a perda de alguns dados. Por exemplo, o formato proprietário pode ter limites inferiores para determinados campos ou alguns campos OTLP podem não ser mapeados para um campo no formato proprietário.
Amostras disponíveis
As aplicações de exemplo referenciadas nesta página estão disponíveis no GitHub. A maioria das aplicações está configurada para exportar dados de rastreio através do gRPC, o que significa que usam dados codificados em protobuf com o formato de transmissão do gRPC através de ligações HTTP/2. Também são fornecidos exemplos de código para aplicações configuradas para exportar dados de rastreio como dados codificados em protobuf através de ligações HTTP:
-
A aplicação de amostra está configurada para exportar rastreios como dados codificados em protobuf através de ligações HTTP. Se preferir usar o gRPC, a instrumentação neste exemplo é aplicável. No entanto, tem de modificar as propriedades do sistema que o módulo de configuração automática consome. A aplicação de exemplo especifica o exportador
http/protobuf. Para usar o gRPC, altere esta definição paragrpc.Recomendamos que as suas aplicações Java, como a aplicação de exemplo, usem o módulo de configuração automática do SDK OpenTelemetry para configurar o SDK.
Aplicação Go que usa gRPC e aplicação Go que usa HTTP
Existem dois repositórios Go. Num repositório, a aplicação de exemplo usa o gRPC. O exemplo no outro repositório usa dados codificados em protobuf através de ligações HTTP.
-
Este repositório contém dois exemplos, um para gRPC e outro que usa dados codificados em protobuf através de ligações HTTP.
-
Este repositório contém dois exemplos, um para gRPC e outro que usa dados codificados em protobuf através de ligações HTTP.
Antes de começar
Antes de migrar a sua aplicação para enviar dados de rastreio para o ponto final OTLP, ative a API Telemetry e certifique-se de que lhe foram concedidas as funções de gestão de identidade e de acesso (IAM) necessárias. Também pode ter de conceder funções do IAM a uma conta de serviço.
Ative a faturação e a API Telemetry
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. Conceda as seguintes funções de IAM à conta de serviço que a sua aplicação usa:
- Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter) - Logs Writer (
roles/logging.logWriter) | - Monitoring Metric Writer (
roles/monitoring.metricWriter)
Para saber mais sobre as Credenciais padrão da aplicação (ADC), consulte os artigos Como funcionam as Credenciais padrão da aplicação e Configure as Credenciais padrão da aplicação (ADC) para um ambiente de desenvolvimento local.
- Cloud Telemetry Traces Writer (
-
Para receber as autorizações de que precisa para ver os dados de registo, métricas e rastreios, peça ao seu administrador para lhe conceder as seguintes funções da IAM no seu projeto:
-
Visualizador de registos (
roles/logging.viewer) -
Visitante de monitorização (
roles/monitoring.viewer) -
Utilizador do Cloud Trace (
roles/cloudtrace.user)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Visualizador de registos (
Adicione as seguintes declarações de importação:
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;Atualize o código da aplicação para usar o módulo de configuração automática do SDK OpenTelemetry para configurar o SDK:
public static void main(String[] args) { // Configure the OpenTelemetry pipeline with Auto configuration openTelemetrySdk = AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(); ... }Configure as propriedades do sistema que o módulo de configuração automática consome em tempo de execução. Esse módulo usa essas propriedades para iniciar o SDK. Também pode usar variáveis de ambiente em vez de propriedades do sistema. Para mais informações, consulte o artigo Variáveis de ambiente e propriedades do sistema.
A aplicação de exemplo define as propriedades do sistema no
build.gradlescript:// You can switch the desired protocol here by changing `otel.exporter.otlp.protocol`. def autoconf_config = [ '-Dotel.exporter.otlp.endpoint=https://telemetry.googleapis.com', '-Dotel.traces.exporter=otlp', '-Dotel.logs.exporter=none', '-Dotel.metrics.exporter=none', '-Dotel.service.name=my-service', '-Dotel.exporter.otlp.protocol=http/protobuf', '-Dotel.java.global-autoconfigure.enabled=true', // ID of your Google Cloud Project, required by the auth extension '-Dgoogle.cloud.project=PROJECT_ID', ] // Now pass the config as JVM arguments to your java application: application { // Replace with the fully qualified name of your Main class. mainClassName = 'com.example.Main' applicationDefaultJvmArgs = autoconf_config }Se preferir exportar dados de rastreio através do gRPC, defina o protocolo OTLP como
grpcem vez de o definir comohttp/protobuf.- Configure os cabeçalhos de autenticação para as chamadas de exportação.
- Configure os atributos de recursos do OpenTelemetry e os cabeçalhos OTLP necessários.
- Configure o ponto final do exportador.
Configure autorizações
Guia de migração para a instrumentação manual
Esta secção descreve como modificar a sua aplicação para que envie os dados de rastreio para o seu projeto do Google Cloud através da API Telemetry. Não pode enviar dados de métricas nem de registos para este ponto final.
Adicione dependências
O primeiro passo é adicionar dependências para o exportador de rastreio OTLP do OpenTelemetry na sua aplicação. Selecione as versões das dependências adequadas para a sua aplicação e sistema de compilação.
Java
Para uma aplicação Java, no script build.gradle, adicione as seguintes dependências:
// use the latest versions
implementation("io.opentelemetry:opentelemetry-exporter-otlp:1.56.0")
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.56.0")
Go
Esta secção ilustra as alterações que tem de fazer às suas dependências quando usa o gRPC para exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação,
inclua o pacote otlptracehttp como uma dependência. Para mais informações,
consulte o artigo Aplicação Go que usa HTTP.
Para uma aplicação Go que usa gRPC para exportação, atualize o ficheiro go.mod para incluir a seguinte dependência:
// go.mod file
require(
// OTLP exporter that uses grpc protocol for export
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0
)
Python
Esta secção ilustra as alterações que tem de fazer às suas dependências quando usa o gRPC para exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, inclua o pacote opentelemetry-exporter-otlp-proto-http como um requisito. Para mais informações, consulte o artigo Aplicação Python.
Para uma aplicação Python que usa o gRPC para exportação, instale as seguintes dependências ou atualize o ficheiro requirements.txt:
# Requirements.txt - use appropriate versions
#
# OTLP exporter that uses grcp protocol for export
opentelemetry-exporter-otlp-proto-grpc==1.39.0
grpcio==1.76.0
Node.js
Esta secção ilustra as alterações que tem de fazer às suas dependências quando usa o gRPC para exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação,
inclua o pacote @opentelemetry/exporter-trace-otlp-proto como uma dependência. Para mais informações, consulte o artigo Aplicação Node.js.
Para uma aplicação Node.js que exporte usando gRPC, adicione as seguintes dependências.
"@opentelemetry/exporter-trace-otlp-grpc": "0.203.0",
"@grpc/grpc-js": "1.13.4",
Substitua a utilização de Google Cloud exportadores por exportadores OTLP
Atualize o código da aplicação de forma que o SDK OpenTelemetry esteja configurado para usar os exportadores OTLP OpenTelemetry em vez do Google Cloud exportador de rastreio. As alterações necessárias dependem do idioma.
Java
Para uma aplicação Java, faça o seguinte:
Go
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, tem de importar o pacote otlptracehttp e também configurar o exportador com as opções correspondentes. Para mais informações, consulte o artigo Aplicação Go que usa HTTP.
Para uma aplicação Go que usa gRPC para exportação, adicione as seguintes declarações de importação:
import (
"context"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
// other dependencies
)
Além disso, atualize o código de inicialização para configurar o TraceProvider com o exportador gRPC:
// Initializes OpenTelemetry with OTLP exporters
ctx := context.Background()
// creds: configure Application Default Credentials
// Initialize the OTLP gRPC exporter
exporter, err := otlptracegrpc.New(ctx)
if err != nil {
panic(err)
}
// set OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=<project_id>"
// set endpoint with OTEL_EXPORTER_OTLP_ENDPOINT=https://<endpoint>
// set OTEL_EXPORTER_OTLP_HEADERS="x-goog-user-project=<project_id>"
exporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithDialOption(grpc.WithPerRPCCredentials(creds)))
if err != nil {
panic(err)
}
tp := sdktrace.NewTracerProvider(
// For this example code we use sdktrace.AlwaysSample sampler to sample all traces.
// In a production application, use sdktrace.TraceIDRatioBased with a desired probability.
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(exporter))
otel.SetTracerProvider(tp)
Python
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, tem de importar a partir do pacote opentelemetry.exporter.otlp.proto.http e também configurar o exportador com as opções correspondentes. Para mais informações, consulte o artigo Aplicação Python.
Para uma aplicação Python que usa gRPC para exportação, adicione as seguintes importações:
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
OTLPSpanExporter,
)
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
Além disso, atualize o código de inicialização para configurar o TraceProvider com o exportador gRPC:
# Initialize OpenTelemetry with OTLP exporters
# channel_creds: configure Application Default Credentials
trace_provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(
OTLPSpanExporter(
credentials=channel_creds,
endpoint="https://telemetry.googleapis.com:443/v1/traces",
)
)
trace_provider.add_span_processor(processor)
trace.set_tracer_provider(trace_provider)
tracer = trace.get_tracer("my.tracer.name")
Node.js
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, importe o pacote @opentelemetry/exporter-trace-otlp-proto.
Para mais informações, consulte o artigo Aplicação Node.js.
Para uma aplicação Node.js que usa gRPC para exportação, adicione as seguintes importações:
import {OTLPTraceExporter} from '@opentelemetry/exporter-trace-otlp-grpc';
Além disso, atualize o código de inicialização para configurar o TraceProvider com o exportador gRPC:
// Express App that exports traces via gRPC with protobuf
async function main() {
// authenticatedClient: configure Application Default Credentials
// Configure the TraceExporter
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
credentials: credentials.combineChannelCredentials(
credentials.createSsl(),
credentials.createFromGoogleCredential(authenticatedClient),
),
}),
});
sdk.start();
}
Configure a autenticação
Com as alterações anteriores à configuração do SDK OpenTelemetry, a sua aplicação está configurada para exportar rastreios através dos exportadores OTLP OpenTelemetry usando gRPC ou HTTP. Em seguida, tem de configurar os exportadores para enviar esses rastreios para o seu Google Cloud projeto.
Para configurar a autenticação, faça o seguinte:
Esta secção detalha cada um destes passos.
Configure cabeçalhos de autenticação para as chamadas de exportação
Para configurar o exportador com as suas Google Cloud Credenciais padrão da aplicação (ADC), adicione uma biblioteca Google Auth específica do idioma.
Java
Para se autenticar no Google Cloud Observability, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Para uma aplicação Java que usa o módulo de configuração automática do SDK OpenTelemetry, recomendamos que também use a extensão de autenticação do Google Cloud.
// build.gradle
implementation("io.opentelemetry.contrib:opentelemetry-gcp-auth-extension:1.52.0-alpha")
Go
Para se autenticar no Google Cloud Observability, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Para uma aplicação Go que usa gRPC para exportação, atualize o ficheiro go.mod para incluir a seguinte dependência:
// go.mod file
require (
// When using gRPC based OTLP exporter, auth is built-in
google.golang.org/grpc v1.75.1
)
Para uma aplicação Go que usa HTTP para exportação, atualize o ficheiro go.mod para incluir a seguinte dependência:
// go.mod file
require (
// When using http based OTLP exported, use explicit auth library
golang.org/x/oauth2 v0.31.0
)
Python
Para se autenticar no Google Cloud Observability, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Para uma aplicação Python, adicione as seguintes importações:
# requirements.txt
# Google Auth Library
google-auth==2.38.0
Node.js
Para se autenticar no Google Cloud Observability, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Para uma aplicação Node.js, adicione as seguintes dependências:
"google-auth-library": "9.15.1",
Em seguida, atualize o código da aplicação que cria o exportador de intervalos OTLP para que adicione os tokens de autorização obtidos da biblioteca aos cabeçalhos. Este passo é específico do idioma, mas a implementação é semelhante para todos os idiomas.
Java
Quando tem uma aplicação Java que usa o módulo de configuração automática do SDK OpenTelemetry e a extensão de autenticação do Google Cloud, não precisa de realizar passos especiais durante a inicialização da aplicação. O módulo de configuração automática executa automaticamente os passos necessários para configurar o ADC.
Go
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, tem de importar o pacote otlptracehttp e configurar o exportador para ser um objeto otlptracehttp. Para mais informações, consulte o artigo Aplicação Go que usa HTTP.
Para uma aplicação Go que usa gRPC para exportação, adicione as seguintes declarações de importação:
import (
"context"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
// other dependencies
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/oauth"
)
Além disso, atualize o código de inicialização para configurar o ADC antes de instanciar o exportador gRPC:
// Initializes OpenTelemetry with OTLP exporters
ctx := context.Background()
// Retrieve and store Google application-default credentials
creds, err := oauth.NewApplicationDefault(ctx)
if err != nil {
panic(err)
}
// set OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=<project_id>"
// set endpoint with OTEL_EXPORTER_OTLP_ENDPOINT=https://<endpoint>
// set OTEL_EXPORTER_OTLP_HEADERS="x-goog-user-project=<project_id>"
exporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithDialOption(grpc.WithPerRPCCredentials(creds)))
if err != nil {
panic(err)
}
// Other OpenTelemetry configuration remains unaffected.
Python
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação, use as credenciais predefinidas. Também tem de transmitir estas credenciais quando instanciar o BatchSpanProcessor. Para mais informações, consulte o artigo Aplicação Python.
Para uma aplicação Python que usa gRPC para exportação, adicione as seguintes importações:
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
OTLPSpanExporter,
)
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
import google.auth
import google.auth.transport.grpc
import google.auth.transport.requests
import grpc
from google.auth.transport.grpc import AuthMetadataPlugin
Além disso, atualize o código de inicialização para configurar o ADC antes de instanciar o exportador gRPC:
credentials, _ = google.auth.default()
request = google.auth.transport.requests.Request()
resource = Resource.create(attributes={SERVICE_NAME: "otlp-gcp-grpc-sample"})
auth_metadata_plugin = AuthMetadataPlugin(credentials=credentials, request=request)
channel_creds = grpc.composite_channel_credentials(
grpc.ssl_channel_credentials(),
grpc.metadata_call_credentials(auth_metadata_plugin),
)
# Configure the TraceProvider
Node.js
Esta secção ilustra as alterações que tem de fazer quando usa o gRPC para a exportação. Se usar dados codificados em protobuf através de ligações HTTP para exportação,
as alterações que tem de fazer são ligeiramente diferentes das descritas aqui.
Para saber mais, consulte o ficheiro app-http-proto-export.ts incluído na aplicação Node.js.
Para uma aplicação Node.js que usa gRPC para exportação, adicione as seguintes importações:
import {AuthClient, GoogleAuth} from 'google-auth-library';
import {credentials} from '@grpc/grpc-js';
Além disso, atualize o código de inicialização para configurar o ADC antes de instanciar o exportador gRPC:
async function getAuthenticatedClient(): Promise<AuthClient> {
const auth: GoogleAuth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/cloud-platform',
});
return await auth.getClient();
}
// Express App that exports traces via gRPC with protobuf
async function main() {
const authenticatedClient: AuthClient = await getAuthenticatedClient();
// Configure the TraceExporter
}
Configure os atributos de recursos do OpenTelemetry necessários
Adicione à variável de ambiente OTEL_RESOURCE_ATTRIBUTES o par chave-valor que especifica o seu projeto. Para a chave, use gcp.project_id.
Para o valor, use o ID do seu Google Cloud projeto.
Exemplo:
export OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=PROJECT_ID"
Se usar Java e configurar a sua aplicação para usar a extensão de autenticação do Google Cloud, como faz a aplicação Java de exemplo, não precisa de definir o ID do projeto como parte dos atributos de recursos do OpenTelemetry. No entanto, a definição deste atributo não é prejudicial.
Para mais informações sobre as variáveis de ambiente do OpenTelemetry, consulte a secção Configuração geral do SDK.
Defina o ID do projeto de quota
O projeto de quota é o Google Cloud projeto que monitoriza a sua utilização de pedidos API. Uma vez que a API Telemetry é uma API baseada no cliente, a forma como se autentica determina se o projeto de quota é identificado automaticamente. Por exemplo, não precisa de especificar o projeto de quota quando usa uma conta de serviço para autenticação. No entanto, tem de especificar o projeto de quota quando as credenciais do utilizador são usadas para autenticação.
Pode definir um projeto de quota através de uma variável de ambiente. Para determinar que variável de ambiente definir para a sua linguagem de programação, consulte Defina o projeto de quota através de uma variável de ambiente.
Por exemplo, para o Go, pode definir o projeto de quota da seguinte forma:
export GOOGLE_CLOUD_QUOTA_PROJECT="QUOTA_PROJECT_ID"
Para obter informações sobre como resolver erros de autenticação, consulte o artigo As credenciais do utilizador não estão a funcionar.
Configure o ponto final do exportador
Defina o valor da variável de ambiente OTEL_EXPORTER_OTLP_ENDPOINT para o ponto final OTLP para Google Cloud.
Exemplo:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://telemetry.googleapis.com
Se usar Java e o módulo de configuração automática, pode definir o ponto final do exportador usando propriedades do sistema, tal como a aplicação Java de exemplo. Não precisa de definir a variável de ambiente do exportador para essa configuração.
Para mais informações sobre as variáveis de ambiente do OpenTelemetry, consulte a secção Configuração geral do SDK.