Cisco Japan Blog

AppDynamics による Azure Functions の性能監視

1 min read



はじめに

以前にこちらの投稿にて Cisco AppDynamicspopup_icon による AWS Lambdapopup_icon 関数の性能監視について紹介させて頂きましたが,Microsoft Azure 上で提供されている同様の サーバレス サービス,Azure Functionspopup_icon においても,AppDynamics  で性能監視を行うことが可能です。
今回は Azure Functions 上の C# 関数を AppDynamics で性能監視する手順について説明いたします。

インスツルメント手順公式ドキュメント

Azure Functions のインスツルメント手順に関する公式ドキュメントはこちらpopup_iconになります。

Azure Functions インスツルメント要件

Microsoft Azure における要件

  • Azure Function のバージョン: 1.x / 2.x / 3.x
  • インスツルメント対象の関数が AppService plan で実行されている
  • インスツルメント対象の関数は .NET で実装
  • インスツルメント対象の関数が実行される OS: Windows

なお, Azure Portal の言語設定は English を選択,以下の作業を行うことを推奨致します。

AppDynamics の要件

 

Pulumi による Azure Function のデプロイ

今回,監視対象の関数は Infrastructure as Code(IaC) ツール,Pulumipopup_icon を用いて自動的にデプロイを行います。

今回の監視対象関数の 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 メニューを選択します。

Function App Extension

+ Add をクリック,表示される extension 選択画面にて,AppDynamics WindowsAzure.SiteExtension 4.5 を選択します。

Choose Extension

Extension 選択後,Legal Terms を Accept  すると,以下の表示となります。

Add Extension

画面下の OK をクリックしますと,インストールが開始されます。しばらく待ってページをリロードしますと,以下の表示となります。

Extension added

AppDynamics.WindowsAzure.SiteExtension 4.5 をクリックし,

WindowsAzure.SiteExtension 4.5

次の画面で Browse をクリックしますと, AppDynamics コントローラpopup_icon への接続設定画面となります。 AppDynamics コントローラの Access Key はAppDynamics コントローラ UI 上で,画面右上 ⚙ アイコン – License – Account から確認できます。

controller config

 

各項目を入力後,画面下の Validate ボタンをクリックした際に,以下のような表示となれば AppDynamics コントローラへの接続が正常に行われていることが確認できます。

application name

ここまでで 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 が表示されており,正常に監視開始できたことが確認できました。

AppDynamics Application Flow Map

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 Graphpopup_icon と呼ばれます)。

Transaction 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 サービスの監視に対応しています。

 

コメントを書く