しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Web Apps でデフォルト以外のパフォーマンスカウンターを Application Insights に送信する

Azure App Service では実行ユーザーの権限に制限がいろいろとかかっているために、Application Insights などを使ったパフォーマンスカウンターの送信はそのままでは出来ません。

しかし、App Service は環境変数を使ってパフォーマンスカウンターの値を渡してくれるので、それを使って Application Insights に値を送信できるようになっています。App Service 向けに専用の Collector が実装されているので、デプロイすればすぐに使えます。

対応しているカウンター名は実装から読み取った方が間違いが無くて正確です。

ASP.NET / Process / .NET CLR 周りのカウンターを公開してくれているので、Application Insights に送信したい場合には、ApplicationInsights.config に追加するだけで使えます。

例えば .NET CLR 周りのカウンターを送信する場合には以下のように書きます。

<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
  <Counters>
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\# Gen 0 Collections" ReportAs="# Gen 0 Collections" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\# Gen 1 Collections" ReportAs="# Gen 1 Collections" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\# Gen 2 Collections" ReportAs="# Gen 2 Collections" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\Gen 0 heap size" ReportAs="Gen 0 heap size" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\Gen 1 heap size" ReportAs="Gen 1 heap size" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\Gen 2 heap size" ReportAs="Gen 2 heap size" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\Allocated Bytes/ sec" ReportAs="Allocated Bytes/ sec" />
    <Add PerformanceCounter="\.NET CLR Memory(??APP_CLR_PROC??)\% Time in GC" ReportAs="% Time in GC" />
  </Counters>
</Add>

アプリケーションをデプロイして暫く待つと、Metrics から設定したパフォーマンスカウンターが見れるようになっているはずです。

後はグラフを描画したり、Analytics でクエリを投げたりといろいろと活用できます。

f:id:shiba-yan:20180825224042p:plain

f:id:shiba-yan:20180825224050p:plain

動作を確認していた時に気が付いたのですが、昔は表示されていなかった Available Memory が最新の Application Insights をインストールすると確認出来るようになっていました。

少し前のパッケージでは警告が出ていたので、比較的最近に対応が行われていたようです。

f:id:shiba-yan:20180825224455p:plain

ちなみに現在プレビュー中の Web App for Containers の Windows 版では、現状は何故かカウンターの値が読めないです。報告済みなので GA までには何とかなると信じてはいます。

Windows Containers は Docker Image を作成する時には Container Administrator という管理者ユーザーとして動くので、GA すれば割と使い勝手は良くなると思います。