共用方式為


針對啟用 Application Insights 快照偵錯工具或檢視快照集的問題進行疑難排解

如果您為應用程式啟用 Application Insights 快照偵錯工具,但看不到例外狀況的快照集,您可以使用這些指示進行疑難排解。

不會產生快照集有許多不同的原因。 您可以從執行快照集健康情況檢查開始,以識別一些可能的常見原因。

不支援的情節

不支援快照集收集器的情況:

案例 副作用 建議
直接在應用程式中使用快照集收集器 SDK 時,您已啟用進階選項 Interop 本機 Application Insights SDK(包括快照集收集器遙測)遺失,因此沒有可用的快照集。
您的應用程式可能會在啟動時與 System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor當機。
如需 Application Insights 功能 Interop 的詳細資訊,請參閱 檔。
如果您使用進階選項 Interop,請使用透過 Azure 入口網站 啟用的無程式代碼快照集收集器插入。

請確定您使用適當的快照調試程式端點

目前,唯一需要端點修改的區域是 Azure Government,Microsoft由 21Vianet 運作的 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 資源的檢測金鑰相同。

注意

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

檢查 TLS/SSL 用戶端設定 (ASP.NET)

如果您的 ASP.NET 應用程式裝載於虛擬機上的 Azure App 服務 或 IIS 中,您的應用程式可能會因為缺少 SSL 安全性通訊協定而無法連線到快照調試程式服務。

快照偵錯工具端點需要 TLS 版本 1.2。 SSL 安全性通訊協定集是由 web.configsystem.web 區段中的 httpRuntime targetFramework 值所啟用的 Quirks 之一。 如果 httpRuntime targetFramework 為 4.5.2 或更舊版本,則預設不會包含 TLS 1.2。

注意

httpRuntime targetFramework 值與建置應用程式時所使用的目標架構無關。

若要檢查設定,請開啟您的 web.config 檔案,並尋找 system.web 區段。 確定 targetFramework httpRuntime 的 設定為 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和記憶體額外負荷。

  • 如果已啟用取消優化,則會有重新 JITting 擲回例外狀況的方法的額外負荷。 這是下一次方法執行時所產生的。 根據方法的大小,它可以介於 1 毫秒到 100 毫秒的 CPU 時間之間。

如果例外狀況處理常式決定建立快照集:

  • 建立進程快照集大約需要半秒(P50 = 0.3 秒、P90 = 1.2 秒、P95 = 1.9 秒),在此期間,擲回例外狀況的線程會暫停。 不會封鎖其他線程。

  • 將程序快照集轉換成小型傾印,並將其上傳至 Application Insights 需要幾分鐘的時間。

    • 轉換:P50 = 63 秒、P90 = 187 秒、P95 = 275 秒。
    • 上傳:P50 = 31 秒、P90 = 75 秒、P95 = 98 秒。

    這會在快照集上傳程式中完成,其會在不同的程序中執行。 快照集上傳程式程序會以低於一般 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 管理網站相同。 狀態頁面會顯示 .NET Profiler 和快照集收集器代理程式的安裝狀態。 如果發生未預期的錯誤,則會示範如何修正錯誤。

您可以使用適用於 App Service 的 Kudu 管理網站來取得此 [狀態頁面] 的基底 URL:

  1. 在 Azure 入口網站中開啟您的 App Service 應用程式。
  2. 選取 [進階工具],或搜尋 Kudu
  3. 選取 [執行]
  4. 您進入 Kudu 管理網站後,請在 URL 中附加下列 /DiagnosticServices,然後按 Enter。 其結尾如下: https://<kudu-url>/DiagnosticServices

升級至最新版本的 NuGet 套件

根據快照偵錯工具啟用的方式,請參閱下列選項:

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

請檢查上傳程式記錄

建立快照集之後,磁碟上會建立小型傾印檔案 (.dmp)。 個別的上傳程式處理序會建立該小型傾印檔案,並將它 (以及任何相關聯的 PDB) 上傳至 Application Insights 快照集偵錯工具儲存體。 成功上傳迷你傾印之後,會從磁盤中刪除。 上傳程式處理序的記錄檔會保留在磁碟上。 在 App Service 環境中,您可以在 D:\Home\LogFiles 中找到這些記錄。 使用 App Service 的 Kudu 管理網站來尋找這些記錄檔。

  1. 在 Azure 入口網站中開啟您的 App Service 應用程式。
  2. 選取 [進階工具],或搜尋 Kudu
  3. 選取 [執行]
  4. 在 [偵錯主控台] 下拉式清單中,選取 [CMD]
  5. 選取 [記錄檔]

您應會看到至少有一個檔案的名稱開頭為 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

注意

上述範例來自 NuGet 套件 1.2.0 版 Microsoft.ApplicationInsights.SnapshotCollector 。 在較舊的版本中,上傳程式程序稱為 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 的磁碟空間可儲存快照集。

請遵循下列步驟,以使用快照集的專用本機資源來設定您的雲端服務角色。

  1. 編輯雲端服務定義 (.csdef) 檔案,以將新的本機資源新增至雲端服務。 下列範例定義稱為 SnapshotStore 且大小為 5 GB 的資源。

    <LocalResources>
        <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. 修改角色的啟動程式碼,新增指向 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
            }
        }
    }
    
  3. 更新您角色的 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 自訂屬性的所有記錄。

  1. 在 Azure 入口網站中瀏覽至您的 Application Insights 資源。
  2. 選取搜尋
  3. 在 [搜尋] 文字方塊中輸入 ai.snapshot.id,然後按 Enter 鍵。

在入口網站中使用快照集識別碼搜尋遙測的螢幕擷取畫面。

如果此搜尋未傳回任何結果,就不會在選取的時間範圍內向ApplicationInsights報告快照集。

若要搜尋從上傳程式記錄中的特定快照集識別碼,請在 [搜尋] 方塊中輸入該識別碼。 如果您找不到已上傳快照集的記錄,請遵循下列步驟:

  1. 請驗證檢測金鑰,仔細檢查您查看的是正確的 Application Insights 資源。

  2. 使用上傳程式記錄中的時間戳記,調整搜尋的時間範圍篩選條件以涵蓋該時間範圍。

如果仍未看到具有該快照集識別碼的例外狀況,則未向 Application Insights 回報此例外狀況記錄。 如果您的應用程式在採用快照集之後,但回報例外狀況記錄之前損毀,可能會發生這種情況。 在此情況下,檢查 Diagnose and solve problems 之下的 App Service 記錄,查看是否發生非預期的重新啟動或未處理的例外狀況。

編輯網路 Proxy 或防火牆規則

如果應用程式透過 Proxy 或防火牆連線至網際網路,您可能需要更新規則,以與快照集偵錯工具服務進行通訊。

Application Insights 快照偵錯工具所使用的 IP 包含在 Azure 監視器服務標籤中。 如需詳細資訊,請參閱服務標籤文件

使用快照集時是否有任何計費成本?

快照偵錯工具專屬的訂用帳戶不會有任何費用。 所收集的快照集檔案會與 Application Insights SDK 所收集的遙測分開儲存,且快照集擷取或儲存體不會有任何費用。