miso_soup3 Blog

主に ASP.NET 関連について書いています。

Application Insights で Azure Web Apps のパフォーマンスカウンターを監視したいが…

こちらの記事にて、Azure Web Apps でパフォーマンスカウンターの値を Application Insights に送信できるとありましたので、ASP.NETで試してみました。もろもろを記録しておきます。

azure.microsoft.com

追記

最新の情報の記事です。こちらもご参照ください。
blog.shibayan.jp

現状の確認

まず、上記の方法を試す前に、現状、パフォーマンスカウンター関連の項目をどのように確認できるか、見てみます。
Standard 1のApp Service Plan上に、Web Appsを立ち上げます。

Web Appsでは、インスタンスあたりのメトリックスや、CPU Time、Average memory working set等の項目を見られます。

f:id:miso_soup3:20160819193235p:plain
↑インスタンスあたりのメトリックス
f:id:miso_soup3:20160819185435p:plain
↑グラフで選択できる項目

App Service Planだと、「CPU Percentage」「Memory Percentage」「Disk Queue Length」等が見られます。

f:id:miso_soup3:20160819193548p:plain
↑グラフで選択できる項目

グラフで選択できる項目は、アラートにも設定できます。「インスタンスあたりのメトリックス」で確認できるインスタンス毎の値については、アラートには設定できません。

Application Insights

Application Insights を入れた場合のパフォーマンスカウンター関連の項目はどうでしょうか?
Web Apps と Application Insights を作成した後、Visual Studio から ASP.NET プロジェクト作成、NuGet で Application Insights 2.1.0 を追加しデプロイしました。

このとき、Application Insights のグラフの項目には、パフォーマンスカウンターの欄がありますが、Web Apps の場合は実際に「Process CPU」や「ASP.NET request execution time」が取得できるわけではありません。

f:id:miso_soup3:20160819193909p:plain

このことは、実行中の IIS Web サイトのパフォーマンスの問題の診断 Microsoft Azure のドキュメントにも書いてあります。

システム パフォーマンス カウンター IIS または Azure Cloud Services (Azure Web アプリは除く)

それでは、冒頭のサイトで説明された機能を試し、Application Insights 上で Web Apps のパフォーマンスカウンターの値が取れるか確認してみます。

Application Insights Performance Counters

試した方法は以下の通りです。

・Azure 上に Application Insights と Web Apps を作成する。
・Visual Studio で適当な ASP.NET プロジェクトを作成する。
ApplicationInsights-SDK-Labs こちらにある手順を参照し、Application Insights SDK Labs の Package をインストールできるよう設定する。
・NuGetで「Microsoft.ApplicationInsights」(version 2.2.0-beta1)をインストールする。
・プロジェクトの中のApplicationInsights.configに、InstrumentationKey(Application Insightsのキー)を設定する。
・Azure Web Apps にデプロイする。
・Azure Web Apps の Kudu から拡張機能「Application Insights」を設定する。

f:id:miso_soup3:20160819195434p:plain
https://****.scm.azurewebsites.net にアクセスし、Site extensions から Application Insights をインストールします。)

そうすると、Application Insights メトリックスエクスプローラーにて、以下の項目の追加を確認できました。

f:id:miso_soup3:20160819195742p:plain

\.NET CLR Exceptions(??APP_CLR_PROC??)\# of Exceps Thrown / sec
\ASP.NET Applications(??APP_W3SVC_PROC??)\Request Execution Time 
\ASP.NET Applications(??APP_W3SVC_PROC??)\Requests In Application Queue 
\ASP.NET Applications(??APP_W3SVC_PROC??)\Requests/Sec 
\Process(??APP_WIN32_PROC??)\% Processor Time 
\Process(??APP_WIN32_PROC??)\IO Data Bytes/sec 
\Process(??APP_WIN32_PROC??)\Private Bytes 


f:id:miso_soup3:20160819195922p:plain

サイトの画像のように、Performance counters欄にある「Processor time」の項目名として取得できるのかと思いましたが、上記の項目名として取得しているようでした。

これらの項目はアラートとしても設定できますが、すべて単位が「カウント」となっており、また設定してもアラートが飛んでこないので若干怪しいです。
f:id:miso_soup3:20160819200112p:plain

Custom

Application Insights Aggregate Metrics SDK TelemetryModule こちらを参考にし、
applicationinsights.configにカスタムカウンターを定義してみました。

  <Counters> 
      <Add PerformanceCounter="\Process(??APP_WIN32_PROC??)\Handle Count" ReportAs="Process handle count" /> 
      <Add PerformanceCounter="\Process(??APP_WIN32_PROC??)\Thread Count" ReportAs="Process thread count" /> 
    </Counters> 

が、ポータル上からはこれらの項目を確認できず…。何か設定が間違っているのかもしれません。


以上、いろいろ試してみましたが、理解不足もあり中々難しいです。まだBetaですし、今後に期待です。