OpenTelemetry には自動計装の仕組みがあり、たとえば Java だと javaagent により実行時にバイトコードを変更することで、ソースコードを変更することなく計装することができる。
Go にもそのためのツールがある → https://github.com/open-telemetry/opentelemetry-go-instrumentation
これは eBPF を使用して実装されている。
しかし2024-05-27現在開発中のステータスなので、本番への投入はためらわれる。
そこで、時間のかかる処理=HTTP通信とDBでトレースを取れればよいと割り切って計装する。
http.Clientへの計装
http.Client は go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp を用いてある程度簡単に計装できる。
otelhttp.NewTransport
でラップした http.RoundTripper
を http.Client.Transport
にセットすることで、contextを渡すと自動でspanを作ってくれる。
サンプルはこちら https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/instrumentation/net/http/otelhttp/example/client/client.go
sdkの初期化を含めた全体は以下のようになる。
also see
Go sql.DB にOpenTelemetryのSpanを追加する