Azure App Service と ASP.NET Core のアプリケーション監視

Azure App Service 上で実行されている ASP.NET Core ベースの Web アプリケーションを、これまでより簡単に監視できるようになりました。 以前は、アプリを手動でインストルメント化する必要がありました。 現在は、最新の拡張機能とエージェントが App Service のイメージに既定で組み込まれます。 この記事では、Azure Monitor Application Insights の監視を有効にする手順について説明します。 また、大規模なデプロイのプロセスを自動化するための予備的なガイダンスも提供します。

注意

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

自動インストルメンテーション監視を有効にする

サポートされている自動インストルメンテーション シナリオの全一覧については、「サポートされている環境、言語、リソース プロバイダー」を参照してください。

重要

Windows での自動インストルメンテーションがサポートされているのは、.NET Core の長期サポートのみです。

自己完結型デプロイのトリミングサポートされていません。 代わりに、コードを介した手動インストルメンテーションを使用してください。

注意

自動インストルメンテーションは、2021 年 10 月より前は "コード不要のアタッチ" と呼ばれていました。

App Service リソースを使用する Application Insights の設定を始めるには、次の「監視を有効にする」セクションをご覧ください。

監視を有効にする

  1. アプリ サービスの左側のペインで [Application Insights] を選びます。 その後、[有効化] を選択します。

    [有効] が選ばれている [Application Insights] タブを示すスクリーンショット。

  2. このアプリケーション用に、新しいリソースを作成するか、既存の Application Insights リソースを選びます。

    注意

    [OK] を選んで新しいリソースを作成すると、[監視の設定を適用します] というプロンプトが表示されます。 [続行] を選ぶと、新しい Application Insights リソースがアプリ サービスにリンクされます。 その後、アプリ サービスが再起動します。

    [リソースの変更] ドロップダウンを示すスクリーンショット。

  3. 使用するリソースを指定した後、アプリケーションのプラットフォームごとのデータを Application Insights でどのように収集するかを選択できます。 ASP.NET Core の収集オプションは、[推奨] または [無効] です。

    アプリケーションのインストルメント化のセクションを示すスクリーンショット。

クライアント側の監視を有効にする

アプリの設定 APPINSIGHTS_JAVASCRIPT_ENABLED の有無に関係なく、[推奨] 収集の ASP.NET Core アプリではクライアント側の監視が既定で有効になります。

クライアント側の監視を無効にする場合:

  1. [設定]>[構成] を選択します。

  2. [アプリケーション設定] で、次の情報を使って新しいアプリケーション設定を作成します。

    • 名前: APPINSIGHTS_JAVASCRIPT_ENABLED
    • : false
  3. 設定を保存します。 アプリを再起動します。

監視の自動化

Application Insights でのテレメトリ収集を有効にするのに必要なのは、アプリケーション設定を行うことだけです。

Application Insights の設定が表示された App Service のアプリケーション設定を示すスクリーンショット。

アプリケーション設定の定義

アプリ設定の名前 定義
ApplicationInsightsAgent_EXTENSION_VERSION メインの拡張機能で、実行時の監視を制御します。 ~2 (Windows の場合) または ~3 (Linux の場合)
XDT_MicrosoftApplicationInsights_Mode 既定のモードでは、最適なパフォーマンスを保証するために、重要な機能のみが有効になります。 disabled または recommended
XDT_MicrosoftApplicationInsights_PreemptSdk ASP.NET Core アプリの場合のみ。 Application Insights SDK で相互運用 (Interop) を有効にします。 拡張機能と SDK を並行して読み込み、それを使ってテレメトリを送信します。 (Application Insights SDK を無効にします。) 1

Azure Resource Manager を使用した App Service のアプリケーション設定

Azure App Service のアプリケーション設定は、Azure Resource Manager テンプレートを使用して管理および構成できます。 この手法は、Resource Manager オートメーションで新しい App Service リソースをデプロイするとき、または既存のリソースの設定を変更するときに使用できます。

App Service リソースに使われるアプリケーション設定 JSON の基本構造を次に示します。

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

アプリケーション設定が Application Insights 用に構成されている Resource Manager テンプレートの例として、このテンプレートが役に立ちます。 具体的には、238 行目から始まるセクションを参照してください。

既定の Application Insights の設定で Resource Manager テンプレートを作成するには、Application Insights を有効にして新しい Web アプリを作成する場合のようにプロセスを開始します。

  1. 目的の Web アプリ情報を含む新しい App Service リソースを作成します。 [監視] タブで Application Insights を有効にします。

  2. [Review + create](レビュー + 作成) を選択します。 次に、[オートメーション用のテンプレートをダウンロードする] を選択します。

    App Service Web アプリの作成メニューを示すスクリーンショット。

    このオプションにより、必要な設定がすべて設定済みの、最新の Resource Manager テンプレートが生成されます。

    App Service Web アプリ テンプレートを示すスクリーンショット。

