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