針對啟用 Application Insights 快照偵錯工具或檢視快照集的問題進行疑難排解
如果您為應用程式啟用 Application Insights 快照偵錯工具,但看不到例外狀況的快照集,您可以使用這些指示進行疑難排解。
不會產生快照集有許多不同的原因。 您可以從執行快照集健康情況檢查開始,以識別一些可能的常見原因。
不支援的案例
您可以在下面找到不支援 Snapshot Collector 的案例:
案例 | 副作用 | 建議 |
---|---|---|
當您直接在應用程式中使用 Snapshot Collector SDK (.csproj),並且已啟用進階選項 [Interop] 時。 | 本機 Application Insights SDK (包括 Snapshot Collector 遙測資料) 將會遺失,因此不會提供快照集。 您的應用程式可能會在啟動時當機,並顯示 System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor 如需 Application Insights 功能 "Interop" 的詳細資訊,請參閱文件。 |
如果您使用進階選項 [Interop],請使用無程式碼 Snapshot Collector 插入 (透過 Azure 入口網站 UX 啟用) |
請確定您使用的是適當的快照偵錯工具端點
目前,唯一需要端點修改的區域是 Azure Government 和 由 21Vianet 營運的 Microsoft Azure。
針對使用 Application Insights SDK 的 App Service 和應用程式,您必須使用快照偵錯工具支援的覆寫來更新連接字串,如以下所定義:
連接字串屬性 | 美國政府雲端 | 中國雲端 |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
如需其他連線覆寫的詳細資訊,請參閱 Application Insights 文件。
針對函式應用程式,您必須使用以下支援的覆寫來更新 host.json
:
屬性 | 美國政府雲端 | 中國雲端 |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
以下是使用美國政府雲端代理程式端點更新的 host.json
範例:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
使用快照集健康情況檢查
一些常見的問題會導致不會顯示開啟偵錯快照集。 例如,使用過期的快照集收集器;達到每日上傳限制;或者快照集可能會花很長的時間來上傳。 請使用快照集健康情況檢查,針對常見的問題進行疑難排解。
端對端追蹤檢視的例外狀況窗格中有一個連結,可帶領您前往快照集健康情況檢查。
互動式的聊天型介面可尋找常見的問題,並引導您修正它們。
如果這樣無法解決問題,則請參閱下列手動疑難排解步驟。
驗證檢測金鑰
請確定您在已發佈的應用程式中使用正確的檢測金鑰。 通常,會從 ApplicationInsights.config 檔案中讀取檢測金鑰。 請確認此值與您在入口網站中看到之 Application Insights 資源的檢測金鑰相同。
檢查 TLS/SSL 用戶端設定 (ASP.NET)
如果您的 ASP.NET 應用程式裝載於 Azure App Service 或虛擬機器上的 IIS 中,您的應用程式可能會因為缺少 SSL 安全性通訊協定而無法連線到快照偵錯工具服務。
快照偵錯工具端點需要 TLS 版本 1.2。 SSL 安全性通訊協定集是由 web.config
的 system.web
區段中的 httpRuntime targetFramework
值所啟用的 Quirks 之一。
如果 httpRuntime targetFramework
為 4.5.2 或更舊版本,則預設不會包含 TLS 1.2。
注意
httpRuntime targetFramework
值與建置應用程式時所使用的目標架構無關。
若要檢查設定,請開啟您的 web.config 檔案,並尋找 system.web 區段。 確保 httpRuntime
的 targetFramework
設定為 4.6 或更新版本。
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
注意
修改 httpRuntime targetFramework
值會變更套用至應用程式的執行階段 Quirks,並可能導致其他細微的行為變更。 進行此變更之後,請務必徹底測試您的應用程式。 如需相容性變更的完整清單,請參閱重定目標變更。
注意
如果 targetFramework
為 4.7 或更新版本,則 Windows 會判斷可用的通訊協定。 在 Azure App Service 中,可以使用 TLS 1.2。 不過,如果您使用自己的虛擬機器,可能需要在 OS 中啟用 TLS 1.2。
快照偵錯工具額外負荷案例
快照偵錯工具是專為在生產環境中使用而設計。 預設設定包含速率限制,以將對您應用程式的影響降到最低。
不過,您可能會遇到與快照偵錯工具相關聯的小型 CPU、記憶體和 I/O 額外負荷,例如下列案例。
應用程式中有擲回的例外狀況時:
- 為問題類型建立簽章,而決定是否建立快照集會增加非常小的 CPU 和記憶體額外負荷。
- 如果啟用取消最佳化,重新 JIT 擲回例外狀況的方法會有額外負荷。 下次執行該方法時,將會產生此情況。 視方法的大小而定,這可能介於 1 毫秒到 100 毫秒的 CPU 時間之間。
如果例外狀況處理常式決定建立快照集:
建立程序快照集大約需要半秒 (P50=0.3s、P90=1.2s、P95=1.9s),在此期間,擲回例外狀況的執行緒會暫停。 不會封鎖其他執行緒。
將程序快照集轉換成小型傾印,並將其上傳至 Application Insights 需要幾分鐘的時間。
- 轉換:P50=63s、P90=187s、P95=275s。
- 上傳:P50=31s、P90=75s、P95=98s。
這會在快照集上傳程式中完成,其會在不同的程序中執行。 快照集上傳程式程序會以低於一般 CPU 優先順序執行,並使用低優先順序 I/O。
小型傾印會先寫入磁碟,且磁碟空間量大致與原始程序的工作集相同。 寫入小型傾印會在讀取記憶體時引發頁面錯誤。
小型傾印會在上傳期間進行壓縮,這會在快照集上傳程式程序中取用 CPU 和記憶體。 此作業的 CPU、記憶體和磁碟額外負荷會與程序快照集的大小成正比。 快照集上傳程式會以序列方式處理快照集。
呼叫 TrackException
時:
快照偵錯工具會檢查例外狀況是否為新的,或是否已為其建立快照集。 這會增加非常小的 CPU 額外負荷。
.NET Core 的預覽版本
如果您使用 .NET Core 的預覽版本,或應用程式參考 Application Insights SDK (直接或間接透過相依組件),請遵循啟用其他環境的快照偵錯工具的指示。
檢查診斷服務網站延伸模組的狀態頁面
如果快照偵錯工具是透過入口網站中的 Application Insights 窗格啟用,就是由診斷服務網站延伸模組啟用。
注意
Application Insights 快照偵錯工具的無程式碼安裝會遵循 .NET Core 支援原則。
如需支援執行階段的詳細資訊,請參閱 .NET Core 支援原則。
您可以移至下列 URL 來檢查這個延伸模組的 [狀態頁面]:https://{site-name}.scm.azurewebsites.net/DiagnosticServices
注意
狀態頁面連結的網域會根據雲端而有所不同。 此網域會與 App Service 的 Kudu 管理網站相同。 此狀態頁面會顯示 Profiler 和 Snapshot Collector 代理程式的安裝狀態。 如果發生非預期的錯誤,則會顯示並說明如何修正。
您可以使用適用於 App Service 的 Kudu 管理網站來取得此 [狀態頁面] 的基底 URL:
- 在 Azure 入口網站中開啟您的 App Service 應用程式。
- 選取 [進階工具],或搜尋 Kudu。
- 選取 [執行]。
- 您進入 Kudu 管理網站後,請在 URL 中附加下列
/DiagnosticServices
,然後按 Enter。 其結尾會如下所示:https://<kudu-url>/DiagnosticServices
升級至最新版本的 NuGet 套件
根據快照偵錯工具啟用的方式,請參閱下列選項:
如果快照偵錯工具是透過入口網站中的 Application Insights 窗格啟用,則您的應用程式應該已執行最新的 NuGet 套件。
如果是透過包含 Microsoft.ApplicationInsights.SnapshotCollector NuGet 套件來啟用快照偵錯工具,請使用 Visual Studio 的 NuGet 套件管理員,以確定您使用的是最新版本的
Microsoft.ApplicationInsights.SnapshotCollector
。
如需最新的更新和錯誤修正程式,請參閱版本資訊。
請檢查上傳程式記錄
建立快照集之後,磁碟上會建立小型傾印檔案 (.dmp)。 個別的上傳程式處理序會建立該小型傾印檔案,並將它 (以及任何相關聯的 PDB) 上傳至 Application Insights 快照集偵錯工具儲存體。 成功上傳小型傾印之後,它就會從磁碟中刪除。 上傳程式處理序的記錄檔會保留在磁碟上。 在 App Service 環境中,您可以在 D:\Home\LogFiles
中找到這些記錄。 使用 App Service 的 Kudu 管理網站來尋找這些記錄檔。
- 在 Azure 入口網站中開啟您的 App Service 應用程式。
- 選取 [進階工具],或搜尋 Kudu。
- 選取 [執行]。
- 在 [偵錯主控台] 下拉式清單中,選取 [CMD]。
- 選取 [記錄檔]。
您應會看到至少有一個檔案的名稱開頭為 Uploader_
或 SnapshotUploader_
且副檔名為 .log
。 選取適當的圖示,以下載任何記錄檔,或在瀏覽器中開啟它們。
檔案名稱包含可識別 App Service 執行個體的唯一尾碼。 如果 App Service 執行個體裝載於一部以上的電腦,每部電腦會有個別的記錄檔。 當上傳程式偵測到新的小型傾印檔案時,該檔案會記錄在記錄檔中。 以下是成功快照集和上傳的範例︰
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
注意
上方的範例來自 Microsoft.ApplicationInsights.SnapshotCollector
NuGet 套件的 1.2.0 版。 在較舊的版本中,上傳程式程序稱為 MinidumpUploader.exe
,且記錄較不詳細。
在上述範例中,檢測金鑰為 c12a605e73c44346a984e00000000000
。 這個值應該符合您應用程式的檢測金鑰。
小型傾印會與識別碼為 139e411a23934dc0b9ea08a626db16c5
的快照集相關聯。 您稍後可以使用這個識別碼,在 Application Insights Analytics 中找出相關聯的例外狀況記錄。
上載程式約每隔 15 分鐘掃描一次新的 PDB。 以下是範例:
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
若為「未」裝載於 App Service 中的應用程式,上傳程式記錄位於與小型傾印相同的資料夾中:%TEMP%\Dumps\<ikey>
(其中 <ikey>
是您的檢測金鑰)。
針對雲端服務進行疑難排解
在雲端服務中,預設暫存資料夾可能太小,無法保存小型傾印檔案,進而導致遺失快照集。
所需的空間取決於您應用程式的總工作集以及並行快照集數目。
32 位元 ASP.NET Web 角色的工作集一般介於 200 MB 與 500 MB 之間。 允許至少兩個並行快照集。
例如,如果您的應用程式使用 1 GB 的總工作集,則應確定至少有 2 GB 的磁碟空間可儲存快照集。
請遵循下列步驟,以使用快照集的專用本機資源來設定您的雲端服務角色。
編輯雲端服務定義 (.csdef) 檔案,以將新的本機資源新增至雲端服務。 下列範例定義稱為
SnapshotStore
且大小為 5 GB 的資源。<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
修改角色的啟動程式碼,新增指向
SnapshotStore
本機資源的環境變數。 對於背景工作角色,程式碼應新增至您角色的OnStart
方法:public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
對於 Web 角色 (ASP.NET),程式碼應新增至您 Web 應用程式的
Application_Start
方法:using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
更新您角色的 ApplicationInsights.config 檔案,以覆寫
SnapshotCollector
所使用的暫存資料夾位置<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
覆寫陰影複製資料夾
快照集收集器啟動時,它會嘗試在磁碟上尋找適合用來執行快照集上傳程式程序的資料夾。 選擇的資料夾稱為陰影複製資料夾。
快照集收集器會檢查幾個已知的位置,確定它有權複製快照集上傳程式二進位檔。 使用的環境變數如下:
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
如果找不到適合的資料夾,Snapshot Collector 會報告錯誤,指出「找不到適合的陰影複製資料夾」。
如果複製失敗,快照集收集器會報告 ShadowCopyFailed
錯誤。
如果上傳程式無法啟動,快照集收集器會報告 UploaderCannotStartFromShadowCopy
錯誤。 訊息內文通常會包含 System.UnauthorizedAccessException
。 之所以發生此錯誤,通常是因為應用程式執行於權限降低的帳戶下。 該帳戶有權寫入陰影複製資料夾,但沒有執行程式碼的權限。
這些錯誤通常是在啟動期間發生的,因此通常會尾隨 ExceptionDuringConnect
錯誤,指出「上傳程式無法啟動。」
若要解決這些錯誤,您可以透過 ShadowCopyFolder
組態選項以手動方式指定陰影複製資料夾。 例如,使用 ApplicationInsights.config:
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
或者,如果您搭配使用 appsettings.json 與 .NET Core 應用程式:
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
使用 Application Insights 搜尋來尋找快照集例外狀況的
建立快照集後,擲回中的例外狀況會以快照集識別碼標記。 向 Application Insights 回報例外狀況後,該快照集識別碼就會包含為自訂屬性。 使用 Application Insights 中的 [搜尋] 刀鋒視窗,您可以找到具有 ai.snapshot.id
自訂屬性的所有記錄。
- 在 Azure 入口網站中瀏覽至您的 Application Insights 資源。
- 選取搜尋。
- 在 [搜尋] 文字方塊中輸入
ai.snapshot.id
,然後按 Enter 鍵。
如果此搜尋未傳回任何結果,則不會針對所選時間範圍中向 Application Insights 回報任何快照集。
若要搜尋從上傳程式記錄中的特定快照集識別碼,請在 [搜尋] 方塊中輸入該識別碼。 如果您找不到已上傳快照集的記錄,請遵循下列步驟:
請驗證檢測金鑰,仔細檢查您查看的是正確的 Application Insights 資源。
使用上傳程式記錄中的時間戳記,調整搜尋的時間範圍篩選條件以涵蓋該時間範圍。
如果仍未看到具有該快照集識別碼的例外狀況,則未向 Application Insights 回報此例外狀況記錄。 如果您的應用程式在採用快照集之後,但回報例外狀況記錄之前損毀,可能會發生這種情況。 在此情況下,檢查 Diagnose and solve problems
之下的 App Service 記錄,查看是否發生非預期的重新啟動或未處理的例外狀況。
編輯網路 Proxy 或防火牆規則
如果應用程式透過 Proxy 或防火牆連線至網際網路,您可能需要更新規則,以與快照集偵錯工具服務進行通訊。
Application Insights 快照偵錯工具所使用的 IP 包含在 Azure 監視器服務標籤中。 如需詳細資訊,請參閱服務標籤文件。
使用快照集時是否有任何計費成本?
快照偵錯工具專屬的訂用帳戶不會有任何費用。 所收集的快照集檔案會與 Application Insights SDK 所收集的遙測分開儲存,且快照集擷取或儲存體不會有任何費用。