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 でクエリを投げたりといろいろと活用できます。
動作を確認していた時に気が付いたのですが、昔は表示されていなかった Available Memory が最新の Application Insights をインストールすると確認出来るようになっていました。
少し前のパッケージでは警告が出ていたので、比較的最近に対応が行われていたようです。
ちなみに現在プレビュー中の Web App for Containers の Windows 版では、現状は何故かカウンターの値が読めないです。報告済みなので GA までには何とかなると信じてはいます。
Windows Containers は Docker Image を作成する時には Container Administrator という管理者ユーザーとして動くので、GA すれば割と使い勝手は良くなると思います。