すべてのプロダクト
Search
ドキュメントセンター

Managed Service for OpenTelemetry:Go アプリケーションデータのレポートに Jaeger を使用する

最終更新日:Dec 30, 2024

アプリケーションのトレースデータを表示するには、クライアントを使用してトレースデータを Tracing Analysis にレポートする必要があります。このトピックでは、Jaeger SDK または Jaeger エージェントを使用して Go アプリケーションデータをレポートする方法について説明します。また、2 つの方法を使用して Go アプリケーションデータをレポートする例も示します。

前提条件

Jaeger または Zipkin のエンドポイントを取得するには、次の手順を実行します。

  1. Managed Service for OpenTelemetry コンソール にログインします。

  2. 左側のナビゲーションペインで、クラスタ設定 をクリックします。表示されるページで、アクセスポイント情報 タブをクリックします。

  3. 上部のナビゲーションバーでリージョンを選択します。クラスタ情報セクションで、トークンを表示 をオンにします。

  4. クライアントパラメータを Jaeger または Zipkin に設定します。この例では、Jaeger が選択されています。

    下部の表の関連情報列で、Jaeger または Zipkin のエンドポイントを取得します。

    Jaeger/Zipkin接入点信息

    説明

    アプリケーションが Alibaba Cloud の本番環境にデプロイされている場合は、VPC エンドポイントを使用します。それ以外の場合は、パブリックエンドポイントを使用します。通常、Zipkin には v2 のエンドポイントを使用します。Zipkin についてよく理解している場合にのみ、v1 のエンドポイントを使用してください。

背景情報

データはどのようにレポートされますか?

  • 次の図は、Jaeger エージェントを使用せずにデータをレポートする方法を示しています。

  • 次の図は、Jaeger エージェントを使用してデータをレポートする方法を示しています。

方法 1: Jaeger SDK を使用して Go アプリケーションデータをレポートする

この例では、Go モジュールを使用して依存関係を管理します。Jaeger SDK を使用してアプリケーションをインストルメントし、アプリケーションデータを Tracing Analysis にレポートできます。他のツールを使用して依存関係を管理する場合は、実際の要件に基づいて操作を実行してください。

  1. jaeger-client-go をインポートします。

    go get github.com/uber/jaeger-client-go
  2. 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
    }
  3. スパンを作成し、データを渡します。

    • 親スパンがない場合は、次のコードを使用します。

      // スパンを作成します。
      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 アプリケーションデータをレポートする

  1. Jaeger エージェントを起動します。詳細については、Jaeger エージェントをインストールする を参照してください。

  2. jaeger-client-go をインポートします。

    go get github.com/uber/jaeger-client-go
  3. 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
    }
  4. スパンを作成し、データを渡します。

    • 親スパンがない場合は、次のコードを使用します。

      // スパンを作成します。
      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 アプリケーションデータをレポートする

  1. 必要なエンドポイントを取得します。詳細については、このトピックの「前提条件」セクションを参照してください。

  2. 次のコマンドを実行して、デモ をダウンロードします。

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. ZIP パッケージを解凍し、デモの examples/settings.go ファイルを開き、次の図に示すように、TracingAnalysisEndpoint パラメータを手順 1 で取得したエンドポイントに設定します。

    jaeger_demo

  4. go mod tidy コマンドを実行して、未使用の依存関係をクリーンアップします。

  5. go run tracingdemo コマンドを実行して、デモを実行します。

Jaeger エージェントを使用して Go アプリケーションデータをレポートする

  1. 必要なエンドポイントを取得します。詳細については、このトピックの「前提条件」セクションを参照してください。

  2. 次のコマンドを実行して、デモ をダウンロードします。

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. Jaeger エージェントを起動します。詳細については、Jaeger エージェントをインストールする を参照してください。

  4. デモの examples/settings.go ファイルを開き、AgentSwitch パラメータを true に設定します。

    jaeger_demo

  5. go mod tidy コマンドを実行して、未使用の依存関係をクリーンアップします。

  6. go run tracingdemo コマンドを実行して、デモを実行します。

FAQ

Q: Jaeger を使用して Go アプリケーションデータをレポートすると、次のエラーが発生するのはなぜですか?

2021/06/28 21:11:54 ERROR: error when flushing the buffer: error from collector: 403

A: これは、指定されたエンドポイントが無効であるためです。有効なエンドポイントを指定して、再試行してください。