エクスポーター
OpenTelemetryコレクターにテレメトリーを送信し、正しくエクスポートされることを確認してください。 本番環境でコレクターを使用することはベストプラクティスです。 テレメトリーを可視化するために、Jaeger、Zipkin、 Prometheus、またはベンダー固有のようなバックエンドにエクスポートしてください。
使用可能なエクスポーター
レジストリには、Go 用のエクスポーターのリストが含まれています。
エクスポーターの中でも、OpenTelemetry Protocol (OTLP)エクスポーターは、OpenTelemetryのデータモデルを考慮して設計されており、OTelデータを情報の損失なく出力します。 さらに、多くのテレメトリーデータを扱うツールがOTLPに対応しており(たとえば、Prometheus、Jaegerやほとんどのベンダー)、必要なときに高い柔軟性を提供します。 OTLPについて詳細に学習したい場合は、OTLP仕様を参照してください。
このページでは、主要なOpenTelemetry Go エクスポーターとその設定方法について説明します。
環境変数によるエクスポーターの自動設定
go.opentelemetry.io/contrib/exporters/autoexport パッケージを用いることで、標準の OpenTelemetry 環境変数を使用してエクスポーターを自動的に設定できます。
このパッケージは、エクスポーターセレクター環境変数を読み取り、実行時に適切なエクスポーターを選択して初期化するファクトリ関数を提供します。
| 関数 | 環境変数 | 説明 |
|---|---|---|
NewSpanExporter | OTEL_TRACES_EXPORTER | トレースエクスポーターを作成 |
NewMetricReader | OTEL_METRICS_EXPORTER | メトリクスリーダーを作成 |
NewLogExporter | OTEL_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),
)
}
標準の OTLP エクスポーターパッケージ(otlptracegrpc、otlptracehttp など)は、OTEL_EXPORTER_OTLP_ENDPOINT、OTEL_EXPORTER_OTLP_HEADERS、OTEL_EXPORTER_OTLP_TIMEOUT、OTEL_EXPORTER_OTLP_COMPRESSION など、ほとんどの OTLP 環境変数をすでに読み取っています。
autoexport パッケージにより、エクスポーターセレクター変数(OTEL_TRACES_EXPORTER、OTEL_METRICS_EXPORTER、OTEL_LOGS_EXPORTER)のサポートが追加されます。
これらの変数で、どの エクスポーター実装を使うかを選択します。
この分離により、明示的にインポートしない限り、エクスポーターの依存関係(gRPC など)をバンドルしないため、バイナリサイズを小さくすることができます。
なお、OTEL_SDK_DISABLED は現在、Go SDK ではサポートされていません。
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を試してください。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!