OpenTelemetry Go アプリケーション向けの統合

エージェントベースのセットアップではデフォルトの OTLP エクスポーターを、サーバーレス環境では Instana Go OpenTelemetry エクスポーターを使用することで、 Go アプリケーション向けに OpenTelemetry と Instana を連携させることができます。

OpenTelemetry との統合における主な方法は、 OpenTelemetry によって監視されているアプリケーションのデフォルトの OTLP エクスポーターを設定し、そのデータを Instana エージェントに送信するようにすることです。

詳細については、「 OpenTelemetry 」のページをご覧ください。

サーバーレス OpenTelemetry エクスポーター

モジュール ` github.com/instana/go-otel-exporter ` は、 OpenTelemetry のスパンを変換して Instana バックエンドに送信する ` OpenTelemetry ` エクスポーターを提供します。

Instana Go OpenTelemetry のエクスポーターは、主に AWS Lambda や AWS Fargate などのサーバーレス環境での使用を想定して設計されています。 Instana すでに、ホストエージェントを通じて、 SaaS およびセルフホスト型ソリューション向けの OpenTelemetry をサポートしています。 ただし、 Go アプリケーションがエージェントが存在しないサーバーレス環境で実行されている場合は、サーバーレス版 OpenTelemetry エクスポーターを使用することをお勧めします。

エクスポーターを使用するには、モジュールをプロジェクトにインストールし、 instana.New() を使用してエクスポーターの新規インスタンスを作成し、それをトレーサー・プロバイダーに追加します。

このエクスポーターは、アプリケーションに指定する必要がある2つの Instana 環境変数を想定しています:

  • INSTANA_AGENT_KEY
  • INSTANA_ENDPOINT_URL

エクスポーターの完全な使用例を以下に示します。

package main

import (
        "context"
        "time"

        instana "github.com/instana/go-otel-exporter"
        "go.opentelemetry.io/otel"
        sdktrace "go.opentelemetry.io/otel/sdk/trace"
        "go.opentelemetry.io/otel/trace"
)

// This example application demonstrates how to use the Instana OTel Exporter.
// Make sure to provide the required environment variables before run the application:
// * INSTANA_ENDPOINT_URL
// * INSTANA_AGENT_KEY
func main() {
        ch := make(chan bool)
        // Acquire an instance of the Instana OTel Exporter
        exporter := instana.New()

        // Setup and bootstrap the tracer provider
        tracerProvider := sdktrace.NewTracerProvider(
                sdktrace.WithBatcher(exporter),
        )

        otel.SetTracerProvider(tracerProvider)

        ctx := context.Background()

        // Instrument something with OTel
        tracer := otel.Tracer("my-traced-tech")
        _, span := tracer.Start(ctx, "my_span", trace.WithSpanKind(trace.SpanKindServer))

        // This simulates the time that a span takes to be completed
        time.Sleep(time.Millisecond * 400)
        span.End()

        <-ch
}

OpenTelemetry によって監視されているアプリケーションが実行されると、 Instana エクスポーターは、 OpenTelemetry のスパンを Instana のスパンに変換し、それらをバックエンドのエンドポイントに送信します。

OpenTelemetry のトレース可視化機能は、通常の Instana のトレーススパンと同様に、 Instana のUIに表示されます。