アプリケーションのトレースデータを表示するには、クライアントを使用してトレースデータを Tracing Analysis にレポートする必要があります。このトピックでは、Jaeger SDK または Jaeger エージェントを使用して Go アプリケーションデータをレポートする方法について説明します。また、2 つの方法を使用して Go アプリケーションデータをレポートする例も示します。
前提条件
背景情報
方法 1: Jaeger SDK を使用して Go アプリケーションデータをレポートする
この例では、Go モジュールを使用して依存関係を管理します。Jaeger SDK を使用してアプリケーションをインストルメントし、アプリケーションデータを Tracing Analysis にレポートできます。他のツールを使用して依存関係を管理する場合は、実際の要件に基づいて操作を実行してください。
jaeger-client-go をインポートします。
go get github.com/uber/jaeger-client-go
Tracer オブジェクトを作成します。
説明<endpoint>
を、Tracing Analysis コンソールのアクセスポイント情報ページにある対応するリージョンの Jaeger のエンドポイントに置き換えます。エンドポイントの取得方法については、このトピックの「前提条件」セクションを参照してください。func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) { sender := transport.NewHTTPTransport( // エンドポイントを指定します。エンドポイントはリージョンによって異なります。 "<endpoint>", ) tracer, closer:= jaeger.NewTracer(service, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer }
スパンを作成し、データを渡します。
親スパンがない場合は、次のコードを使用します。
// スパンを作成します。 span := tracer.StartSpan("myspan") // タグを設定します。 clientSpan.SetTag("mytag", "123") // トレースの ID を渡します。 tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish()
親スパンがある場合は、次のコードを使用します。
// HTTP リクエストまたは RPC リクエストから SpanContext を抽出します。 spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
詳細については、Go OpenTracing API の Jaeger バインディング を参照してください。
方法 2: Jaeger エージェントを使用して Go アプリケーションデータをレポートする
Jaeger エージェントを起動します。詳細については、Jaeger エージェントをインストールする を参照してください。
jaeger-client-go をインポートします。
go get github.com/uber/jaeger-client-go
Tracer オブジェクトを作成します。
func NewJaegerTracer(serviceName string) (opentracing.Tracer, io.Closer) { sender, _ := jaeger.NewUDPTransport("",0) tracer, closer:= jaeger.NewTracer(serviceName, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer }
スパンを作成し、データを渡します。
親スパンがない場合は、次のコードを使用します。
// スパンを作成します。 span := tracer.StartSpan("myspan") // タグを設定します。 clientSpan.SetTag("mytag", "123") // トレースの ID を渡します。 tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish()
親スパンがある場合は、次のコードを使用します。
// HTTP リクエストまたは RPC リクエストから SpanContext を抽出します。 spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
詳細については、Go OpenTracing API の Jaeger バインディング を参照してください。
例
Jaeger SDK を使用して Go アプリケーションデータをレポートする
必要なエンドポイントを取得します。詳細については、このトピックの「前提条件」セクションを参照してください。
次のコマンドを実行して、デモ をダウンロードします。
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
ZIP パッケージを解凍し、デモの examples/settings.go ファイルを開き、次の図に示すように、TracingAnalysisEndpoint パラメータを手順 1 で取得したエンドポイントに設定します。
go mod tidy
コマンドを実行して、未使用の依存関係をクリーンアップします。go run tracingdemo
コマンドを実行して、デモを実行します。
Jaeger エージェントを使用して Go アプリケーションデータをレポートする
必要なエンドポイントを取得します。詳細については、このトピックの「前提条件」セクションを参照してください。
次のコマンドを実行して、デモ をダウンロードします。
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
Jaeger エージェントを起動します。詳細については、Jaeger エージェントをインストールする を参照してください。
デモの examples/settings.go ファイルを開き、
AgentSwitch
パラメータをtrue
に設定します。go mod tidy
コマンドを実行して、未使用の依存関係をクリーンアップします。go run tracingdemo
コマンドを実行して、デモを実行します。
FAQ
Q: Jaeger を使用して Go アプリケーションデータをレポートすると、次のエラーが発生するのはなぜですか?
2021/06/28 21:11:54 ERROR: error when flushing the buffer: error from collector: 403
A: これは、指定されたエンドポイントが無効であるためです。有効なエンドポイントを指定して、再試行してください。