以前にこちらの投稿にて Cisco AppDynamics
今回は Azure Functions 上の C# 関数を AppDynamics で性能監視する手順について説明いたします。
Azure Functions のインスツルメント手順に関する公式ドキュメントはこちら
なお, Azure Portal の言語設定は English を選択,以下の作業を行うことを推奨致します。
今回,監視対象の関数は Infrastructure as Code(IaC) ツール,Pulumi
今回の監視対象関数の Pulumi スタック一式は以下のように BitBucket レポジトリから clone することができます。
git clone git@bitbucket.org:goto-satoru/pulumi-azure-functions-csharp.git
README.md に記載されているように以下の準備を行います。
次に以下の手順で Pulumi スタックのデプロイを行います。今回は Japan East(東京) リージョンを利用します。
pulumi stack init dev
az login
pulumi config set azure:location JapanEast
pulumi up --yes
Pulumi でデプロイした C# 関数(Function App)のメニュー検索窓(Search) にて,extension と入力,Extensions メニューを選択します。
+ Add をクリック,表示される extension 選択画面にて,AppDynamics WindowsAzure.SiteExtension 4.5 を選択します。
Extension 選択後,Legal Terms を Accept すると,以下の表示となります。
画面下の OK をクリックしますと,インストールが開始されます。しばらく待ってページをリロードしますと,以下の表示となります。
AppDynamics.WindowsAzure.SiteExtension 4.5 をクリックし,
次の画面で Browse をクリックしますと, AppDynamics コントローラ
各項目を入力後,画面下の Validate ボタンをクリックした際に,以下のような表示となれば AppDynamics コントローラへの接続が正常に行われていることが確認できます。
ここまでで AppDynamics Extension のインスツルメントは完了となります。
AppDynamics Site Extension を追加しましたので,今回の監視対象の関数(Azure Function)を再起動(restart)します。
今回は以下のようなシェルスクリプトで,5秒ごとに C# 関数 にリクエストを行いました。
#/bin/sh -x
ENDPOINT="$(pulumi stack output Endpoint)"
while true
do
date
curl -w '\n' -s $ENDPOINT
sleep 5
done
5分程度待ってから AppDynamics コントローラ UI 上で,”azure-function1″ アプリケーションを選択しますと,以下のように Application Flow Map 上に .NET Tier が表示されており,正常に監視開始できたことが確認できました。
次に,Business Transaction メニューから,Hello トランザクションを選択,Transaction Snapshots タブで表示される Transaction Snapshot 一覧から,いずれか一つを選択し,Potential Issues – System.Runtime.CompilerServices.TaskAwaiter.UnsafeOnCompletedInternal – Drill Down into Call Graph をクリックしますと,下図のようなストックトレースが得られます(AppDynamics では Snapshot Call Graph
Call Graph では関数内でコールされているすべてのメソッドがそれぞれの実行時間とともに表示されていますので,性能問題が発生している場合,素早く根本原因までたどり着くことが可能です。
今回サンプルとして利用した Azure Functions, Storage Account, App Service Plan は以下のコマンドにより自動的に削除可能です。
pulumi destroy --yes
pulumi stack rm --yes
今回は C#(.NET) で書かれた Azure Function を Cisco AppDynamics で性能監視する手順について解説させて頂きました。Azure Functions 以外にも,AppDynamics は以下の Azure サービスの監視に対応しています。