Exporters

Send telemetry to the OpenTelemetry Collector to make sure it’s exported correctly. Using the Collector in production environments is a best practice. To visualize your telemetry, export it to a backend such as Jaeger, Zipkin, Prometheus, or a vendor-specific backend.

Available exporters

The registry contains a list of exporters for Go.

Among exporters, OpenTelemetry Protocol (OTLP) exporters are designed with the OpenTelemetry data model in mind, emitting OTel data without any loss of information. Furthermore, many tools that operate on telemetry data support OTLP (such as Prometheus, Jaeger, and most vendors), providing you with a high degree of flexibility when you need it. To learn more about OTLP, see OTLP Specification.

This page covers the main OpenTelemetry Go exporters and how to set them up.

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)
}