在 .NET、Node.js、Python 和 Java 應用程式的 Azure App 服務 中啟用應用程式監視
自動結構也稱為運行時間監視,是啟用Application Insights以進行 Azure App 服務 最簡單的方式,而不需要任何程式代碼變更或進階設定。 根據您的特定案例,評估您是否需要透過 手動檢測進行更進階的監視。
啟用 Application Insights
重要
如果偵測到自動結構監視和手動 SDK 型檢測,則只會接受手動檢測設定。 這樣的安排可防止傳送重複資料。 若要深入瞭解,請參閱 疑難解答。
Azure 入口網站 中的自動結構
在 App Service 的左側導覽功能表中選取 [Application Insights ],然後選取 [ 啟用]。
建立新的資源,或選取此應用程式現有的 Application Insights 資源。
注意
當您選取 [確定] 來建立新資源時,系統會提示您 [套用監視設定]。 選取 [繼續] 會將新的 Application Insights 資源連結到應用程式服務。 應用程式服務接著會重新啟動。
在指定要使用的資源之後,您可以選擇要如何讓 Application Insights 收集每個應用程式平台的資料。 ASP.NET Core 集合選項為建議或停用。
手動升級監視擴充功能/代理程式
從 2.8.9 版和更新版本進行升級
從 2.8.9 版的升級會自動進行,無須執行任何其他動作。 新的監視位會在背景傳遞至目標 App Service,並在應用程式重新啟動時挑選。
若要確認您正在執行的擴充功能版本,請移至 https://yoursitename.scm.azurewebsites.net/ApplicationInsights
。
從 1.0.0 版至 2.6.5 版進行升級
從 2.8.9 版開始,會使用預先安裝的網站延伸模組。 如果您使用舊版,可以透過下列兩種方式之一進行更新:
透過 Azure 入口網站 啟用來升級:即使您已安裝 App Service 的 Application Insights 擴充功能,UI 仍只會顯示 [啟用] 按鈕。 在幕後,會移除舊的私人網站延伸模組。
-
- 進行應用程式設定,來啟用預先安裝的網站延伸模組
ApplicationInsightsAgent
。 如需詳細資訊,請參閱透過 PowerShell 啟用。 - 手動為 Azure App Service 移除名為 Application Insights 延伸模組的私人網站延伸模組。
- 進行應用程式設定,來啟用預先安裝的網站延伸模組
如果升級是從 2.5.1 之前的版本完成,請檢查 ApplicationInsights
DLL 是否已從應用程式 bin 資料夾移除。 如需詳細資訊,請參閱疑難排解。
設定監視擴充功能/代理程式
我們目前不提供選項來設定 ASP.NET Core 的監視擴充功能。
啟用用戶端監視
使用 [建議] 收集的 ASP.NET Core 應用程式會依預設啟用用戶端監視,無論應用程式設定 APPINSIGHTS_JAVASCRIPT_ENABLED
是否存在。
如果您想要停用用戶端監視:
選取 [設定]>[組態]。
在 [應用程式設定] 底下,使用下列資訊建立 [新增應用程式設定]:
- 名稱:
APPINSIGHTS_JAVASCRIPT_ENABLED
- 值:
false
- 名稱:
儲存設定。 重新啟動您的應用程式。
自動監視
若要使用 Application Insights 啟用遙測收集,只需要設定下列應用程式設定:
應用程式設定定義
應用程式設定名稱 | 定義 | 值 |
---|---|---|
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 Resource Manager 範本,來管理和設定 Azure App Service 的應用程式設定。 當您使用 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 資源並連結到您新建立的 App Service 資源
若要使用預設 Application Insights 設定來建立 Resource Manager 範本,請開始該流程,就像您要建立已啟用 Application Insights 的新 Web 應用程式。
使用您想要的 Web 應用程式資訊建立新的 App Service資源。 在 [監視] 索引標籤上啟用 Application Insights。
選取 [檢閱 + 建立]。 接著,選取 [下載自動化的範本]。
此選項會產生已設定所有必要設定的最新 Resource Manager 範本。
在下列範例中,將 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
。 如果使用 Linus,請將 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
常見問題集
本節提供常見問題的答案。
Application Insights 在我的專案中修改什麼?
詳細資料視專案類型而定。 下列清單是 Web 應用程式的範例。
將檔案新增至您的專案:
- ApplicationInsights.config
- ai.js
安裝 NuGet 套件:
- Application Insights API:核心 API
- 適用於 Web 應用程式的 Application Insights API:用來從伺服器傳送遙測
- 適用於 JavaScript 應用程式的 Application Insights API:用來從用戶端傳送遙測
在套件中包含元件:
- Microsoft.ApplicationInsights
- Microsoft.ApplicationInsights.Platform
將專案插入:
- Web.config
- packages.config
將代碼段插入用戶端和伺服器程序代碼,以使用Application Insights資源識別碼將其初始化。 例如,在 MVC 應用程式中,會將程式碼插入至主頁面 Views/Shared/Layout.cshtml。 僅針對新專案,您可以 手動將 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 計量中。
疑難排解
測試應用程式主機與擷取服務之間的連線能力
應用程式深入剖析 SDK 和代理程式會傳送遙測,以擷取為 REST 呼叫擷取到我們擷取的端點。 您可以使用來自 PowerShell 或 curl 命令的原始 REST 用戶端,測試從 Web 伺服器或應用程式主機電腦到擷取服務端點的連線。 請參閱針對 Azure 監視器 Application Insights 中遺失的應用程式遙測進行疑難排解。
注意
當您在 App Service 中使用 ASP.NET Core
執行階段建立 Web 應用程式時,此項目會將單一靜態 HTML 頁面部署為入門網站。 不建議針對預設範本的問題進行疑難排解。 針對問題進行疑難排解之前,請先部署應用程式。
遺失遙測資料
Windows
檢查
ApplicationInsightsAgent_EXTENSION_VERSION
應用程式的設定是否設為~2
值。瀏覽至
https://yoursitename.scm.azurewebsites.net/ApplicationInsights
。確認 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/應用程式端點,讓運行時間資訊可供使用。
確認 IKeyExists 為
True
。 若為False
,請透過 ikey GUID 將APPINSIGHTS_INSTRUMENTATIONKEY
和APPLICATIONINSIGHTS_CONNECTION_STRING
新增至應用程式設定。如果您的應用程式參考任何 Application Insights 套件,啟用 App Service 整合可能不會生效,而且數據可能不會出現在 Application Insights 中。 例如,如果您先前已檢測或嘗試使用 ASP.NET Core SDK 檢測您的應用程式。 若要修正此問題,請在 Azure 入口網站 中,使用 Application Insights SDK 開啟 Interop。
重要
這項功能為預覽狀態。
即使最初使用 Application Insights SDK 或嘗試使用 Application Insights SDK,數據還是會使用無程式碼方法傳送。
重要
如果應用程式使用 Application Insights SDK 傳送任何遙測,則會停用遙測。 換句話說,自訂遙測 (例如,任何
Track*()
方法) 和自訂設定 (例如取樣) 都會停用。
Linux
檢查
ApplicationInsightsAgent_EXTENSION_VERSION
應用程式的設定是否設為~3
值。瀏覽至
https://your site name.scm.azurewebsites.net/ApplicationInsights
。在此網站中,確認:
- 狀態來源存在並如下所示:
Status source /var/log/applicationinsights/status_abcde1234567_89_0.json
。 - 值
Auto-Instrumentation enabled successfully
隨即顯示。 若不存在類似值,則表示應用程式未執行或不受支援。 若要確保應用程式正在執行,請嘗試手動瀏覽應用程式 URL/應用程式端點,讓運行時間資訊可供使用。 - IKeyExists 是
True
。 若為False
,請透過 ikey GUID 將APPINSIGHTS_INSTRUMENTATIONKEY
和APPLICATIONINSIGHTS_CONNECTION_STRING
新增至應用程式設定。
- 狀態來源存在並如下所示:
部署 Web 應用程式的預設網站不支援自動用戶端監視
當您在 App Service 中使用 ASP.NET Core 執行階段建立 Web 應用程式時,此項目會將單一靜態 HTML 頁面部署為入門網站。 靜態網頁也會在 IIS 中載入 ASP.NET 受控網頁組件。 此行為可讓您測試伺服器端的無程式碼監視,但不支援用戶端自動監視。
如果您想要在 App Service Web 應用程式中測試無程式代碼伺服器和用戶端監視 ASP.NET Core,建議您遵循官方指南來 建立 ASP.NET Core Web 應用程式。 之後,請使用目前文章中的指示來啟用監視。
不支援 PHP 和 WordPress
不支援 PHP 和 WordPress 網站。 目前沒有正式支援的 SDK/代理程式可監視上述工作負載的伺服器端。 若要追蹤 PHP 或 WordPress 網站上的用戶端交易,請使用 JavaScript SDK 將用戶端 JavaScript 新增至您的網頁。
下表提供這些值代表的意義、其基礎原因和建議修正的說明。
問題值 | 說明 | Fix |
---|---|---|
AppAlreadyInstrumented:true |
這個值表示延伸模組偵測到應用程式中已存在的 SDK 的某些層面,並加以回復。 或 Microsoft.ApplicationInsights 的參考Microsoft.ApplicationInsights.AspNetCore 可能會導致這個值。 |
請移除該參考。 依預設,特定 Visual Studio 範本會新增某些參考。 舊版的 Visual Studio 參考 Microsoft.ApplicationInsights 。 |
AppAlreadyInstrumented:true |
在先前部署的應用程式資料夾中,DLL 的存在 Microsoft.ApplicationsInsights 也可能導致此值。 |
清除應用程式資料夾,以確保已移除這些 DLL。 檢查本地應用程式的 bin 目錄,以及 App Service 上的 wwwroot 目錄。 (若要檢查 App Service Web 應用程式的 wwwroot 目錄:選取 [進階工具 (Kudu)] > [偵錯主控台] > [CMD] > home\site\wwwroot)。 |
IKeyExists:false |
此值表示應用程式設定 APPINSIGHTS_INSTRUMENTATIONKEY 中沒有檢測金鑰。 可能的原因包括意外移除值或忘記在自動化指令碼中設定值。 |
請確定設定存在於 App Service 應用程式設定中。 |
版本資訊
本節包含以 Application Insights 進行運行時間檢測的 ANT 版本為基礎的 Azure App 服務 版本資訊。
若要尋找您目前使用的延伸模組版本,請移至 https://<yoursitename>.scm.azurewebsites.net/ApplicationInsights
。
2.8.44
2.8.43
- 將 .NET/.NET Core、Java 和Node.js套件分成不同的 App Service Windows 網站延伸模組。
2.8.42
- 已使用 .NET 啟動攔截新增獨立部署和 .NET 6.0 支援。
2.8.41
- 已移除支援外版本 (2.1)。 支援的版本是 3.1 和 5.0。
2.8.39
- 已新增 .NET Core 5.0 支援。
2.8.38
- 已移除支援外版本(2.0、2.2、3.0)。 支援的版本是 2.1 和 3.1。
2.8.37
- AppSvc Windows 延伸模組:讓 .NET Core 與任何版本的 System.Diagnostics.DiagnosticSource.dll 搭配使用。
2.8.36
- AppSvc Windows 延伸模組:在 .NET Core 中啟用與 AI SDK 的 Inter-op。
2.8.35
- AppSvc Windows 延伸模組:已新增 .NET Core 3.1 支援。
2.8.33
- .NET、.NET Core、Java 和 Node.js 代理程式與 Windows 延伸模組:主權雲端支援。 連接字串可以用來將資料傳送至主權雲端。
2.8.31
- ASP.NET Core 代理程式已修正 Application Insights SDK 的問題。 若執行階段已載入不正確的
System.Diagnostics.DiagnosticSource.dll
版本,則無程式碼延伸模組不會損毀應用程式,並且會回復。 若要修正此問題,客戶應該從 bin 資料夾中移除System.Diagnostics.DiagnosticSource.dll
,或設定ApplicationInsightsAgent_EXTENSIONVERSION=2.8.24
以使用舊版的延伸模組。 若未啟用,則不會啟用應用程式監視。
2.8.26
已修正與更新的Application Insights SDK相關的問題。 若 bin 資料夾中已有 ApplicationInsights.dll,則代理程式不會嘗試載入
AiHostingStartup
。 這可解決透過 Assembly<AiHostingStartup>.GetTypes() 反映的相關問題。已知問題:載入另一個
DiagnosticSource
dll 版本時,可能會擲回例外狀況System.IO.FileLoadException: Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
。 例如,若System.Diagnostics.DiagnosticSource.dll
存在於發佈資料夾,則可能會發生這種情況。 作為緩和措施,請在應用程式服務中設定應用程式設定,以使用舊版延伸模組:ApplicationInsightsAgent_EXTENSIONVERSION=2.8.24。
2.8.24
- 重新封裝 2.8.21 版。
2.8.23
已新增 ASP.NET Core 3.0 無程式碼監視支援。
已將 ASP.NET Core SDK 更新為 2.8.0 以供執行階段 2.1、2.2 和 3.0 版使用。 以 .NET Core 2.0 為目標的應用程式會繼續使用 SDK 2.1.1。
2.8.14
- 已針對目標為 .NET Core 2.1、2.2 的應用程式,將 ASP.NET Core SDK 版本從 2.3.0 更新為最新版本 (2.6.1)。 以 .NET Core 2.0 為目標的應用程式會繼續使用 SDK 2.1.1。
2.8.12
ASP.NET Core 2.2 應用程式支援。
已修正 ASP.NET Core 延伸模組中的錯誤 (bug),而此延伸模組即使在已經使用 SDK 檢測應用程式之後仍導致 SDK 插入。 針對 2.1 和 2.2 應用程式,應用程式資料夾中 ApplicationInsights.dll 的存在與否現在會導致延伸模組回復。 針對 2.0 應用程式,只有在 ApplicationInsights 已啟用
UseApplicationInsights()
呼叫時,才會回復延伸模組。永久修正 ASP.NET Core 應用程式的不完整 HTML 回應。 此修正程式現在已擴充為適用於 .NET Core 2.2 應用程式。
已新增針對 ASP.NET Core 應用程式關閉 JavaScript 插入的支援 (
APPINSIGHTS_JAVASCRIPT_ENABLED=false appsetting
)。 針對 ASP.NET Core,除非明確關閉,否則 JavaScript 插入預設為「退出」模式。 (預設設定是保留目前行為。)已修正即使不存在 ikey 也會導致插入的 ASP.NET Core 延伸模組錯誤 (bug)。
已修正 SDK 版本前置詞邏輯中導致遙測中 SDK 版本不正確的錯誤。
已新增 ASP.NET Core 應用程式的 SDK 版本前置詞,以識別遙測的收集方式。
已修正 SCM - ApplicationInsights 頁面,以正確顯示預安裝延伸模組的版本。
2.8.10
- 修正 ASP.NET Core 應用程式的不完整 HTML 回應。
下一步
- 在即時應用程式上啟用 Azure App 服務 應用程式的 .NET Profiler。
- 能夠讓 Azure 診斷 傳送至 Application Insights。
- 監視服務健康狀態計量,確保您的服務可用且回應正常。
- 每當發生作業事件或計量超過臨界值時,接收警示通知。
- 設定應用程式的可用性測試 。