Neste documento, descrevemos como configurar a exportação no processo de dados de rastreamento pelo SDK do OpenTelemetry para seu projeto do Google Cloud . Os exemplos para Java, Go, Python e Node.js mostram como configurar o SDK para enviar dados de rastreamento à API Telemetry (OTLP) ao usar a instrumentação manual. Para cada linguagem, a página fornece informações sobre como usar exportadores OTLP para enviar dados de rastreamento usando os protocolos de exportação compatíveis.
A instrumentação descrita nesta página se aplica apenas a dados de rastreamento. Ele não envia dados de registros ou métricas para seu projeto Google Cloud .
Se o aplicativo depender de um coletor do OpenTelemetry para enviar dados de rastreamento ao seu projeto Google Cloud , este documento não se aplica:
- Para exemplos de instrumentação, consulte Exemplos de instrumentação baseada em coletores.
- Para informações sobre coletores, consulte Coletor do OpenTelemetry criado pelo Google.
Por que migrar
Os SDKs do OpenTelemetry geram dados de registros, métricas e rastreamentos em um formato geralmente consistente com os arquivos proto definidos pelo protocolo OTLP do 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 um aplicativo exporta esses dados para um projeto Google Cloud usando um exportador Google Cloud , ele realiza as seguintes etapas:
- Transforma os dados gravados do formato OTLP em um formato proprietário definido pela API Cloud Logging, API Cloud Monitoring ou API Cloud Trace.
- Envia os dados transformados para a API apropriada, que é armazenada no seu projeto Google Cloud .
Para dados de rastreamento, recomendamos migrar seu aplicativo para usar a API Telemetry (OTLP) para exportar dados, porque essa exportação não exige uma transformação de dados. A transformação de dados pode causar a perda de algumas informações. Por exemplo, o formato proprietário pode ter limites mais baixos para determinados campos, ou alguns campos do OTLP podem não ser mapeados para um campo no formato proprietário.
Amostras disponíveis
Os aplicativos de exemplo mencionados nesta página estão disponíveis no GitHub. A maioria dos aplicativos é configurada para exportar dados de rastreamento usando gRPC, o que significa que eles usam dados codificados em protobuf usando o formato de fio gRPC em conexões HTTP/2. Também há um exemplo de código para aplicativos configurados para exportar dados de rastreamento como dados codificados em protobuf por conexões HTTP:
-
O aplicativo de exemplo está configurado para exportar rastreamentos como dados codificados em protobuf por conexões HTTP. Se você preferir usar o gRPC, a instrumentação neste exemplo será aplicável. No entanto, é necessário modificar as propriedades do sistema que o módulo de autoconfiguração consome. O aplicativo de exemplo especifica o exportador
http/protobuf. Para usar o gRPC, mude essa configuração paragrpc.Recomendamos que seus aplicativos Java, como o de exemplo, usem o módulo de autoconfiguração do SDK do OpenTelemetry para configurar o SDK.
Aplicativo Go que usa gRPC e Aplicativo Go que usa HTTP
Há dois repositórios Go. Em um repositório, o aplicativo de exemplo usa gRPC. A amostra no outro repositório usa dados codificados em protobuf em conexões HTTP.
-
Esse repositório contém duas amostras, uma para gRPC e outra que usa dados codificados em protobuf por conexões HTTP.
-
Esse repositório contém duas amostras, uma para gRPC e outra que usa dados codificados em protobuf por conexões HTTP.
Antes de começar
Antes de migrar seu aplicativo para enviar dados de rastreamento ao endpoint OTLP, ative a API Telemetry e verifique se você recebeu os papéis necessários do Identity and Access Management (IAM). Talvez também seja necessário conceder papéis do IAM a uma conta de serviço.
Ativar o faturamento 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 os seguintes papéis do IAM à conta de serviço usada pelo seu aplicativo:
- Gravador de traces de telemetria do Cloud (
roles/telemetry.tracesWriter) - Gravador de registros (
roles/logging.logWriter) | - Gravador de métricas do Monitoring (
roles/monitoring.metricWriter)
Para saber mais sobre o Application Default Credentials (ADC), consulte Como o Application Default Credentials funciona e Configurar o Application Default Credentials (ADC) para um ambiente de desenvolvimento local.
- Gravador de traces de telemetria do Cloud (
-
Para ter as permissões necessárias para acessar seus dados de registros, métricas e rastreamentos, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Visualizador de registros (
roles/logging.viewer) -
Leitor do monitoramento (
roles/monitoring.viewer) -
Usuário do Cloud Trace (
roles/cloudtrace.user)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
-
Visualizador de registros (
Adicione as seguintes declarações de importação:
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;Atualize o código do aplicativo para usar o módulo de autoconfiguração do SDK do 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 autoconfiguração consome durante a execução. Esse módulo usa essas propriedades para inicializar o SDK. Também é possível usar variáveis de ambiente em vez de propriedades do sistema. Para mais informações, consulte Variáveis de ambiente e propriedades do sistema.
O aplicativo de exemplo define as propriedades do sistema no script
build.gradle:// 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 você preferir exportar dados de rastreamento usando gRPC, defina o protocolo OTLP como
grpcem vez dehttp/protobuf.- Configure 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 endpoint do exportador.
Configurar permissões
Guia de migração para instrumentação manual
Nesta seção, descrevemos como modificar seu aplicativo para que ele envie os dados de rastreamento ao projeto Google Cloud usando a API Telemetry. Não é possível enviar dados de métricas ou registros para esse endpoint.
Adicionar dependências
A primeira etapa é adicionar dependências para o exportador de rastreamento OTLP do OpenTelemetry no seu aplicativo. Selecione as versões de dependência adequadas para seu aplicativo e sistema de build.
Java
Para um aplicativo Java, adicione as seguintes dependências ao script build.gradle:
// 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 seção ilustra as mudanças que você precisa fazer nas suas dependências
ao usar o gRPC para exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação,
inclua o pacote otlptracehttp como uma dependência. Para mais informações, consulte Aplicativo Go que usa HTTP.
Para um aplicativo Go que usa gRPC para exportação, atualize o arquivo 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 seção ilustra as mudanças que você precisa fazer nas suas dependências
ao usar o gRPC para exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação,
inclua o pacote opentelemetry-exporter-otlp-proto-http como um
requisito. Para mais informações, consulte Aplicativo Python.
Para um aplicativo Python que usa gRPC para exportação, instale as seguintes
dependências ou atualize o arquivo 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 seção ilustra as mudanças que você precisa fazer nas suas dependências
ao usar o gRPC para exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação,
inclua o pacote @opentelemetry/exporter-trace-otlp-proto como uma
dependência. Para mais informações, consulte Aplicativo Node.js.
Para um aplicativo Node.js que usa gRPC, adicione as seguintes dependências.
"@opentelemetry/exporter-trace-otlp-grpc": "0.203.0",
"@grpc/grpc-js": "1.13.4",
Substituir o uso de exportadores Google Cloud por exportadores OTLP
Atualize o código do aplicativo para que o SDK do OpenTelemetry seja configurado para usar os exportadores OTLP do OpenTelemetry em vez do exportador de rastreamento Google Cloud . As mudanças necessárias são específicas do idioma.
Java
Para um aplicativo Java, faça o seguinte:
Go
Esta seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação, importe o pacote otlptracehttp e configure o exportador com as opções correspondentes. Para mais informações, consulte Aplicativo Go que usa HTTP.
Para um aplicativo Go que usa gRPC para exportação, adicione as seguintes instruçõ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 seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação, importe do pacote
opentelemetry.exporter.otlp.proto.http e configure o exportador
com as opções correspondentes. Para mais informações, consulte Aplicativo Python.
Para um aplicativo 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 seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usa dados codificados em protobuf em conexões HTTP para exportação, importe o pacote @opentelemetry/exporter-trace-otlp-proto.
Para mais informações, consulte Aplicativo Node.js.
Para um aplicativo Node.js que usa o 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();
}
Configurar a autenticação
Com as mudanças anteriores na configuração do SDK do OpenTelemetry, seu aplicativo está configurado para exportar rastreamentos usando os exportadores OTLP do OpenTelemetry com gRPC ou HTTP. Em seguida, configure os exportadores para enviar esses rastreamentos ao seu projeto Google Cloud .
Para configurar a autenticação, faça o seguinte:
Esta seção detalha cada uma dessas etapas.
Configurar cabeçalhos de autenticação para as chamadas de exportação
Para configurar o exportador com suas Google Cloud Application Default Credentials (ADC), adicione uma biblioteca de autenticação do Google específica para uma linguagem.
Java
Para autenticar no Trace, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para um aplicativo Java que usa o módulo de autoconfiguração do SDK do OpenTelemetry, recomendamos que você 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 autenticar no Trace, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para um aplicativo Go que usa gRPC para exportação, atualize o arquivo 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 um aplicativo Go que usa HTTP para exportação, atualize o arquivo 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 autenticar no Trace, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para um aplicativo Python, adicione as seguintes importações:
# requirements.txt
# Google Auth Library
google-auth==2.38.0
Node.js
Para autenticar no Trace, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para um aplicativo Node.js, adicione as seguintes dependências:
"google-auth-library": "9.15.1",
Em seguida, atualize o código do aplicativo que cria o exportador de intervalos OTLP para que ele adicione os tokens de autorização recuperados da biblioteca aos cabeçalhos. Essa etapa é específica de cada linguagem, mas a implementação é semelhante para todas elas.
Java
Quando você tem um aplicativo Java que usa o módulo de autoconfiguração do SDK do OpenTelemetry e a extensão de autenticação do Google Cloud, não é necessário realizar etapas especiais durante a inicialização do aplicativo. O módulo de autoconfiguração executa automaticamente as etapas necessárias para configurar o ADC.
Go
Esta seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação, importe o pacote otlptracehttp e configure o exportador para ser um objeto otlptracehttp. Para mais informações, consulte Aplicativo Go que usa HTTP.
Para um aplicativo Go que usa gRPC para exportação, adicione as seguintes instruçõ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 seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usar dados codificados em protobuf em conexões HTTP para exportação, use as credenciais padrão. Você também precisa transmitir essas credenciais ao instanciar o BatchSpanProcessor. Para mais informações, consulte Aplicativo Python.
Para um aplicativo 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 seção ilustra as mudanças que você precisa fazer ao usar o gRPC para
exportação. Se você usa dados codificados em protobuf em conexões HTTP para exportação,
as mudanças necessárias são um pouco diferentes das descritas aqui.
Para saber mais, consulte o arquivo app-http-proto-export.ts incluído no
aplicativo Node.js.
Para um aplicativo Node.js que usa o 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
}
Configurar os atributos de recursos necessários do OpenTelemetry
Adicione à variável de ambiente OTEL_RESOURCE_ATTRIBUTES o par de chave-valor
que especifica seu projeto. Para a chave, use gcp.project_id.
Para o valor, use o ID do seu projeto Google Cloud .
Exemplo:
export OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=PROJECT_ID"
Se você usar Java e configurar seu aplicativo para usar a extensão de autenticação do Google Cloud, como o aplicativo de amostra em Java faz, não é necessário definir o ID do projeto como parte dos atributos de recursos do OpenTelemetry. No entanto, definir esse atributo não é prejudicial.
Para mais informações sobre variáveis de ambiente do OpenTelemetry, consulte Configuração geral do SDK.
Definir o ID do projeto de cota
O projeto de cota é o projeto Google Cloud que rastreia seu uso de solicitações de API. Como a API Telemetry é uma API baseada em cliente, a forma de autenticação determina se o projeto de cota é identificado automaticamente. Por exemplo, não é necessário especificar o projeto de cota ao usar uma conta de serviço para autenticação. No entanto, é necessário especificar o projeto de cota quando as credenciais do usuário são usadas para autenticação.
É possível definir um projeto de cota usando uma variável de ambiente. Para determinar qual variável de ambiente definir para sua linguagem de programação, consulte Definir o projeto de cota usando uma variável de ambiente.
Por exemplo, para Go, você pode definir o projeto de cota da seguinte maneira:
export GOOGLE_CLOUD_QUOTA_PROJECT="QUOTA_PROJECT_ID"
Para informações sobre como resolver erros de autenticação, consulte Credenciais do usuário que não funcionam.
Configurar o endpoint do exportador
Defina o valor da variável de ambiente OTEL_EXPORTER_OTLP_ENDPOINT como o endpoint do OTLP para Google Cloud.
Exemplo:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://telemetry.googleapis.com
Se você usa Java e o módulo de configuração automática, é possível definir o endpoint do exportador usando propriedades do sistema, como faz o aplicativo de amostra em Java. Não é necessário definir a variável de ambiente do exportador para essa configuração.
Para mais informações sobre variáveis de ambiente do OpenTelemetry, consulte Configuração geral do SDK.