otel-env-context

module
v0.0.0-...-4f30a8c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 29, 2023 License: MIT

README

otel-env-context

exec.Commandなどで外部コマンドを呼び出す際に環境変数を用いてW3C TraceContext形式でトレースコンテキストを伝搬させる例

実行方法

# jaegerを起動し、cmd/otel-parentを実行してトレースを送信する
docker compose up -d

# jaegerを開く
open http://localhost:16686/search

screenshot.png

ポイント

準備

まずPropagatorを以下のように登録しておきます。

otel.SetTextMapPropagator(
	propagation.NewCompositeTextMapPropagator(
		propagation.TraceContext{},
		propagation.Baggage{},
	),
)
親コマンド側

親コマンドotel-parentにおいて以下のようにトレースを開始します。

otel.Tracer(instrumentationName).Start(context.Background(), "parent")

otel-parentは子コマンドotel-childを呼び出します。

この際、otel-parentのトレースコンテキストをW3C TraceContext形式で環境変数に指定することでコマンドotel-childを伝搬します。 W3C TraceContext形式への変換はpropagation.TraceContextに任せます。

子コマンドへの環境変数の指定は以下のように行います。

// Propagatorに指定されているpropagation.TraceContextを用いてトレースコンテキストをenvCarrierに書き出し
envCarrier := propagation.MapCarrier{}
otel.GetTextMapPropagator().Inject(ctx, envCarrier)

// 書き出したトレースコンテキストを環境変数に設定
for _, key := range envCarrier.Keys() {
	cmd.Env = append(cmd.Env, key+"="+envCarrier.Get(key))
}
子コマンド側

子コマンドotel-child側では環境変数からトレースコンテキストを取得します。

envCarrier := propagation.MapCarrier{
    "traceparent": os.Getenv("traceparent"),
    "tracestate":  os.Getenv("tracestate"),
}
ctx, span := otel.Tracer(instrumentationName).Start(
    otel.GetTextMapPropagator().Extract(context.Background(), envCarrier),
    "child", 
)

License

otel-env-context Copyright (C) 2023 Kazumichi Yamamoto

This project is published under MIT.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL