概要
OpenTelemetryはOpenCensusやOpenTracingをまとめた形で生まれたので、既にOpenCensusやOpenTracingの形で実装されたライブラリは移行するのが大変です。
例えばGCPの各SDKは基本的にOpenCensusで実装されています。
そのようなライブラリを使用する際に
といったBridgeを使うことで簡単にOpenTelemetry用のSpanとして取り込むことができます。
環境
- Go v1.20.2
- go.opentelemetry.io/otel/trace v1.14.0
実装
実装としては簡単で、以下のようにTraceProviderをOpenCensusのTracerとして渡してあげるだけです。
import ( octrace "go.opencensus.io/trace" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/bridge/opencensus" ) func init() { bridge := otel.GetTracerProvider().Tracer("go.opentelemetry.io/otel/bridge/opencensus") octrace.DefaultTracer = opencensus.NewTracer(bridge) }
こんなイメージですね。
動作確認
では実際にBigtable Emulatorを動かしつつ検証してみます。
version: "3" services: api: build: context: . ports: - 8000:8000 environment: - EXPORTER_ENDPOINT=http://jaeger:14268/api/traces - BIGTABLE_EMULATOR_HOST=bigtable:8086 bigtable: image: jun06t/bigtable-emulator jaeger: image: jaegertracing/all-in-one:1.42 ports: - "6831:6831/udp" - "6832:6832/udp" - "5778:5778" - "16686:16686" - "4317:4317" - "4318:4318" - "14250:14250" - "14268:14268" - "14269:14269" - "9411:9411" environment: - COLLECTOR_ZIPKIN_HOST_PORT=:9411 - COLLECTOR_OTLP_ENABLED=true
リクエストを投げて見ると、
$ curl localhost:8000/hello
ちゃんとメトリクスが取得できていることが確認できます。
その他
サンプルコード
今回のサンプルコードはこちらです。