共用方式為


設定 Azure 雲服務(延伸支援)和虛擬機器的診斷

提示

本文適用於 Azure Azure 雲端服務(外延支援)。 截至 2024 年 8 月 31 日,雲端服務(傳統版)已淘汰。 如需詳細資訊,請參閱 雲端服務 (傳統) 部署模型將於 2024 年 8 月 31 日淘汰。 若要進行新的開發,建議您使用專為特定用途設計的較新服務類型,例如 Azure App ServiceAzure FunctionsAzure Container Apps。 如需可用服務的最新清單,請參閱 Azure 產品的目錄。

當您需要針對 Azure 雲端服務(外延支援)服務或虛擬機進行疑難解答時,您可以使用 Visual Studio 更輕鬆地設定 Azure 診斷。 診斷會在執行雲端服務的虛擬機和虛擬機實例上擷取系統數據和記錄數據。 診斷數據會傳輸到您選擇的記憶體帳戶。 如需 Azure 中診斷記錄的詳細資訊,請參閱 在 Azure App Service中啟用 Web Apps 的診斷記錄。

在本文中,我們會示範如何使用Visual Studio來開啟和設定 Azure 診斷。 瞭解如何在 Azure 虛擬機上設定診斷、如何選取要收集的診斷資訊類型,以及如何在收集之後檢視資訊。

您可以使用下列其中一個選項來設定 Azure 診斷:

  • 在 Visual Studio 的 [診斷組態] 對話框中變更診斷設定。 這些設定會儲存在名為 diagnostics.wadcfgx的檔案中。 您也可以直接修改組態檔。 如果您手動更新檔案,則下次將雲端服務部署至 Azure 或在模擬器中執行服務時,組態變更就會生效。

  • 使用 Visual Studio 2019 或更早版本中的 Cloud Explorer 或伺服器總管,變更執行中雲端服務或虛擬機的診斷設定。

若要設定 Azure 診斷,請在 Visual Studio 中的 [診斷組態] 對話框中變更診斷設定。 這些設定會儲存在名為 diagnostics.wadcfgx的檔案中。 您也可以直接修改組態檔。 如果您手動更新檔案,則下次將雲端服務部署至 Azure 或在模擬器中執行服務時,組態變更就會生效。

警告

在 Visual Studio 2022 中,在偵錯雲端服務專案時,已淘汰的 Azure 記憶體模擬器會取代為 Azurite 模擬器。 此 Azurite 模擬器不支援 Azure 診斷外掛程式,因此在本地執行和測試時,無法提供 Azure 診斷的支援。 如果您需要本機執行和測試案例的外掛程式,您可以將本機服務組態 (.cscfg) 中的連接字串更新至 Azure 記憶體帳戶(請參閱 管理記憶體帳戶的連接字元串),或下載先前的 Azure 記憶體模擬器。 在 Visual Studio 17.10 版本中,本機 Azure 診斷外掛程式被棄用且預設為停用,但該版本提供手動啟用的選項。 外掛程式已在Visual Studio 17.11中移除。 此外掛程式僅與本機 Azure 計算模擬器搭配使用,而且停用不會影響使用 Azure 診斷擴充功能的已部署雲端服務。 若要在 Visual Studio 17.10 中啟用診斷外掛程式,請將下列屬性設定新增至項目檔中的任何 PropertyGroup<EnableEmulatorDiagnosticsPlugin>True</EnableEmulatorDiagnosticsPlugin>

Visual Studio 如何決定診斷儲存帳戶

  • 如果在 .cscfg 檔案中指定診斷連接字串,Visual Studio 會在發佈期間以及封裝期間產生公用組態 XML 檔案時,使用它來設定診斷延伸模組。
  • 如果未在 .cscfg 檔案中指定診斷連接字串,Visual Studio 會回復為使用 .wadcfgx 檔案中指定的記憶體帳戶來設定診斷延伸模組以供發佈,並在封裝期間產生公用組態 XML 檔案。
  • .cscfg 檔案中的診斷連接字串優先於 .wadcfgx 檔案中的記憶體帳戶。 如果在 .cscfg 檔案中指定診斷連接字串,Visual Studio 會使用該連接字串,並忽略 .wadcfgx中的記憶體帳戶。

