Azure App Service 和 ASP.NET 的應用程式監視

在您的 ASP 上啟用監視。在 Azure App 服務執行的以 NET 為基礎的 Web 應用程式現在比以往更容易。 您先前需要手動檢測您的應用程式。 現在最新的擴充功能/代理程序預設會內建在App Service 映射中。 本文將逐步引導您啟用 Azure 監視器 Application Insights 監視,並提供將大規模部署程式自動化的初步指引。

注意

已淘汰透過開發工具>擴充功能手動新增ApplicationInsights網站延伸模組。 這個擴充功能安裝方法相依於每個新版本的手動更新。 擴充功能的最新穩定版本現在 已預安裝 為App Service 映像的一部分。 這些檔案位於 d:\Program Files (x86)\SiteExtensions\ApplicationInsightsAgent 中,且會隨著每個穩定版本自動更新。 如果您遵循自動結構指示來啟用監視,它會自動為您移除已被取代的擴充功能。

如果偵測到自動結構監視和手動 SDK 型檢測,則只會接受手動檢測設定。 這種安排可防止傳送重複的數據。 若要深入瞭解,請參閱 疑難解答一節

注意

針對檢測金鑰擷取的支援將在 2025 年 3 月 31 日結束。 檢測金鑰擷取將會繼續運作,但我們不再提供該功能的更新或支援。 轉換至連接字串以利用新功能

啟用自動結構監視

如需支援自動結構案例的完整清單,請參閱 支援的環境、語言和資源提供者

注意

不支援和 urlCompression 的組合APPINSIGHTS_JAVASCRIPT_ENABLED。 如需詳細資訊,請參閱疑難解答一 中的說明。

  1. 在 App Service 的 Azure 控制面板中,選取 [Application Insights ]。 然後選取 [ 啟用]。

    此螢幕快照顯示已選取 [啟用] 的 [Application Insights] 索引標籤。

  2. 選擇建立新的資源,或為此應用程式選取現有的 Application Insights 資源。

    注意

    當您選取 [ 確定 ] 以建立新的資源時,系統會提示您選取 [ 套用監視設定]。 選取 [ 繼續] 將新的 Application Insights 資源連結至您的應用程式服務。 這樣做也會觸發 App Service 的重新啟動。

    顯示 [變更資源] 下拉式清單的螢幕快照。

  3. 指定要使用的資源之後,您可以選擇讓 Application Insights 針對您的應用程式收集每個平台的數據的方式。 ASP.NET 應用程式監視預設會開啟,並具有兩個不同的集合層級。

    此螢幕快照顯示已選取 [建立新資源] 的 Application Insights 網站延伸模組頁面。

    下表摘要說明針對每個路由收集的數據。

    資料 ASP.NET 基本集合 建議的集合 ASP.NET
    新增 CPU、記憶體和 I/O 使用趨勢 No Yes
    收集使用趨勢,並啟用從可用性結果到交易的相互關聯 Yes Yes
    收集主機程序未處理的例外狀況 Yes Yes
    在使用取樣時,改善 APM 計量在負載下的精確度 Yes Yes
    將不同要求/相依性界限間的微服務相互關聯 否 (僅限單一實例 APM 功能) Yes
  4. 若要設定取樣,您先前可以透過 applicationinsights.config 檔案來控制取樣,您現在可以透過具有對應前置 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor詞的應用程式設定與其互動。

    • 例如,若要變更初始取樣百分比,您可以建立的應用程式設定 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage 和 的值 100

    • 若要停用取樣,請將 設定 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage 為 的值 100

    • 支援的設定包括:

      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
    • 如需支援的自適性取樣遙測處理器設定和定義清單,請參閱程式 取樣檔

啟用用戶端監視

用戶端監視是選擇加入 ASP.NET。 若要啟用用戶端監視:

  1. 選取 [設定]>[組態]。

  2. 在 [應用程式設定] 底下,建立新的應用程式設定:

    • 名稱:輸入 APPINSIGHTS_JAVASCRIPT_ENABLED
    • :輸入 true
  3. 儲存設定並重新啟動您的應用程式。

若要停用用戶端監視,請從 [應用程式設定 ] 移除相關聯的索引鍵值組,或將值設定為 false

自動化監視

若要使用Application Insights 啟用遙測收集,只需要設定應用程式設定。

顯示 App Service 應用程式設定與 Application Insights 設定的螢幕快照。

應用程式設定定義

