shuhelohelo’s blog

Xamarin.Forms多めです.

Application Insightsを使ったアプリケーション監視

WebアプリやWeb API, サーバーレスアーキテクチャなどの利用状況,状態を知るのは重要.

どれだけリクエストが来ていて,サーバーのCPU使用率がいくつで,どれだけ失敗しているかなど,データをとって分析して改善,改良する.

そのためのサービスがAzureに用意されていて,それがApplication Insights.

これを使うととても簡単にWebアプリケーションなどのパフォーマンス,利用状況を監視することができる.

今回はすでにあるApp Serviceに対して,Application Insightsを有効にする手順をメモとして残す.

Azureポータルで設定する

Azureポータルから,Application Insightsを組み込みたいリソースのページを開く.

今回対象とするのはパスワードをランダムに生成する自作Web APIで名前はPasswordGenerateService.

すると,Application Insightsというパネルがあるので,クリック.

f:id:shuhelohelo:20191114201507p:plain

次のページで有効にするボタンを押す.

f:id:shuhelohelo:20191114201645p:plain

新しいリソースを追加する.場所は東日本にした.

f:id:shuhelohelo:20191114201836p:plain

下にスクロールすると,アプリケーションのインストルメンテーションという領域があるので,ここで必要な設定をオン・オフする.

SQLを使わないので,「SQLコマンド」だけOFFにした.

f:id:shuhelohelo:20191114202004p:plain

最後に「適用」を押して,アプリが再起動される.しばらく待つ.

f:id:shuhelohelo:20191114202207p:plain

Application Insightsリソースを開いてみると,以下のようにアプリケーションがApplication Insightsに接続されていることが表示されます.

f:id:shuhelohelo:20191114202524p:plain

これでApplication Insightsが有効になり,サーバーの状態をダッシュボードでグラフで確認することができるようになる.

でも,ダッシュボードグラフはいくら待っても何の変化もない.

なぜだろう.

今回のアプリは.NET Core 3.1 previewを使ったWeb API.

以下のドキュメントによると,3.1はサポートされていないので,手動で導入する必要があるとのこと.

docs.microsoft.com

次のバージョンの .NET Core がサポートされます。
ASP.NET Core 2.0、ASP.NET Core 2.1、ASP.NET Core 2.2

Visual Studioにおける手動での導入

手動導入の方法の中で一番お手軽なのが,Visual Studioを使った方法.

[プロジェクト] > [Application Insights Telemetry の追加] を選択

f:id:shuhelohelo:20191114203613p:plain

「Get Started」を押す.

f:id:shuhelohelo:20191114203914p:plain

Azure Portalで作成したApplication Insightsリソースを選択して「Register」を押す.

f:id:shuhelohelo:20191114204114p:plain

完了すると,以下の画面が表示される.

f:id:shuhelohelo:20191114204230p:plain

これで,appsettings.jsonファイルに "InstrumentationKey": ****-****.....というApplication Insightsに接続するためのキーが記述される.

アプリケーションはこのキーを使用してApplication Insightsに接続してデータを送る.

NugetからMicrosoft.ApplicationInsights.AspNetCoreをインストールする.

f:id:shuhelohelo:20191114204439p:plain

Startup.csのConfigureServicesメソッドに以下を追加する.

services.AddApplicationInsightsTelemetry();

Visual Studioを使わずに導入する

Visual Studioを使わない場合は,appsettings.jsonを直接編集する.

Application Insightsリソースのページの右上にインストルメンテーションキーがあるのでコピーする.

f:id:shuhelohelo:20191114205211p:plain

以下の形式で***の部分にAzureポータルでコピーしたインストルメンテーションキーを貼り付ける.

  "ApplicationInsights": {
    "InstrumentationKey": "*********-****-****-****-************"
  }

Startup.csのConfigureServicesへの変更はもちろんVisual Studioのときと同じ.

使ってみる

ここまでの設定でApplication Insightsが有効になり,アプリケーション実行中はアプリケーションの様々な情報がApplication Insightsに送られていくようになる.

これはApplication Insightsに接続さえできればAzureにデプロイされていようがPC上でデバッグ実行中だろうが動作する.

Azure PortalでApplication Insightsリソースのページを開き,ライブメトリックストリームという機能を使うと,リアルタイムでアプリケーションのアクセス状態がわかる.

このライブメトリックストリームを開きながら,アプリケーションを実行してリクエストを送ると以下のようにリアルタイムにグラフが変化する.

f:id:shuhelohelo:20191114210110p:plain