次の例で、すべての AppMonitoredSite をサイト名に置き換えてください。

Note

Windows を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION~2 に設定します。 Linux を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION~3 に設定します。

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

PowerShell を使用して有効にする

PowerShell を使用してアプリケーションの監視を有効にするために必要な操作は、基になるアプリケーション設定の変更のみです。 次の例では、リソース グループ AppMonitoredRGAppMonitoredSite という Web サイトのアプリケーション監視を有効にします。 これによって、012345678-abcd-ef01-2345-6789abcd インストルメンテーション キーに送信されるようにデータが構成されます。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Note

Windows を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION を ~2 に設定します。 Linux を使用している場合は、ApplicationInsightsAgent_EXTENSION_VERSION を ~3 に設定します。

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

監視拡張機能またはエージェントをアップグレードする - .NET

監視拡張機能とエージェントをアップグレードするには、次のセクションの手順のようにします。

バージョン 2.8.9 以降からアップグレードする

バージョン 2.8.9 からのアップグレードは自動的に実行され、追加の操作は必要ありません。 新しい監視ビットは、バックグラウンドでターゲット アプリ サービスに配信され、アプリケーションの再起動時に取得されます。

実行している拡張機能のバージョンを確認するには、https://yoursitename.scm.azurewebsites.net/ApplicationInsights に移動します。

実行している拡張機能のバージョンを確認するための URL パスを示すスクリーンショット。

バージョン 1.0.0 - 2.6.5 からのアップグレード

バージョン 2.8.9 以降では、プレインストールされたサイト拡張機能が使われます。 以前のバージョンを使用している場合は、次の 2 つの方法のいずれかを使用して更新できます。

  • ポータルから有効にしてアップグレードする: App Service 用の Application Insights 拡張機能がインストールされている場合でも、UI には [有効] ボタンのみが表示されます。 バックグラウンドで、古いプライベート サイト拡張機能が削除されます。

  • PowerShell を使用してアップグレードする:

    1. プレインストールされたサイト拡張機能 ApplicationInsightsAgent を有効にするようにアプリケーション設定を指定します。 詳しくは、「PowerShell を使用して有効にする」をご覧ください。
    2. Application Insights extension for Azure App Service (Azure App Service 用 Application Insights 拡張機能) という名前のプライベート サイト拡張機能を手動で削除します。

2.5.1 より前のバージョンからアップグレードする場合は、ApplicationInsights DLL がアプリケーションの bin フォルダーから削除されたことを確認します。 詳しくは、トラブルシューティングの手順に関するセクションをご覧ください。

トラブルシューティング

Note

App Service で ASP.NET Core ランタイムを使って Web アプリを作成すると、1 つの静的な HTML ページがスターター Web サイトとしてデプロイされます。 既定のテンプレートで問題のトラブルシューティングを行うことはお勧め "しません"。 問題のトラブルシューティングを行う前に、アプリケーションをデプロイしてください。

以下は、App Service 上で実行されている ASP.NET Core ベースのアプリケーションの拡張機能とエージェント ベースの監視についての、手順を追って説明するトラブルシューティング ガイドです。

  1. ApplicationInsightsAgent_EXTENSION_VERSION アプリ設定が ~2 の値に設定されていることを確認します。

  2. https://yoursitename.scm.azurewebsites.net/ApplicationInsights を参照します。

    結果ページの上のリンクを示すスクリーンショット。

    • [Application Insights Extension Status] (Application Insights 拡張機能の状態)Pre-Installed Site Extension, version 2.8.x.xxxx, is running. であることを確認します

      実行されていない場合は、Application Insights の監視の有効化に関するセクションの手順のようにします。

    • 状態ソースが存在し、Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json のようになっていることを確認します。

      似た値が存在しない場合は、アプリケーションが現在実行されていないか、サポートされていないことを意味します。 アプリケーションが実行されていることを確認するには、手動でアプリケーションの URL/アプリケーション エンドポイントにアクセスしてみます。これで、ランタイム情報を使用できるようになります。

    • IKeyExistsTrue であることを確認します。 False の場合は、ご自身の ikey GUID を指定した APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING をアプリケーション設定に追加します。

    • アプリケーションが Application Insights パッケージを参照している場合、App Service 統合の有効化が行われず、データが Application Insights に表示されない場合があります。 たとえば、ASP.NET Core SDK を使用してアプリを以前にインストルメント化していたり、インストルメント化を試みていたりした場合などです。 この問題を解決するには、ポータルで [Interop with Application Insights SDK] (Application Insights SDK との相互運用) を有効にします。 Application Insights にデータが表示され始めます。

      重要

      この機能はプレビュー状態です。

      有効にされた相互運用の設定を示すスクリーンショット。

      これで、Application Insights SDK がもともと使われていたか、使われようとしていた場合でも、コードレス アプローチを使ってデータが送信されるようになります。

      重要

      アプリケーションで Application Insights SDK を使ってテレメトリが送信されていた場合、テレメトリは無効になります。 つまり、カスタム テレメトリ (Track*() メソッドなど) とカスタム設定 (サンプリングなど) は無効になります。

