0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenTelemetryのbridgeのerrorを制御する

Last updated at Posted at 2023-06-22

(2023年06月22日時点での情報)

困ったこと

OpenTelemetryを使用して、トレースを行なっていたところ、Spannerの利用箇所で、unsupported samplerというエラーが何度も出ていた。このログ出力を無効化したかった。

本文

前提

OpenTelemetryのOpenCensus bridgeを使用している。

GCPのCloud Traceを利用する時には、OpenTelemetryを使用している。
(OpenCensusは、プロジェクトが廃止されているらしい。)

ただ、現在の時点で、Spannerなどのパッケージでは、トレースには、OpenCensusが使用されている。そこで、bridge(wrap)を行い、OpenCensusのStartSpan()が呼ばれても、OpenTelemetryのStart()が利用されるようにしている。

問題点

エラーレベルで、starting span "cloud.google.com/go/spanner.ping": unsupported samplerというログが、何度も出力されていた。

解決策

otel.SetErrorHandler()を利用して、ErrorHandlerを設定し、ハンドリングできるようにする。

解説

OpenCensus bridgeを見に行くと、StartSpan()内で、オプションの変換が行われている。
変換処理を見に行くと、Samplerが存在した場合、fmt.Errorf("unsupported sampler")みたいな感じで、エラーが作成されている。

オプションの変換処理でエラーがあった場合、internalのvar Handleが利用される。これを書き換えれば良くて、方法として、otel.SetErrorHandler()がある。これを使って、otel.ErrorHandlerを設定する。

以下、雑なコード

func main() {
	otel.SetErrorHandler(New())
}

func New() otel.ErrorHandler {
	return errorHandler{}
}

type errorHandler struct{}

func (_ errorHandler) Handle(err error) {
	if strings.Contains(err.Error(), "unsupported sampler") {
		return
	}
	log.Println(err)
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?