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.

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
	"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
	"go.opentelemetry.io/otel/sdk/trace"
)

func newExporter() (trace.SpanExporter, error) {
	return stdouttrace.New()
}

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
	"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
	"go.opentelemetry.io/otel/sdk/metric"
)

func newExporter() (metric.Exporter, error) {
	return stdoutmetric.New()
}

Logs no Console (Experimental)

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

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
	"go.opentelemetry.io/otel/exporters/stdout/stdoutlog"
	"go.opentelemetry.io/otel/sdk/log"
)

func newExporter() (log.Exporter, error) {
	return stdoutlog.New()
}

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
	"go.opentelemetry.io/otel/sdk/trace"
)

func newExporter(ctx context.Context) (trace.SpanExporter, error) {
	return otlptracehttp.New(ctx)
}

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
	"go.opentelemetry.io/otel/sdk/trace"
)

func newExporter(ctx context.Context) (trace.SpanExporter, error) {
	return otlptracegrpc.New(ctx)
}

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 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  jaegertracing/all-in-one: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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
	"go.opentelemetry.io/otel/sdk/metric"
)

func newExporter(ctx context.Context) (metric.Exporter, error) {
	return otlpmetrichttp.New(ctx)
}

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
	"go.opentelemetry.io/otel/sdk/metric"
)

func newExporter(ctx context.Context) (metric.Exporter, error) {
	return otlpmetricgrpc.New(ctx)
}

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.

Por exemplo, aqui está como é possível criar um Exporter (que também é um leitor de métricas) com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/prometheus"
	"go.opentelemetry.io/otel/sdk/metric"
)

func newExporter(ctx context.Context) (metric.Reader, error) {
	// prometheus.DefaultRegisterer é utilizado por padrão, de modo que
	// as métricas fiquem disponíveis via promhttp.Handler.
	return prometheus.New()
}

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

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
  "context"

	"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp"
	"go.opentelemetry.io/otel/sdk/log"
)

func newExporter(ctx context.Context) (log.Exporter, error) {
	return otlploghttp.New(ctx)
}

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.

Por exemplo, aqui está como é possível criar um Exporter com as configurações padrão:

import (
	"context"

	"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
	"go.opentelemetry.io/otel/sdk/log"
)

func newExporter(ctx context.Context) (log.Exporter, error) {
	return otlploggrpc.New(ctx)
}