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

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

Note

[開発ツール]>[拡張機能] を使用して Application Insights のサイト拡張機能を手動で追加することは、非推奨になりました。 この拡張機能のインストール方法は、新しい各バージョンの手動更新が必要でした。 拡張機能の最新の安定版リリースが、App Service イメージの一部としてプレインストールされるようになりました。 ファイルは d:\Program Files (x86)\SiteExtensions\ApplicationInsightsAgent にあり、安定版リリースごとに自動的に更新されます。 自動インストルメンテーションの手順に従って監視を有効にすると、非推奨の拡張機能は自動的に削除されます。

自動インストルメンテーションの監視と手動の SDK ベースのインストルメンテーションの両方が検出された場合は、手動のインストルメンテーション設定のみが受け付けられます。 この配置により、重複したデータが送信されるのを防ぐことができます。 詳細については、トラブルシューティングのセクションを参照してください。

Note

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

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

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

注意

APPINSIGHTS_JAVASCRIPT_ENABLEDurlCompression の組み合わせはサポートされていません。 詳細については、「トラブルシューティング」セクションの説明を参照してください。

  1. アプリ サービスの Azure コントロール パネルで [Application Insights] を選択します。 その後、[有効化] を選択します。

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

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

    Note

    [OK] を選んで新しいリソースを作成すると、[監視の設定を適用します] を選ぶように求めるメッセージが表示されます。 [続行] を選ぶと、新しい Application Insights リソースがアプリ サービスにリンクされます。 この操作で、アプリ サービスの再開もトリガーされます。

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

  3. 使用するリソースを指定した後、アプリケーションのプラットフォームごとのデータを Application Insights でどのように収集するかを選択できます。 ASP.NET アプリの監視は既定でオンであり、2 つの異なる収集レベルがあります。

    Application Insights サイト拡張機能ページを示すスクリーンショット。[新しいリソースの作成] が選択されています。

    次の表は、ルートごとに収集されるデータをまとめたものです。

    Data ASP.NET の基本の収集 ASP.NET の推奨される収集
    CPU、メモリ、および I/O の使用状況の傾向が追加されます いいえ はい
    使用状況の傾向が収集され、可用性の結果からトランザクションへの相関関係が有効になります はい はい
    ホスト プロセスによって処理されていない例外が収集されます はい はい
    負荷がかかっているときの APM メトリックの精度が上がります (サンプリングが使用される場合) はい はい
    要求/依存関係の境界を越えてマイクロサービスが相互に関連付けられます いいえ (シングルインスタンス APM 機能のみ) はい
  4. 以前は applicationinsights.config ファイルで制御できたサンプリングを構成する場合、[アプリケーション設定] で対応するプレフィックス MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor を使って操作できるようになりました。

    • たとえば、最初のサンプリング率を変更するには、MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage100 の値の [アプリケーション設定] を作成できます。

    • サンプリングを無効にするには、MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage100 の値に設定します。

    • 次の設定がサポートされます。

      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
    • サポートされるアダプティブ サンプリング テレメトリ プロセッサ設定と定義の一覧については、コードサンプリング ドキュメントを参照してください。

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

ASP.NET の場合、クライアント側の監視はオプトインです。 クライアント側の監視を有効にするには:

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

  2. [アプリケーション設定] で、新しいアプリケーション設定を作成します。

    • 名前: 「APPINSIGHTS_JAVASCRIPT_ENABLED」と入力します。
    • : 「true」と入力します。
  3. 設定を保存し、アプリを再起動します。

クライアント側の監視を無効にするには、[アプリケーション設定] から関連付けられているキーと値のペアを削除するか、値を false に設定します。

監視の自動化

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

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

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

アプリ設定の名前 定義
ApplicationInsightsAgent_EXTENSION_VERSION メインの拡張機能で、実行時の監視を制御します。 ~2
XDT_MicrosoftApplicationInsights_Mode 既定のモードでは、最適なパフォーマンスを保証するために、重要な機能のみが有効になります。 default または recommended
InstrumentationEngine_EXTENSION_VERSION バイナリ再書き込みエンジン InstrumentationEngine がオンにされるかどうかを制御します。 この設定は、パフォーマンスに影響し、コールド スタートと起動時間に影響を与えます。 ~1
XDT_MicrosoftApplicationInsights_BaseExtensions SQL と Azure テーブル テキストを依存関係呼び出しと共に取り込むかどうかを制御します。 パフォーマンスの警告: アプリケーションのコールド スタートアップ時間が影響を受けます。 この設定には InstrumentationEngine が必要です。 ~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 つの方法のいずれかを使って更新できます。

2.5.1 より前のバージョンからアップグレードする場合は、Application Insights の DLL がアプリケーションの bin フォルダーから削除されていることを確認します。 詳細については、「トラブルシューティング」セクションを参照してください。

トラブルシューティング