「更新開發儲存連接字串...」複選框的作用是什麼?

發行至 Microsoft Azure 複選框時,使用Microsoft Azure 記憶體帳戶認證更新診斷和快取的 更新開發記憶體連接字串,是使用您在發佈期間指定的 Azure 儲存器帳戶更新任何開發記憶體帳戶連接字元串的便利方式。 當您將專案發佈至 Azure 時,Visual Studio 會自動使用您在 [發佈精靈] 中指定的記憶體帳戶來更新診斷連接字串。 不過,如果指定了實際儲存帳戶作為診斷連接字串,則會使用該帳戶。

在 Azure 虛擬機上開啟診斷

在 Visual Studio 中,您可以收集 Azure 虛擬機的診斷數據。

在 Azure 虛擬機上開啟診斷

  1. 在 [伺服器總管] 中,選取 [Azure] 節點,如果您尚未連線,請連線到您的 Azure 訂用帳戶。

  2. 展開 虛擬機 節點。 您可以建立新的虛擬機,或選取現有的節點。

  3. 在您想要之虛擬機的快捷方式功能表上,選取 [[設定]。 [虛擬機組態] 對話框隨即出現。

    設定 Azure 虛擬機

  4. 如果尚未安裝,請新增Log Analytics代理程式診斷擴充功能。 透過此擴充功能,您可以收集 Azure 虛擬機的診斷數據。 在 [已安裝的擴充功能] 底下,於 [選取可用的擴充功能] 下拉式清單框中,選取 [Microsoft 監視代理程序診斷]。

    安裝 Azure 虛擬機擴充功能

    注意

    虛擬機可以使用其他診斷擴充功能。 如需詳細資訊,請參閱 Windows的虛擬機擴充功能和功能。

  5. 若要新增延伸模組並檢視其 診斷組態 對話框,請選取 [新增]

  6. 若要指定儲存體帳戶,請選擇 [設定],然後選取 [確定]

    每個索引標籤(除了 一般記錄目錄除外),都代表您可以收集的診斷數據源。

    啟用 Azure 診斷和設定

    預設索引標籤 [一般],提供下列診斷數據收集選項:僅錯誤[所有資訊],以及 [自訂計畫]。 默認選項 [只限錯誤],因為它不會傳輸警告或追蹤訊息,所以佔用的存儲空間最少。 [所有資訊] 選項會傳輸最多的資訊,因此,在記憶體方面是最昂貴的選項。

  7. 在此範例中,選取 [[自定義方案] 選項,以便自定義收集的數據。

  8. [MB 中的 磁碟配額] 方塊會指定您要在記憶體帳戶中為診斷數據配置多少空間。 如有需要,您可以變更預設值。

  9. 在每個您想要收集診斷數據的索引標籤上,選取其 [啟用<記錄類型的傳輸]> 複選框。

    例如,如果您想要收集應用程式記錄,請選取 [應用程式記錄] 索引標籤上的 [啟用應用程式記錄傳送] 複選框。此外,請指定每個診斷數據類型所需的任何其他資訊。 如需每個索引標籤的組態資訊,請參閱本文稍後 設定診斷數據源一節

  10. 啟用您要收集的所有診斷資料之後,請選擇 [確定]

  11. 儲存更新的專案。

    Microsoft Azure 活動記錄 視窗中的訊息表示虛擬機已更新。

設定診斷數據源

啟用診斷數據收集之後,您可以選擇您想要收集的數據源,以及收集哪些資訊。 下一節說明 [診斷組態] 對話框中的索引標籤,以及每個組態選項的意義。

應用程式記錄

應用程式記錄具有 Web 應用程式所產生的診斷資訊。 如果您想要擷取應用程式記錄,請選取 [啟用應用程式記錄傳送] 複選框。 若要增加或減少將應用程式記錄傳輸至記憶體帳戶之間的間隔,請變更 傳輸期間 (min) 值。 您也可以藉由設定 記錄層級 值,來變更記錄檔中擷取的資訊量。 例如,選取 [冗長] 以取得更多資訊,或選取 [重大] 以只擷取重大錯誤。 如果您有發出應用程式記錄的特定診斷提供者,您可以在 [提供者 GUID] 方塊中新增提供者的全域唯一標識碼 (GUID)來擷取記錄。

應用程式記錄

如需應用程式記錄的詳細資訊,請參閱在 Azure App Service 中啟用 Web Apps 的診斷記錄

Windows 事件記錄檔

若要擷取 Windows 事件記錄檔,請選取 [啟用 Windows 事件記錄 傳輸] 複選框。 若要增加或減少將事件記錄檔傳送至記憶體帳戶之間的間隔,請變更 傳輸期間 (min) 值。 選取您要追蹤之事件類型的複選框。

事件記錄檔

如果您想要指定自定義數據源,請在 [<數據源名稱>] 文本框中輸入,然後選取 [新增]。 數據源會新增至 diagnostics.cfcfg 檔案。

性能計數器

性能計數器資訊可協助您找出系統瓶頸,並微調系統和應用程式效能。 如需詳細資訊,請參閱 在 Azure 應用程式中建立和使用效能計數器。 若要擷取性能計數器,請選取 [啟用性能計數器傳輸] 複選框。 若要增加或減少將事件記錄檔傳送至記憶體帳戶之間的間隔,請變更 傳輸期間 (min) 值。 選取您要追蹤之性能計數器的複選框。

性能計數器

若要追蹤未列出的性能計數器,請使用建議的語法來輸入性能計數器。 然後選取 [新增]。 虛擬機上的作業系統會決定您可以追蹤的性能計數器。如需語法的詳細資訊,請參閱 指定計數器路徑

基礎設施記錄

基礎結構記錄包含 Azure 診斷基礎結構、RemoteAccess 模組和 RemoteForwarder 模組的相關信息。 若要收集基礎結構記錄的相關信息,請選取 [啟用基礎結構記錄傳輸] 複選框。 若要增加或減少將基礎結構記錄傳輸至記憶體帳戶之間的間隔,請變更 傳輸期間(最小值) 值。

診斷基礎結構記錄

如需詳細資訊,請參閱 使用 Azure 診斷收集記錄資料。

日誌目錄

記錄目錄中的數據會來自因特網資訊服務(IIS)請求、失敗的請求,或您選擇的資料夾。 若要擷取記錄目錄,請選取 [啟用記錄目錄傳輸] 複選框。 若要增加或減少將記錄傳輸至記憶體帳戶之間的間隔,請變更 傳輸期間 (min) 值。

勾選您想要收集的日誌的複選框,例如 IIS 日誌失敗請求日誌。 提供預設記憶體容器名稱,但您可以變更名稱。

您可以從任何資料夾擷取記錄。 從 [絕對目錄 ] 區段中指定 [ 記錄檔] 中的路徑,然後選取 [新增目錄]。 記錄會在指定的容器中收集。

記錄目錄

ETW 記錄

如果您使用 Windows 事件追蹤(ETW) 並想要擷取 ETW 記錄,請選取 [啟用 ETW 記錄傳輸] 複選框。 若要增加或減少將記錄傳輸至記憶體帳戶之間的間隔,請變更 傳輸期間 (min) 值。

事件會從您指定的事件來源和事件指令清單擷取。 若要指定事件來源,請在 [事件來源] 區段中輸入名稱,然後選取 [新增事件來源] 。 同樣地,您可以在 [事件指令清單] 區段中指定事件指令清單,然後選取 [[新增事件指令清單]

ETW 記錄

透過 System.Diagnostics.aspx 命名空間中的類別,ASP.NET 支援 ETW 架構。 繼承自 和擴充標準 System.Diagnostics.aspx 類別的 Microsoft.WindowsAzure.Diagnostics 命名空間可讓您在 Azure 環境中使用 System.Diagnostics.aspx 作為記錄架構。 如需詳細資訊,請參閱 控制 Microsoft Azure 中的記錄和追蹤 以及 在 Azure 雲端服務(延伸支援)和虛擬機器中啟用診斷

崩潰傾印

若要收集角色實例崩潰時的相關資訊,請選取 [啟用崩潰傾印傳輸] 複選框。 (因為 ASP.NET 處理大部分的例外狀況,這通常只適用於背景工作角色。若要增加或減少專用於損毀傾印的儲存空間百分比,請變更 目錄配額(%) 值。 您可以變更儲存損毀傾印的儲存容器,並選擇要擷取 完整小型 傾印。

目前正在追蹤的進程會列在下一個螢幕快照中。 選取您要擷取之程序的複選框。 若要將另一個進程新增至清單,請輸入行程名稱,然後選取 [[新增行程]

損毀傾印

如需詳細資訊,請參閱 在 Azure Microsoft中控制記錄和追蹤。

檢視診斷數據

收集雲端服務或虛擬機的診斷數據之後,您可以加以檢視。

檢視雲端服務診斷數據

  1. 如往常部署您的雲端服務,然後加以執行。

  2. 您可以在 Visual Studio 產生的報表中,或在記憶體帳戶中的數據表中檢視診斷數據。 若要檢視報表中的資料,請開啟 [雲端總管] 或 [伺服器總管],在想要的角色節點上開啟快捷方式功能表,然後選取 [檢視診斷資料]

    檢視診斷數據

    顯示可用數據的報表隨即出現。

    Visual Studio

    如果未顯示最新的數據,您可能必須等候傳輸期間過後。

    若要立即更新數據,請選取 重新整理 連結。 若要自動更新數據,請在 [自動重新整理] 下拉式清單中選取 [間隔]。 若要匯出錯誤數據,請選取 [匯出至 CSV] 按鈕,以建立可在 Excel 工作表中開啟的逗號分隔值檔案。

    在 Cloud Explorer 或 [伺服器總管] 中,開啟與部署相關聯的記憶體帳戶。

  3. 開啟數據表查看器中的診斷數據表,然後檢閱您收集的數據。 針對 IIS 記錄和自訂記錄,您可以開啟 Blob 容器。 下表列出包含不同記錄檔數據的數據表或 Blob 容器。 除了該記錄檔的數據之外,數據表項目還包含 EventTickCountDeploymentIdRoleRoleInstance,以協助您識別是哪個虛擬機和角色,以及什麼時間產生了數據。

    診斷數據 描述 位置
    應用程式記錄 記錄程式代碼所產生的記錄,透過呼叫 System.Diagnostics.Trace 類別的方法。 WADLogsTable
    事件記錄檔 虛擬機上 Windows 事件記錄檔中的數據。 Windows 會將資訊儲存在這些記錄中,但應用程式和服務也會使用記錄來報告錯誤或記錄資訊。 WADWindowsEventLogsTable
    性能計數器 您可以收集在虛擬機上可用的任何性能計數器的數據。 操作系統提供性能計數器,其中包括許多統計數據,例如記憶體使用量和處理器時間。 WADPerformanceCountersTable
    基礎設施日誌 從診斷基礎結構本身產生的記錄。 WADDiagnosticInfrastructureLogsTable
    IIS 記錄 記錄網頁請求的日誌。 如果您的雲端服務取得大量的流量,這些記錄可能會很長。 只有在您需要時,才收集並儲存此數據是個好主意。 您可以在 wad-IIS-failedreqlogs 的 Blob 容器中於該部署、角色和實例的路徑下找到失敗請求記錄。 您可以在 wad-IIS-logfiles 底下找到完整的記錄。 每個檔案的項目都會在 WADDirectories 數據表中建立。
    當機記憶體傾印 提供雲端服務程序的二進位映像(通常是背景工作角色)。 wad-crush-dumps Blob 容器
    自訂記錄檔 您預先定義的數據記錄。 您可以在程式代碼中指定記憶體帳戶中自訂記錄檔的位置。 例如,您可以指定自定義 Blob 容器。
  4. 如果任何類型的數據被截斷,您可以嘗試增加該類型數據的緩衝區,或縮短將數據從虛擬機傳輸到儲存帳戶之間的間隔。

  5. (選擇性)偶爾從記憶體帳戶清除數據,以減少整體記憶體成本。

  6. 當您進行完整部署時,diagnostics.cscfg 檔案會在 Azure 中更新,而您的雲端服務會接收診斷設定的任何變更。 如果您改為更新現有的部署,則不會在 Azure 中更新 .cscfg 檔案。 不過,您可以遵循下一節中的步驟來變更診斷設定。 如需執行完整部署和更新現有部署的詳細資訊,請參閱 發佈 Azure 應用程式精靈

若要檢視虛擬機診斷數據

  1. 在虛擬機的快捷方式功能表上,選取 [檢視診斷數據]

    檢視 Azure 虛擬機中的診斷數據

    診斷摘要 對話框隨即出現。

    Azure 虛擬機診斷摘要

    如果未顯示最新的數據,您可能必須等候傳輸期間過後。

    若要立即更新數據,請選取 重新整理 連結。 若要自動更新數據,請在 [自動重新整理 ] 下拉式清單中選取 [ 間隔]。 若要匯出錯誤數據,請選取 [匯出至 CSV] 按鈕,以建立可在 Excel 工作表中開啟的逗號分隔值檔案。

在部署後設定雲端服務診斷

如果您正在調查已在執行中的雲端服務問題,您可能會想要收集原本部署角色之前未指定的數據。 在此情況下,您可以變更 [伺服器總管] 中的設定,開始收集數據。 您可以針對單一實例或角色中的所有實例設定診斷,視您是否從實例或角色的快捷方式功能表開啟 [診斷組態] 對話框而定。 如果您設定角色節點,您所做的任何變更都會套用至所有實例。 如果您設定實例節點,您所做的任何變更只會套用至該實例。

對正在運行的雲端服務進行診斷設定

  1. 在 [伺服器總管] 中,展開 [雲端服務 節點],然後展開節點清單,以找出您想要調查的角色或實例(或兩者)。

    設定診斷

  2. 在實例節點或角色節點的快捷方式功能表上,選取 更新診斷設定,然後選擇您希望收集的診斷設定。

    如需組態設定的相關信息,請參閱本文 設定診斷數據源一節。 如需如何檢視診斷數據的資訊,請參閱本文 檢視診斷數據 一節。

    如果您在 [伺服器總管] 中變更數據收集,則變更會持續生效,直到您完全重新部署雲端服務為止。 如果您使用預設的發佈設定,則不會覆寫變更。 默認發佈設定是更新現有的部署,而不是執行完整重新部署。 若要確保部署時間的設定已清除,請移至 [發佈精靈] 中的 [進階設定] 索引卷標,然後清除 [部署更新] 複選框。 當您在該複選框被清除的情況下重新部署時,設定會還原為透過角色 [屬性] 編輯器所設定的 .wadcfgx 檔案中的設定。 如果您更新部署,Azure 會保留先前的設定。

針對 Azure 雲端服務(延長支援)問題進行疑難排解

如果您遇到雲端服務專案的問題,例如某角色卡在「忙碌」狀態、重複回收或擲回內部伺服器錯誤等情況時,您可以使用工具和技術來診斷和修正問題。 如需常見問題和解決方案的特定範例,以及可用來診斷和修正這些錯誤的概念和工具概觀,請參閱 Azure 平臺即服務 (PaaS) 計算診斷數據

Q & A

緩衝區大小為何,以及應該有多大?

在每個虛擬機實例上,配額會限制可在本機檔系統上儲存多少診斷數據。 此外,您可以為每個可用的診斷數據類型指定緩衝區大小。 此緩衝區大小的作用就像是該數據類型的個別配額。 若要判斷保留的整體配額和記憶體數量,請參閱診斷數據類型對話框底部。 如果您指定較大的緩衝區或更多數據類型,您將接近整體配額。 您可以修改 diagnostics.wadcfgx 組態檔來變更整體配額。 診斷數據會儲存在與應用程式數據相同的檔案系統上。 如果您的應用程式使用大量的磁碟空間,則不應該增加整體診斷配額。

什麼是轉帳時間,它應該持續多久?

傳輸期間是數據擷取之間經過的時間量。 在每個傳輸期間之後,數據會從虛擬機上的本機檔系統移至記憶體帳戶中的數據表。 如果收集的數據量超過傳輸期間結束前的配額,則會捨棄較舊的數據。 如果您因為數據超過緩衝區大小或整體配額而遺失數據,您可能會想要減少傳輸期間。

時間戳位於哪個時區?

時間戳位於裝載雲端服務的數據中心本地時區。 記錄資料表中會使用下列三個時間戳資料列:

  • PreciseTimeStamp: 事件的 ETW 時間戳。 也就是說,從客戶端記錄事件的時間。
  • TIMESTAMP:精確時間戳記 的值 被四捨五入至上傳頻率的邊界。 例如,如果您的上傳頻率是 5 分鐘,而事件時間 00:17:12,TIMESTAMP 是 00:15:00。
  • 時間戳: 在 Azure 數據表中建立實體的時間戳。

如何在收集診斷資訊時管理成本?

默認設定(記錄層級 設定為 [錯誤],而 [傳輸期間 設定為 1 分鐘] 的設計目的是將成本降至最低。 當您收集更多診斷數據或減少傳輸期間時,計算成本會增加。 不要收集比您需要更多的數據,也別忘了在不再需要數據收集時停用數據收集。 您可以隨時再次啟用它,即使在執行時,正如本文前面所述。

如何從 IIS 收集失敗的要求記錄?

根據預設,IIS 不會收集失敗的要求記錄。 您可以編輯 Web 角色的 web.config 檔案,設定 IIS 以收集失敗的要求記錄。

我無法從 RoleEntryPoint 方法(例如 OnStart)取得追蹤資訊。 怎麼了?

RoleEntryPoint 的方法會在 WAIISHost.exe的上下文中呼叫,而非在 IIS 中。 web.config 中通常用於啟用追蹤的組態資訊不適用。 若要解決此問題,請將 .config 檔案新增至您的 Web 角色專案,並將檔案命名為符合包含 RoleEntryPoint 程式代碼的輸出元件。 在預設 Web 角色專案中,.config 檔案的名稱應該 WAIISHost.exe.config。將下列幾行新增至此檔案:

<system.diagnostics>
  <trace>
      <listeners>
          <add name "AzureDiagnostics" type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener">
              <filter type="" />
          </add>
      </listeners>
  </trace>
</system.diagnostics>

在 [屬性] 視窗中,將 [複製到輸出目錄] 屬性設定為 [一律]。

若要深入瞭解 Azure 中的診斷記錄,請參閱 在 Azure 雲端服務中啟用診斷功能(外延支援)和虛擬機在 Azure App Service 中啟用 Web Apps 診斷記錄