Web アプリでデプロイされた既定の Web サイトでは、クライアント側の自動監視はサポートされません

App Service で ASP.NET Core ランタイムを使って Web アプリを作成すると、1 つの静的な HTML ページがスターター Web サイトとしてデプロイされます。 静的な Web ページには、IIS の ASP.NET で管理された Web パーツも読み込まれます。 この動作により、サーバー側のコードレス監視をテストすることはできますが、クライアント側の自動監視はサポートされません。

App Service Web アプリで ASP.NET Core のサーバーとクライアント側のコードレス監視をテストする場合は、ASP.NET Core Web アプリの作成に関する公式のガイドに従うことをお勧めします。 次に、現在の記事の手順を使用して監視を有効にします。

Application Insights の標準メトリックと Azure App Service メトリックの違い

Application Insights では、アプリケーションに対して行われた要求のテレメトリを収集します。 WebApps/WebServer でエラーが発生し、要求がユーザー アプリケーションに到達しなかった場合、それに関するテレメトリは Application Insights に含まれません。

Application Insights によって計算された serverresponsetime の期間は、Web Apps から見たサーバー応答時間とは必ずしも一致しません。 この動作は、Application Insights では、要求がユーザー アプリケーションに実際に到達した場合の期間のみがカウントされるためです。 WebServer で要求の送信が滞った場合やキューに入れられた場合、その待機時間は、Web Apps のメトリックに含まれますが Application Insights のメトリックには含まれません。

アプリケーション ホストとインジェスト サービスの間の接続をテストする

Application Insights SDK とエージェントからテレメトリが送信され、インジェスト エンドポイントへの REST 呼び出しとして取り込まれます。 Web サーバーまたはアプリケーション ホスト マシンからインジェスト サービス エンドポイントへの接続は、PowerShell の生の REST クライアントを使用するか、curl コマンドを使用してテストできます。 「Azure Monitor Application Insights でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。

PHP および WordPress はサポートされていない

PHP および WordPress サイトはサポートされていません。 現時点では、これらのワークロードをサーバー側で監視するために正式にサポートされている SDK/エージェントはありません。 クライアント側の JavaScript を Web ページに追加することで PHP または WordPress サイトでクライアント側のトランザクションを手動でインストルメント化するには、JavaScript SDK を使います。

次の表は、これらの値の意味、その根本的な原因、推奨される修正について詳細に説明したものです。

問題の値 説明 Fix
AppAlreadyInstrumented:true この値は、SDK の一部の側面が既にアプリケーションに存在することが拡張機能で検出され、拡張機能がバックオフすることを示します。 Microsoft.ApplicationInsights.AspNetCore または Microsoft.ApplicationInsights への参照が原因である可能性があります。 これらの参照を削除します。 これらの参照の一部は、特定の Visual Studio テンプレートから既定で追加されます。 古いバージョンの Visual Studio は Microsoft.ApplicationInsights を参照します。
AppAlreadyInstrumented:true この値は、以前のデプロイのアプリ フォルダーに Microsoft.ApplicationsInsights DLL が存在する場合にも発生する可能性があります。 アプリ フォルダーをクリーンし、これらの DLL が削除されたことを確認してください。 ローカル アプリの bin ディレクトリと App Service の wwwroot ディレクトリの両方を確認します。 (App Service Web アプリの wwwroot ディレクトリを調べるには、次のように選びます: [高度なツール (Kudu)]>[デバッグ コンソール]>[CMD]>home\site\wwwroot)。
IKeyExists:false この値は、インストルメンテーション キーがアプリ設定 APPINSIGHTS_INSTRUMENTATIONKEY に存在しないことを示します。 考えられる原因は、誤って値を削除したり、オートメーション スクリプトで値を設定し忘れたりした場合などです。 設定が App Service アプリケーション設定に存在することを確認します。

リリース ノート

最新の更新プログラムとバグ修正については、リリース ノートを参照してください。

次のステップ