エクスポーター

OpenTelemetryコレクターにテレメトリーを送信し、正しくエクスポートされることを確認してください。 本番環境でコレクターを使用することはベストプラクティスです。 テレメトリーを可視化するために、JaegerZipkinPrometheus、またはベンダー固有のようなバックエンドにエクスポートしてください。

使用可能なエクスポーター

レジストリには、Go 用のエクスポーターのリストが含まれています。

エクスポーターの中でも、OpenTelemetry Protocol (OTLP)エクスポーターは、OpenTelemetryのデータモデルを考慮して設計されており、OTelデータを情報の損失なく出力します。 さらに、多くのテレメトリーデータを扱うツールがOTLPに対応しており(たとえば、PrometheusJaegerやほとんどのベンダー)、必要なときに高い柔軟性を提供します。 OTLPについて詳細に学習したい場合は、OTLP仕様を参照してください。

このページでは、主要なOpenTelemetry Go エクスポーターとその設定方法について説明します。

環境変数によるエクスポーターの自動設定

go.opentelemetry.io/contrib/exporters/autoexport パッケージを用いることで、標準の OpenTelemetry 環境変数を使用してエクスポーターを自動的に設定できます。

このパッケージは、エクスポーターセレクター環境変数を読み取り、実行時に適切なエクスポーターを選択して初期化するファクトリ関数を提供します。

関数環境変数説明
NewSpanExporterOTEL_TRACES_EXPORTERトレースエクスポーターを作成
NewMetricReaderOTEL_METRICS_EXPORTERメトリクスリーダーを作成
NewLogExporterOTEL_LOGS_EXPORTERログエクスポーターを作成

セレクター変数でサポートされる値は、otlp(デフォルト)と none です。 OTEL_METRICS_EXPORTER では、prometheus もサポートされています。 エクスポーターが選択されると、そのエクスポーターの設定(エンドポイント、ヘッダー、タイムアウト、プロトコルなど)は、基となる OTLP エクスポーターパッケージにより、標準の OTLP エクスポーター環境変数から読み取られます。

使用例:

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

	// 環境変数によるトレースエクスポーターの作成
	spanExporter, err := autoexport.NewSpanExporter(ctx)
	if err != nil {
		// エラー処理
	}

	// エクスポーターを使用したトレースプロバイダーの作成
	tracerProvider := sdktrace.NewTracerProvider(
		sdktrace.WithBatcher(spanExporter),
	)

	// 環境変数によるメトリクスリーダーの作成
	metricReader, err := autoexport.NewMetricReader(ctx)
	if err != nil {
		// エラー処理
	}

	// リーダーを使用したメータープロバイダーの作成
	meterProvider := sdkmetric.NewMeterProvider(
		sdkmetric.WithReader(metricReader),
	)
}

Go SDK と contrib パッケージでサポートされる環境変数の完全な概要については、OpenTelemetry 仕様準拠マトリクスを参照してください。

コンソール

コンソールエクスポーターは開発およびデバッグタスクに役立ち、設定が最も簡単です。

コンソールトレース

go.opentelemetry.io/otel/exporters/stdout/stdouttraceパッケージには、コンソールトレースエクスポーターの実装が含まれています。

コンソールメトリクス

go.opentelemetry.io/otel/exporters/stdout/stdoutmetricパッケージには、コンソールメトリクスエクスポーターの実装が含まれています。

コンソールログ(実験的)

go.opentelemetry.io/otel/exporters/stdout/stdoutlogパッケージには、コンソールログエクスポーターの実装が含まれています。

OTLP

OTLPエンドポイント(コレクターやJaeger >= v1.35.0など)にトレースデータを送信するには、エンドポイントに送信するOTLPエクスポーターを設定する必要があります。

HTTP経由のOTLPトレース

go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttpには、バイナリprotobufペイロードを使用したHTTPによるOTLPトレースエクスポーターの実装が含まれています。

gRPC経由のOTLPトレース

go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcには、gRPCを使用したOTLPトレースエクスポーターの実装が含まれています。

Jaeger

OTLPエクスポーターを試すために、v1.35.0以降ではJaegerをOTLPエンドポイントおよびトレース可視化用に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

HTTP経由のOTLPメトリクス

go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttpには、バイナリprotobufペイロードを使用したHTTPによるOTLPメトリクスエクスポーターの実装が含まれています。

gRPC経由のOTLPメトリクス

go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpcには、gRPCを使用したOTLPメトリクスエクスポーターの実装が含まれています。

HTTP経由のOTLPログ(実験的)

go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttpには、バイナリprotobufペイロードを使用したHTTPによるOTLPログエクスポーターの実装が含まれています。

gRPC経由のOTLPログ(実験的)

go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpcには、gRPCを使用したOTLPログエクスポーターの実装が含まれています。

Prometheus(実験的)

Prometheusエクスポーターは、PrometheusスクレイプHTTPエンドポイント経由でメトリクスを報告するために使用されます。

go.opentelemetry.io/otel/exporters/prometheusには、Prometheusメトリクスエクスポーターの実装が含まれています。

Prometheusエクスポーターの使用方法について詳しく学ぶには、prometheus exampleを試してください。