はじめに
以前にこちらの投稿にて Cisco AppDynamics による AWS Lambda 関数の性能監視について紹介させて頂きましたが,Microsoft Azure 上で提供されている同様の サーバレス サービス,Azure Functions においても,AppDynamics で性能監視を行うことが可能です。
今回は Azure Functions 上の C# 関数を AppDynamics で性能監視する手順について説明いたします。
インスツルメント手順公式ドキュメント
Azure Functions のインスツルメント手順に関する公式ドキュメントはこちらになります。
Azure Functions インスツルメント要件
Microsoft Azure における要件
- Azure Function のバージョン: 1.x / 2.x / 3.x
- インスツルメント対象の関数が AppService plan で実行されている
- インスツルメント対象の関数は .NET で実装
- インスツルメント対象の関数が実行される OS: Windows
なお, Azure Portal の言語設定は English を選択,以下の作業を行うことを推奨致します。
AppDynamics の要件
- AppDynamics コントローラ が利用可能
- Microservices ライセンス が利用可能
- .NET Site Extension のバージョン: 4.5.16+
Pulumi による Azure Function のデプロイ
今回,監視対象の関数は 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
AppDynamics Site Extension のインスツルメント
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 コントローラ への接続設定画面となります。 AppDynamics コントローラの Access Key はAppDynamics コントローラ UI 上で,画面右上 ⚙ アイコン – License – Account から確認できます。
各項目を入力後,画面下の Validate ボタンをクリックした際に,以下のような表示となれば AppDynamics コントローラへの接続が正常に行われていることが確認できます。
ここまでで AppDynamics Extension のインスツルメントは完了となります。
Azure Function 再起動
AppDynamics Site Extension を追加しましたので,今回の監視対象の関数(Azure Function)を再起動(restart)します。
Application Flow Map の確認
今回は以下のようなシェルスクリプトで,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 Snapshot Call Graph の確認
次に,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 では関数内でコールされているすべてのメソッドがそれぞれの実行時間とともに表示されていますので,性能問題が発生している場合,素早く根本原因までたどり着くことが可能です。
Pulumi スタックの削除
今回サンプルとして利用した Azure Functions, Storage Account, App Service Plan は以下のコマンドにより自動的に削除可能です。
pulumi destroy --yes
pulumi stack rm --yes
まとめ
今回は C#(.NET) で書かれた Azure Function を Cisco AppDynamics で性能監視する手順について解説させて頂きました。Azure Functions 以外にも,AppDynamics は以下の Azure サービスの監視に対応しています。
- Azure Kubernetes Service(AKS)
- Azure App Service
- Azure Cloud Services
- Azure Service Fabric
- Azure Virtual Machines