Azure Go 用の関数トレース

Instana Go Collector は、Go で作成された Azure 機能のトレースをサポートします。 トレース・データを収集して送信するには、 github.com/instana/go-sensor/instrumentation/instaazurefunction パッケージを使用してハンドラーをインスツルメントする必要があります。

Go で作成された Azure 機能のトレース に Instana を使用するには、以下のセクションを参照してください。

サポートされるランタイム

  • Go バージョン 1.13 以降

Go Azure 関数のトレースを設定する

バージョン v1.49.0以降、Instana Go プロセス内センサーは、サービスが Azure で実行されていることを検出し、サーバーレス・モードに切り替えることができます。 収集されたトレースをホスト・エージェントに送信する代わりに、プロセス内センサーは、環境変数 INSTANA_AGENT_KEYで定義されているエージェント・キーを使用して、 INSTANA_ENDPOINT_URL 環境変数で指定されている Instana サーバーレス・アクセプター・エンドポイントに、収集されたトレースを直接送信します。

github.com/instana/go-sensorの最新バージョンを使用していることを確認するには、プロジェクト内の go.mod ファイルを確認するか、以下のコマンドを実行します。

go get github.com/instana/go-sensor@latest

その後、最新バージョンの Go プロセス内センサーをダウンロードし、 go.mod ファイルで必要なバージョンを更新することができます。

構成

収集されたトレースを送信するには、以下の 3 つの環境変数を使用して Azure 機能を提供する必要があります。

Azure 関数の関数アプリにこれらの値を指定するには、Instana UI の Azure 「関数の設定」 >「構成」 ページに移動し、以下のアクションを実行します。

  1. 「新規アプリケーション設定」をクリックします。
  2. 「アプリケーション設定の追加/編集」 ダイアログで、 「名前」 フィールドと 「値」 フィールドに値を指定し、 「OK」をクリックします。

使用法

Golang で Azure 機能を開発するために、Microsoft の公式 SDK は今日まで存在しません。 代わりに、 Azure には、 Azure 関数の開発に使用できるさまざまなタイプのトリガー用のカスタム・ハンドラーが用意されています。 詳しくは、 Microsoft の資料を参照してください。 カスタム・ハンドラーを使用する Azure 関数をトレースするには、ハンドラーを装備する必要があります。 github.com/instana/go-sensor/instrumentation/instaazurefunction は、ハンドラー・コードをインスツルメンテーションするためのミドルウェア・ラッパーを提供するインスツルメンテーション・ライブラリーです。

github.com/instana/go-sensor/instrumentation/instaazurefunction をプロジェクトに追加するには、 go.mod ファイルが含まれているディレクトリーから以下のコマンドを実行します。

go get github.com/instana/go-sensor/instrumentation/instaazurefunction

その後、インスツルメンテーション・モジュールがプロジェクト依存関係リストおよびメイン github.com/instana/go-sensor プロセス内センサーに追加されます。

ハンドラー関数のインスツルメント

Goで書かれた HTTP トリガーを持つ典型的な Azure 関数は以下のようになる:

package main

import (
	"net/http"
)

func main() {
	http.HandleFunc("/api/azf-test", handlerFn)
}

func handlerFn(w http.ResponseWriter, r *http.Request) {
	// ...
}

ハンドラー関数は、Goの基本的な HTTP ハンドラーとまったく同じです。 instaazurefunctionを使用してハンドラー関数をインスツルメンテーションするには、 instaazurefunction.WrapFunctionHandler()を使用してハンドラーをラップします。そのため、前のコードは以下のように変更されます。

package main

import (
	"net/http"

	instana "github.com/instana/go-sensor"
	"github.com/instana/go-sensor/instrumentation/instaazurefunction"
)

// This example demonstrates how to instrument a custom handler for Azure Functions
func main() {
	// Initialize a new sensor.
	sensor := instana.NewSensor("my-azf-sensor")

	// Instrument your handler before passing it to the http router.
	http.HandleFunc("/api/azf-test", instaazurefunction.WrapFunctionHandler(sensor, handlerFn))
}

func handlerFn(w http.ResponseWriter, r *http.Request) {
	// ...
}

インフラストラクチャー・メトリック

Azure 環境のランタイム・メトリックおよび追加メタデータを収集するには、 Azure サブスクリプションの詳細を使用してエージェントを構成する必要があります。 詳しくは、 Azure Functions サービスのモニターを参照してください。 構成されると、エージェントはメトリックを収集し、情報はトレース・データとともに Instana ダッシュボードで使用可能になります。