應用程式設定名稱 定義
ApplicationInsightsAgent_EXTENSION_VERSION 主要延伸模組,控制運行時間監視。 ~2
XDT_MicrosoftApplicationInsights_Mode 在預設模式中,只會啟用基本功能以確保最佳效能。 defaultrecommended
InstrumentationEngine_EXTENSION_VERSION 控制是否要開啟二進位重寫引擎 InstrumentationEngine 。 此設定具有效能影響,並影響冷啟動/啟動時間。 ~1
XDT_MicrosoftApplicationInsights_BaseExtensions 控制 SQL 和 Azure 數據表文字是否會隨著相依性呼叫一起擷取。 效能警告:應用程式冷啟動時間將受到影響。 這個設定需要 InstrumentationEngine ~1

搭配 Azure Resource Manager 的 App Service 應用程式設定

您可以使用 Azure Resource Manager 樣本來管理和設定 Azure App 服務 的應用程式設定。 當您使用 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"
          }
        }
      ]

如需 Resource Manager 範例,其中已針對 Application Insights 設定應用程式設定,此 範本 會很有説明。 具體來說,請參閱從第 238 行開始的 區段。

若要使用預設 Application Insights 設定建立 Resource Manager 範本,請開始程式,就像您要建立已啟用 Application Insights 的新 Web 應用程式一樣。

  1. 使用所需的 Web 應用程式資訊建立新的 App Service 資源。 在 [ 監視] 索引標籤上啟用 Application Insights。

  2. 選取 [檢閱 + 建立]。 然後選取 [ 下載自動化的範本]。

    顯示 App Service Web 應用程式建立功能表的螢幕快照。

    此選項會產生已設定所有必要設定的最新 Resource Manager 範本。

    顯示 App Service Web 應用程式範本的螢幕快照。

在下列範例中 AppMonitoredSite ,以您的網站名稱取代 的所有 實例:

注意

如果使用 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啟用應用程式監視,必須變更基礎應用程式設定。 下列範例會針對資源群組 AppMonitoredRG中名為 AppMonitoredSite 的網站啟用應用程式監視。 它會設定要傳送至 012345678-abcd-ef01-2345-6789abcd 檢測金鑰的數據。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

注意

如果使用 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 版升級會自動進行,而不需要執行任何額外的動作。 新的監視位會在背景傳遞至目標 App Service。 應用程式重新啟動時會挑選它們。

若要檢查您正在執行的擴充功能版本,請移至 https://yoursitename.scm.azurewebsites.net/ApplicationInsights

此螢幕快照顯示用來檢查您所執行之延伸模組版本的 URL 路徑。

從 1.0.0 版升級 - 2.6.5 版

從 2.8.9 版開始,會使用預安裝的網站延伸模組。 如果您使用的是舊版,您可以透過下列兩種方式之一進行更新:

  • 透過入口網站啟用來升級:即使您已安裝App Service的Application Insights擴充功能也一樣。 UI 只會顯示 [ 啟用] 按鈕。 在幕後,將會移除舊的私人網站延伸模組。

  • 透過PowerShell升級:

    1. 設定應用程式設定以啟用預安裝的網站延伸模組 ApplicationInsightsAgent。 如需詳細資訊,請參閱 透過PowerShell啟用。
    2. 手動移除名為 App Service 的 Application Insights 擴充功能的私人網站延伸模組。

如果升級是從 2.5.1 之前的版本完成,請檢查 Application Insights DLL 是否已從應用程式 bin 資料夾移除。 如需詳細資訊,請參閱疑難解答一節中的步驟。

疑難排解

注意

當您在 ASP.NET App Service 中使用運行時間建立 Web 應用程式時,它會將單一靜態 HTML 頁面部署為入門網站。 建議您不要針對預設範本的問題進行疑難解答。 在針對問題進行疑難解答之前,請先部署應用程式。

以下是 ASP 擴充功能/代理程式型監視的逐步疑難解答指南。在 App Service 上執行的 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 且正在執行。

      如果未執行,請遵循指示來 啟用ApplicationInsights監視

    • 確認狀態來源存在,看起來像 。Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json

      如果不存在類似的值,表示應用程式目前未執行或不受支援。 若要確保應用程式正在執行,請嘗試手動瀏覽應用程式 URL/應用程式端點,讓運行時間資訊可供使用。

    • 確認 為 IKeyExiststrue。 如果沒有,請將 檢測金鑰 GUID 新增 APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING 新增至應用程式設定。

    • 確認、 AppContainsDiagnosticSourceAssemblyAppContainsAspNetTelemetryCorrelationAssembly沒有專案AppAlreadyInstrumented

      如果有任何這些專案存在,請從您的應用程式中移除下列套件: Microsoft.ApplicationInsightsSystem.Diagnostics.DiagnosticSourceMicrosoft.AspNet.TelemetryCorrelation

