Exporters

Envie dados de telemetria para o OpenTelemetry Collector para garantir que estes dados sejam exportados corretamente. A utilização de um Collector em ambientes de produção é a melhor prática. Para visualizar os dados de telemetria que foram gerados, exporte-os para um backend como Jaeger, Zipkin, Prometheus, ou um backend específico de um fornecedor.

Exportadores disponíveis

O registro oferece uma lista de exportadores para Go.

Entre os exportadores, os exportadores do OpenTelemetry Protocol (OTLP) são projetados tendo em mente o modelo de dados do OpenTelemetry, emitindo dados OTel sem qualquer perda de informação. Além disso, muitas ferramentas que operam com dados de telemetria suportam o formato OTLP (como Prometheus, Jaeger e a maioria dos fornecedores), proporcionando um alto grau de flexibilidade quando necessário. Para saber mais sobre o OTLP, consulte a Especificação do OTLP.

Esta página reúne informações sobre os principais exportadores do OpenTelemetry Go e como configurá-los.

Configuração automática de exporters com variáveis de ambiente

Você pode utilizar o pacote go.opentelemetry.io/contrib/exporters/autoexport para configurar exporters automaticamente utilizando as variáveis de ambiente padrão do OpenTelemetry.

Este pacote fornece funções de fábrica que leem as variáveis de ambiente de seleção de exporter para selecionar e inicializar o exporter apropriado em tempo de execução:

FunçãoVariável de ambienteDescrição
NewSpanExporterOTEL_TRACES_EXPORTERCria um exporter de rastros
NewMetricReaderOTEL_METRICS_EXPORTERCria um leitor de métricas
NewLogExporterOTEL_LOGS_EXPORTERCria um exporter de logs

Os valores suportados para as variáveis de seleção são otlp (padrão) e none. Para OTEL_METRICS_EXPORTER, prometheus também é suportado. Uma vez que um exporter é selecionado, sua configuração (endpoint, cabeçalhos, tempo limite, protocolo, etc.) é lida a partir das variáveis de ambiente padrão do exporter OTLP pelo pacote do exporter OTLP subjacente.

Exemplo de uso:

import (
	"context"

	"go.opentelemetry.io/contrib/exporters/autoexport"
	sdkmetric "go.opentelemetry.io/otel/sdk/metric"
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

func main() {
	ctx := context.Background()

	// Cria trace exporter usando variável de ambiente
	spanExporter, err := autoexport.NewSpanExporter(ctx)
	if err != nil {
		// lida com o erro
	}

	// Cria trace provider com o exporter
	tracerProvider := sdktrace.NewTracerProvider(
		sdktrace.WithBatcher(spanExporter),
	)

	// Cria metric reader usando variável de ambiente
	metricReader, err := autoexport.NewMetricReader(ctx)
	if err != nil {
		// lida com o erro
	}

	// Cria meter provider com o reader
	meterProvider := sdkmetric.NewMeterProvider(
		sdkmetric.WithReader(metricReader),
	)
}

Para uma visão geral completa de quais variáveis de ambiente são suportadas pelo SDK de Go e pelos pacotes contrib, consulte a matriz de conformidade da especificação do OpenTelemetry.

Console

O exportador do console é útil para tarefas de desenvolvimento e depuração, e é o mais simples de configurar.

Rastros no Console

O pacote go.opentelemetry.io/otel/exporters/stdout/stdouttrace possui uma implementação do Exporter de Rastros para o console.

Métricas no Console

O pacote go.opentelemetry.io/otel/exporters/stdout/stdoutmetric possui uma implementação do Exporter de Métricas para o console.

Logs no Console (Experimental)

O pacote go.opentelemetry.io/otel/exporters/stdout/stdoutlog possui uma implementação do Exporter de Logs para o console.

OTLP

Para enviar dados de rastreamento para um endpoint OTLP (como o collector ou Jaeger >= v1.35.0), você precisará configurar um Exporter OTLP que envie os dados para o seu endpoint.

Rastros OTLP via HTTP

O pacote go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp possui uma implementação do Exporter de Rastros OTLP utilizando o protocolo HTTP com payloads binários protobuf.

Rastros OTLP via gRPC

O pacote go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc possui uma implementação do Exporter de Rastros OTLP utilizando o protocolo gRPC.

Jaeger

Para testar o exportador OTLP, a partir da versão v1.35.0 você pode executar o Jaeger como um endpoint OTLP e visualizar os rastros em um contêiner Docker:

docker run -d --name jaeger \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  jaegertracing/jaeger:latest

Métricas OTLP via HTTP

O pacote go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp possui uma implementação do Exporter de Métricas OTLP utilizando o protocolo HTTP com payloads binários protobuf.

Métricas OTLP via gRPC

O pacote go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc possui uma implementação do Exporter de Métricas OTLP utilizando o protocolo gRPC.

Logs OTLP via HTTP (Experimental)

O pacote go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp possui uma implementação do Exporter de Logs OTLP utilizando o protocolo HTTP com payloads binários protobuf.

Logs OTLP via gRPC (Experimental)

O pacote go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc possui uma implementação do Exporter de Logs OTLP utilizando o protocolo gRPC.

Prometheus (Experimental)

O Exporter do Prometheus é utilizado para reportar métricas através do scraping realizado pelo Prometheus em um endpoint HTTP.

O pacote go.opentelemetry.io/otel/exporters/prometheus possui uma implementação do Exporter de Métricas do Prometheus.

Para saber mais sobre como usar o Exporter do Prometheus, veja o exemplo do prometheus