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
The console exporter is useful for development and debugging tasks, and is the simplest to set up.
Console traces
The
go.opentelemetry.io/otel/exporters/stdout/stdouttrace
package contains an implementation of the console trace exporter.
Here’s how you can create an exporter with default configuration:
import (
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/sdk/trace"
)
func newExporter() (trace.SpanExporter, error) {
return stdouttrace.New()
}
Console metrics
The
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric
package contains an implementation of the console metrics exporter.
Here’s how you can create an exporter with default configuration:
import (
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
"go.opentelemetry.io/otel/sdk/metric"
)
func newExporter() (metric.Exporter, error) {
return stdoutmetric.New()
}
Console logs (Experimental)
The
go.opentelemetry.io/otel/exporters/stdout/stdoutlog
package contains an implementation of the console log exporter.
Here’s how you can create an exporter with default configuration:
import (
"go.opentelemetry.io/otel/exporters/stdout/stdoutlog"
"go.opentelemetry.io/otel/sdk/log"
)
func newExporter() (log.Exporter, error) {
return stdoutlog.New()
}
OTLP
To send trace data to an OTLP endpoint (like the collector or Jaeger >= v1.35.0) you’ll want to configure an OTLP exporter that sends to your endpoint.
OTLP traces over HTTP
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
contains an implementation of the OTLP trace exporter using HTTP with binary
protobuf payloads.
Here’s how you can create an exporter with default configuration:
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)
}
OTLP traces over gRPC
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
contains an implementation of OTLP trace exporter using gRPC.
Here’s how you can create an exporter with default configuration:
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
To try out the OTLP exporter, since v1.35.0 you can run Jaeger as an OTLP endpoint and for trace visualization in a Docker container:
docker run -d --name jaeger \
-e COLLECTOR_OTLP_ENABLED=true \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
jaegertracing/all-in-one:latest
OTLP metrics over HTTP
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp
contains an implementation of OTLP metrics exporter using HTTP with binary
protobuf payloads.
Here’s how you can create an exporter with default configuration:
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)
}
OTLP metrics over gRPC
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
contains an implementation of OTLP metrics exporter using gRPC.
Here’s how you can create an exporter with default configuration:
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)
A Prometheus exporter is used to report metrics via Prometheus scrape HTTP endpoint.
go.opentelemetry.io/otel/exporters/prometheus
contains an implementation of Prometheus metrics exporter.
Here’s how you can create an exporter (which is also a metric reader) with default configuration:
import (
"context"
"go.opentelemetry.io/otel/exporters/prometheus"
"go.opentelemetry.io/otel/sdk/metric"
)
func newExporter(ctx context.Context) (metric.Reader, error) {
// prometheus.DefaultRegisterer is used by default
// so that metrics are available via promhttp.Handler.
return prometheus.New()
}
To learn more on how to use the Prometheus exporter, try the prometheus example
OTLP logs over HTTP (Experimental)
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
contains an implementation of OTLP logs exporter using HTTP with binary protobuf
payloads.
Here’s how you can create an exporter with default configuration:
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)
}
OTLP logs over gRPC (Experimental)
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
contains an implementation of OTLP logs exporter using gRPC.
Here’s how you can create an exporter with default configuration:
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)
}
Feedback
Was this page helpful?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!