使用 Web 應用程式部署的預設網站不支援自動用戶端監視

當您在 ASP.NET App Service 中使用運行時間建立 Web 應用程式時,它會將單一靜態 HTML 頁面部署為入門網站。 靜態網頁也會載入 ASP。IIS 中 NET 管理的網頁元件。 此頁面允許測試無程式代碼伺服器端監視,但不支援自動客戶端監視。

如果您想要在 App Service Web 應用程式中測試無程式代碼伺服器和用戶端監視 ASP.NET,建議您遵循官方指南來 建立 ASP.NET Framework Web 應用程式。 然後使用目前文章中的指示來啟用監視。

不支援APPINSIGHTS_JAVASCRIPT_ENABLED和urlCompression

如果您在內容編碼的情況下使用 APPINSIGHTS_JAVASCRIPT_ENABLED=true ,您可能會收到如下的錯誤:

  • 500 URL 重寫錯誤。
  • 500.53 URL 重寫模組錯誤,並出現「當 HTTP 回應的內容編碼時,無法套用輸出重寫規則」訊息。

發生錯誤的原因是 APPINSIGHTS_JAVASCRIPT_ENABLED 應用程式設定設定為 true ,且內容編碼同時存在。 這是尚不支援的案例。 因應措施是從您的應用程式設定中移除 APPINSIGHTS_JAVASCRIPT_ENABLED 。 不幸的是,如果仍需要用戶端/瀏覽器端 JavaScript 檢測,則網頁需要手動 SDK 參考。 請遵循使用 JavaScript SDK 手動檢測的指示。

如需 Application Insights 代理程式/延伸模組的最新資訊,請參閱 版本資訊

Application Insights 的標準計量與 Azure App 服務 計量之間的差異為何?

Application Insights 會收集對應用程式提出要求的遙測。 如果 WebApps/WebServer 中發生失敗,且要求未連線到使用者應用程式,Application Insights 就不會有任何遙測數據。

Application Insights 所計算的 serverresponsetime 持續時間不一定符合 Web Apps 觀察到的伺服器回應時間。 此行為是因為 Application Insights 只會計算要求實際到達使用者應用程式的持續時間。 如果要求在 WebServer 中停滯或排入佇列,等候時間會包含在 Web Apps 計量中,但不包含在 Application Insights 計量中。

測試應用程式主機與擷取服務之間的連線

應用程式深入剖析 SDK 和代理程式會傳送遙測,以擷取為 REST 呼叫擷取到我們擷取的端點。 您可以使用來自 PowerShell 或 curl 命令的原始 REST 用戶端,測試從 Web 伺服器或應用程式主機電腦到擷取服務端點的連線。 請參閱針對 Azure 監視器 Application Insights 中遺失的應用程式遙測進行疑難排解

不支援 PHP 和 WordPress

不支援 PHP 和 WordPress 網站。 目前沒有正式支援的 SDK/代理程式可監視這些工作負載的伺服器端。 您可以使用 JavaScript SDK,在 PHP 或 WordPress 網站上手動檢測用戶端交易,方法是將用戶端 JavaScript 新增至您的網頁。

下表提供這些值的意義、其根本原因和建議修正的更詳細說明。

問題值 說明 修正
AppAlreadyInstrumented:true 這個值表示擴充功能偵測到 SDK 的某些層面已存在於應用程式中,且將會退讓。 可能是因為、 Microsoft.AspNet.TelemetryCorrelationMicrosoft.ApplicationInsights的參考System.Diagnostics.DiagnosticSource 拿掉參考。 某些 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中。 可能的原因可能是意外移除值,或您忘記在自動化腳本中設定值。 請確定設定出現在 App Service 應用程式設定中。

升級 2.8.44 之後的 System.IO.FileNotFoundException

2.8.44 版的自動結構會將Application Insights SDK升級至2.20.0。 Application Insights SDK 透過 間接參考 System.Runtime.CompilerServices.Unsafe.dllSystem.Diagnostics.DiagnosticSource.dll。 如果應用程式具有 的系結重新System.Runtime.CompilerServices.Unsafe.dll導向,而且此連結庫不存在於應用程式資料夾中,可能會擲回 System.IO.FileNotFoundException

若要解決此問題,請從 web.config 檔案中移除 的系結重新導向專案 System.Runtime.CompilerServices.Unsafe.dll 。 如果應用程式想要使用 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_VERSION 設為 的值 2.8.37。 此設定會觸發 App Service 以使用舊的 Application Insights 擴充功能。 暫時緩和措施應該只當做過渡期使用。

版本資訊

如需最新的更新和 Bug 修正,請參閱版本資訊

下一步