Exporters

In order to visualize and analyze your telemetry, you will need to export your data to an OpenTelemetry Collector or a backend such as Jaeger, Zipkin, Prometheus or a vendor-specific one.

As part of OpenTelemetry Go you will find many exporters being available. Among them, the OpenTelemetry Protocol (OTLP) exporters provide the best experience for you as an end-user, since it is a general-purpose telemetry data delivery protocol designed in the scope of the OpenTelemetry project.

To learn more about the OTLP protocol, you can read the OTLP Specification.

Below you will find some introductions on how to set up exporters for OTLP and other common protocols in your code.

控制台

控制台导出器对于开发和调试任务非常有用,也是最简单设置的导出器。

控制台追踪

go.opentelemetry.io/otel/exporters/stdout/stdouttrace中包含了控制台追踪导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

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

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

控制台度量(实验性)

go.opentelemetry.io/otel/exporters/stdout/stdoutmetric中包含了控制台度量导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

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

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

OTLP

要将跟踪数据发送到 OTLP 端点(如 收集器 或 Jaeger >= v1.35.0),您需要配置一个将数据发送到您端点的 OTLP 导出器。

有关如何使用 OTLP HTTP 导出器的更多信息,请尝试 otel-collector 示例

OTLP 追踪(通过 HTTP)

go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp中包含了使用 HTTP 和二进制协议缓冲区的 OTLP 追踪导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

import (
	"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, client)
}

OTLP 追踪(通过 gRPC)

go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc中包含了使用 gRPC 的 OTLP 追踪导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

import (
	"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, client)
}

Jaeger

要尝试 OTLP 导出器,自 v1.35.0 起您可以在 Docker 容器中运行 Jaeger 作为 OTLP 端点,并用于跟踪可视化:

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 度量(通过 HTTP,实验性)

go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp中包含了使用 HTTP 和二进制协议缓冲区的 OTLP 度量导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

import (
	"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 度量(通过 gRPC,实验性)

go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc中包含了使用 gRPC 的 OTLP 度量导出器的实现。

以下是如何创建一个具有默认配置的导出器的示例:

import (
	"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
	"go.opentelemetry.io/otel/sdk/trace"
)

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

Prometheus(实验性)

使用 Prometheus 导出器可以通过 Prometheus 的采集 HTTP 端点报告度量数据。

go.opentelemetry.io/otel/exporters/prometheus中包含了 Prometheus 度量导出器的实现。

以下是如何创建一个具有默认配置的导出器(同时也是度量阅读器)的示例:

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

func newExporter(ctx context.Context) (metric.Reader, error) {
	// 使用 prometheus.DefaultRegisterer 作为默认选项
	// 这样可以通过 promhttp.Handler 进行访问。
	return prometheus.New()
}

有关如何使用 Prometheus 导出器的更多信息,请尝试 prometheus 示例

可用的软件包

您可以在OpenTelemetry 注册表中找到可用导出器的完整列表。

最后修改 December 10, 2023: translate (a4350d6e)