Note

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

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

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

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

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

    • Application Insights Extension StatusPre-Installed Site Extension, version 2.8.x.xxxx であり、動作していることを確認します。

      動作していない場合は、Application Insights の監視を有効にする手順を実行します。

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

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

    • IKeyExiststrue であることを確認します。 そうでない場合は、お使いのインストルメンテーション キー GUID を使って APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING をアプリケーション設定に追加します。

    • AppAlreadyInstrumentedAppContainsDiagnosticSourceAssembly、および AppContainsAspNetTelemetryCorrelationAssembly のエントリがないことを確認します。

      これらのエントリのいずれかが存在する場合は、アプリケーションから Microsoft.ApplicationInsightsSystem.Diagnostics.DiagnosticSource、および Microsoft.AspNet.TelemetryCorrelation のパッケージを削除します。

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

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

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

APPINSIGHTS_JAVASCRIPT_ENABLED と urlCompression はサポートされていません

コンテンツがエンコードされている場合に APPINSIGHTS_JAVASCRIPT_ENABLED=true を使うと、次のようなエラーが発生する可能性があります。

  • 500 URL 書き換えエラー。
  • 500.53 URL 書き換えモジュール エラー。"HTTP 応答のコンテンツがエンコード ('gzip') されている場合、アウトバウンド書き換えルールを適用することはできません" というメッセージを伴います。

エラーが発生するのは、APPINSIGHTS_JAVASCRIPT_ENABLED アプリケーション設定が true に設定されており、それと同時にコンテンツ エンコードも存在するためです。 このシナリオはまだサポートされていません。 回避策は、アプリケーション設定から APPINSIGHTS_JAVASCRIPT_ENABLED を削除することです。 残念ながら、クライアントとブラウザー側の JavaScript インストルメンテーションが必要な場合は、Web ページにも手動の SDK 参照が必要です。 JavaScript SDK での手動のインストルメンテーションに関する手順に従ってください。

Application Insights エージェントと拡張機能の最新情報については、リリース ノートのページを参照してください。

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 の一部の側面が既にアプリケーションに存在することが拡張機能で検出され、拡張機能がバックオフすることを示します。 System.Diagnostics.DiagnosticSourceMicrosoft.AspNet.TelemetryCorrelation、または Microsoft.ApplicationInsights への参照が原因の可能性があります。 これらの参照を削除します。 これらの参照の一部は、特定の Visual Studio テンプレートから既定で追加されます。 以前のバージョンの Visual Studio では、Microsoft.ApplicationInsights への参照が追加されている可能性があります。
AppAlreadyInstrumented:true この値は、以前のデプロイのアプリ フォルダーに上記の DLL が存在する場合でも発生する可能性があります。 アプリ フォルダーをクリーンし、これらの DLL が削除されたことを確認してください。 ローカル アプリの bin ディレクトリと App Service リソースの wwwroot ディレクトリの両方を確認します。 App Service Web アプリの wwwroot ディレクトリを調べるには、[高度なツール (Kudu)]>[デバッグ コンソール]>[CMD]>home\site\wwwroot を選びます。
AppContainsAspNetTelemetryCorrelationAssembly: true この値は、アプリケーション内の Microsoft.AspNet.TelemetryCorrelation への参照が拡張機能で検出され、拡張機能が停止されることを示します。 参照を削除します。
AppContainsDiagnosticSourceAssembly**:true この値は、アプリケーション内の System.Diagnostics.DiagnosticSource への参照が拡張機能で検出され、拡張機能が停止されることを示します。 ASP.NET の場合は、参照を削除します。
IKeyExists:false この値は、インストルメンテーション キーがアプリ設定 APPINSIGHTS_INSTRUMENTATIONKEY に存在しないことを示します。 原因として、誤って値を削除した場合、または Automation スクリプトで値を設定し忘れた場合が考えられます。 設定が App Service アプリケーション設定に存在することを確認します。

2.8.44 アップグレード後の System.IO.FileNotFoundException

2.8.44 バージョンの自動インストルメンテーションでは、Application Insights SDK が 2.20.0 にアップグレードされます。 Application Insights SDK には、System.Runtime.CompilerServices.Unsafe.dll から System.Diagnostics.DiagnosticSource.dll への間接的な参照があります。 アプリケーションに System.Runtime.CompilerServices.Unsafe.dll へのバインド リダイレクトがあり、このライブラリがアプリケーション フォルダーに存在しない場合、System.IO.FileNotFoundException がスローされる可能性があります。

この問題を解決するには、System.Runtime.CompilerServices.Unsafe.dll へのバインド リダイレクト エントリを web.config ファイルから削除します。 アプリケーションで System.Runtime.CompilerServices.Unsafe.dll を使用する場合は、バインド リダイレクトを次のように設定します。

<dependentAssembly>
	<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
	<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>

一時的な回避策として、アプリ設定 ApplicationInsightsAgent_EXTENSION_VERSION2.8.37 の値に設定できます。 この設定により、App Service で古い Application Insights 拡張機能の使用がトリガーされます。 一時的な軽減策は、暫定的な処置としてのみ使用するようにしてください。

リリース ノート

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

次のステップ