Azure Functions 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_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 機能を提供する必要があります。
INSTANA_ENDPOINT_URL: Instana バックエンドエンドポイントの URL を設定します。INSTANA_AGENT_KEY: エージェント・キーに設定します。INSTANA_TIMEOUT: 構成したゾーンに応じて、適切なタイムアウト値に設定します。
Azure Function内のFunction Appにこれらの値を設定するには、 Instana UIの 「 Azure Function Settings > Configuration 」ページに移動し、以下の手順を実行してください:
- 「新規アプリケーション設定」をクリックします。
- 「アプリケーション設定の追加/編集」 ダイアログで、 「名前」 フィールドと 「値」 フィールドに値を指定し、 「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 のダッシュボードで確認できるようになります。