Azure Functions Go のトレース

Instana Go Collectorは、 Go で記述された Azure 関数のトレースに対応しています。

ハンドラは、トレースデータを収集して送信するために、 パッケージ github.com/instana/go-sensor/instrumentation/instaazurefunction を使用して計測する必要があります。

Go で記述された Azure 関数のトレースに Instana を使用するには、以下のセクションを参照してください:

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

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

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

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

その後、 Go の最新版インプロセスセンサーをダウンロードし、ファイル go.mod 内の必要なバージョンを更新してください。

構成

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

Azure Function内のFunction Appにこれらの値を設定するには、 Instana UIの 「 Azure Function Settings > Configuration 」ページに移動し、以下の手順を実行してください:

  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 のダッシュボードで確認できるようになります。