針對 Azure DevTest Labs 中實驗室虛擬機器上的成品進行疑難排解

本文將引導您了解您的 Azure DevTest Labs 虛擬機器 (VM) 資源上成品失敗的可能原因和疑難排解步驟。

工件是可在建立 VM 期間或之後於實驗室 VM 上安裝的工具、動作或軟體。 實驗室擁有者可以在建立時預先選取要套用至所有實驗室 VM 的必要成品,而實驗室使用者可以將成品套用至他們所擁有的 VM。 有數個可能的問題可能會導致成品無法安裝並套用至實驗室,或在實驗室 VM 上正確執行。

當成品似乎停止回應時,第一個步驟是嘗試判斷流程停滯的原因。 成品安裝可能會在初始要求期間被封鎖,或在要求執行期間失敗。 您可以從 Azure 入口網站或發生成品失敗的 VM 對成品失敗進行疑難排解。

在 Azure 入口網站中進行疑難排解

如果成品未成功套用至您的實驗室 VM,您可以從在 Azure 入口網站中調查 VM 的狀態開始。 您可以找到 VM 狀態的相關資訊、確認其正在執行,然後確認可以套用成品。 實驗室 VM 的活動記錄資料會顯示有關安裝流程的項目。 您可以檢查項目,以尋找成品失敗的相關資訊。

檢查 VM 狀態

完成下列步驟來檢查 Azure 入口網站中的 VM 狀態:

  1. 移至 DevTest Labs 實驗室 VM 的 [ 概觀 ] 頁面,並確認計算機狀態為 [執行中]:

    顯示如何確認 DevTest Labs 虛擬機正在執行的螢幕快照。

  2. 選取 構件 以開啟實驗室 VM 的構件清單:

    顯示如何開啟實驗室虛擬機器 [成品] 清單的螢幕擷取畫面。

  3. 檢查 [ 套用成品 ] 選項,並確認實驗室 VM 已準備好接受已套用的成品:

    顯示如何確認成品可套用至 DevTest Labs 虛擬機器的螢幕擷取畫面。

    當 套用工件 選項顯示為暗灰色時,您無法將工件套用至實驗室 VM,並且會在頁面上看到通知訊息。

    指出成品無法套用至 DevTest Labs 虛擬機器之訊息的螢幕擷取畫面。

使用 PowerShell 命令

您也可以使用 Azure PowerShell 來檢查您的實驗室 VM 是否可以接收套用的成品。

下列 GET 命令會傳回值為 True 或 False 的 canApplyArtifacts 旗標。 若要執行命令,請將 $SubscriptionId 參數替換為您的訂用帳戶標識碼,將 $LabName/$VmName 參數替換為您的實驗室名稱和 VM 名稱,並將 $LabRgName 參數替換為您的實驗室資源組名稱。

Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null
$vm = Get-AzResource `
        -Name "$LabName/$VmName" `
        -ResourceGroupName $LabRgName `
        -ResourceType 'microsoft.devtestlab/labs/virtualmachines' `
        -ApiVersion '2018-10-15-preview' `
        -ODataQuery '$expand=Properties($expand=ComputeVm)'
$vm.Properties.canApplyArtifacts

調查失敗的成品詳細資料

成品可能會停止回應,且最後在實驗室 VM 的成品清單中顯示為「失敗」。

完成下列步驟來調查失敗的成品:

  1. 移至實驗室 VM 的 [ 成品 ] 列表頁面,然後選取狀態為 [失敗 ] 的成品:

    本螢幕擷取畫面顯示了實驗室虛擬機器的失敗成品。

  2. [成品] 詳細資料檢視隨即開啟。 詳細資料包括成品失敗的相關 [部署訊息] 和 [延伸模組訊息] 資訊:

    失敗成品詳細資料的螢幕擷取畫面,其中包括 [部署訊息] 和 [延伸模組訊息] 資訊。

檢查活動記錄

為了安裝成品,DevTest Labs 會建立及部署 Azure Resource Manager (ARM) 範本,以要求使用自訂指令碼延伸模組 (CSE)。 此等級的錯誤會顯示在訂用帳戶和包含實驗室 VM 之資源群組的 [活動記錄] 中。

Note

當您檢視 [活動記錄] 時,可能需要展開安裝流程項目,以查看失敗錯誤摘要。

透過完成以下步驟來檢查活動記錄項目中是否存在與實驗室 VM 上的成品的安裝或套用相關的失敗問題:

  1. 進入實驗室 VM 的活動記錄頁面,並找出狀態為失敗的項目:

    此螢幕快照顯示如何在實驗室 VM 上找出失敗工件的活動記錄項目。

  2. 選取項目以開啟詳細資料窗格並檢視記錄資訊:

    • 如果您正在嘗試將成品直接套用至實驗室 VM,請尋找與 [建立或更新虛擬機器擴充功能] 安裝流程相關的失敗錯誤。

    • 如果您是建立 VM 並在流程期間套用成品,請尋找針對 [建立或更新虛擬機器] 安裝流程回報的失敗錯誤。

    窗格的標題與項目標題相對應,例如,將成品套用至虛擬機器:

    顯示如何檢視失敗成品之 [活動記錄] 項目詳細資料的螢幕擷取畫面。

  3. 在詳細資料窗格上,選取 [JSON] 來檢閱 JSON 承載的內容。 您可以在 JSON 文件的結尾看到錯誤:

    顯示如何檢視失敗成品 [活動記錄] 項目之 JSON 詳細資料的螢幕擷取畫面。

調查成品存放庫和實驗室儲存體帳戶

當 DevTest Labs 套用成品時,它會從連線的存放庫讀取成品組態和檔案。 如果成品無法安裝或套用至您的實驗室 VM,問題可能與存放庫存取有關。

根據預設,DevTest Labs 可存取 DevTest Labs 公用成品存放庫。 您也可以將實驗室連線到私人存放庫,以存取自訂成品。 視設定而定,實驗室 VM 可能無法直接存取成品存放庫。 DevTest Labs 會快取實驗室儲存體帳戶中第一次初始化實驗室時已建立的成品。

  • 如果自訂成品無法安裝,請確定私人存放庫的個人存取權杖 (PAT) 尚未過期。 如果 PAT 已過期,則不會將成品列出,而且參考來自該存放庫之成品的任何指令碼都會失敗。

  • 如果記憶體帳戶的存取遭到封鎖,您可能會看到類似以下的錯誤:

    CSE Error: Failed to download all specified files. Exiting. Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (403) Forbidden. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
    

    例如,當流量從 VM 封鎖至 Azure 記憶體服務時,您可能會遇到此錯誤。 錯誤會出現在實驗室 VM 資源群組的 [活動記錄] 中。

完成下列步驟來識別 Azure 記憶體帳戶的存放庫連線問題:

  1. 檢查是否已新增網路安全性群組 (NSG)。 如果已新增訂用帳戶原則以在所有虛擬網路中自動設定 NSG,其可能會影響用來建立實驗室 VM 的虛擬網路。

  2. 確認所有 NSG 規則:

  3. 檢查實驗室的預設儲存體帳戶。

    預設儲存體帳戶是實驗室建立期間建立的第一個儲存體帳戶。 名稱通常會以字母 「a」 開頭,並以多位數數字結尾: a<labname>#。

    1. 移至 DevTest Labs 實驗室的 [ 概觀 ] 頁面,然後選取 [資源可視化檢視]。

    2. 在圖表中,找出名稱符合所述命名慣例 (a<labname>#) 的 [儲存體帳戶]。

    3. 將滑鼠指標放在 記憶體帳戶 資源上方,將指標移至 i 圖示以查看快捷功能表,然後選取 [ 檢視]:

      顯示如何選取 DevTest Labs 實驗室資源之儲存體帳戶 [檢視] 選項的螢幕擷取畫面。

    4. 在記憶體帳戶 [概 觀 ] 頁面上,展開左側功能表上的 [ 安全性 + 網络] 區段,然後選取 [ 網络] :

      顯示如何檢視 DevTest Labs 實驗室資源儲存體帳戶之 [網路] 設定的螢幕擷取畫面。

    5. 在 [防火牆與虛擬網路] 索引標籤上,檢查 [公用網路存取] 選項的設定:

      1. 如果選擇了[從選取的虛擬網絡和 IP 位址啟用],請確認允許的 IP 位址清單顯示可用於建立實驗室 VM 的實驗室虛擬網絡:

        顯示實驗室資源儲存體帳戶的 [已從選取的虛擬網路和 IP 位址啟用] 選項的螢幕擷取畫面。

      2. 否則,請確認已選取 [從所有網路啟用]:

        本螢幕擷取畫面顯示針對實驗室資源儲存體帳戶選取的 [已從所有網路啟用] 選項。

如需深入的疑難排解,請參閱 設定 Azure 儲存體防火牆和虛擬網路。

針對實驗室機器進行疑難排解

您可以連線到發生成品失敗的實驗室 VM 並調查問題。

檢查 CSE 記錄檔

完成下列步驟,以檢視 Windows VM 的 CSE 記錄檔:

  1. 連線到執行中的 DevTest Labs 實驗室 VM。

  2. 在 [檔案總管] 中,移至 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Status\。 <CSE version> 的其中一個範例是 1.10.12。

    顯示 DevTest Labs 的 Windows 虛擬機器上 [Status] 資料夾內容的螢幕擷取畫面。

  3. 開啟並檢查 STATUS 檔案,例如 1.status,以檢視錯誤。

如需在Linux VM上尋找記錄檔的指示,請參閱 搭配Linux虛擬機使用 Azure CSE 第 2 版。

檢查 Azure 虛擬機器代理程式

請確定實驗室 VM 的 Azure 虛擬機代理程式(VM 代理程式) 已安裝並就緒。

實驗室 VM 第一次啟動時,或 CSE 第一次安裝以處理套用成品的要求時,實驗室 VM 可能會需要升級 VM 代理程式,或等候 VM 代理程式初始化。 VM 代理程式可能會需要很長的時間才能初始化所相依的服務。

藉由完成下列步驟,判斷 VM 代理程式是否導致成品停止回應:

  1. 連線到執行中的 DevTest Labs 實驗室 VM。

  2. 在 [檔案總管] 中,移至包含實驗室 VM 記錄檔的資料夾,例如 C:\WindowsAzure\logs。

  3. 開啟 WaAppAgent.log 檔案。

  4. 在記錄檔中,尋找顯示 VM 代理程式啟動、完成初始化,以及傳送第一個活動訊號的項目。 掃描項目以尋找您遇到成品問題之時間點的時間戳記。 下列程式碼片段顯示記錄檔中的一些範例項目:

    [00000006] [11/14/2019 05:52:13.44] [INFO]  WindowsAzureGuestAgent starting. Version 2.7.41491.949
    ...
    [00000006] [11/14/2019 05:52:31.77] [WARN]  Waiting for OOBE to Complete ...
    ...
    [00000006] [11/14/2019 06:02:30.43] [WARN]  Waiting for OOBE to Complete ...
    [00000006] [11/14/2019 06:02:33.43] [INFO]  StateExecutor initialization completed.
    [00000020] [11/14/2019 06:02:33.43] [HEART] WindowsAzureGuestAgent Heartbeat.
    

    在此範例中,VM 代理程式花費 10 分鐘又 20 秒才啟動。 延遲發生的原因是因為初次執行體驗 (OOBE) 服務啟動時間過長。 VM 代理程式較長的啟動時間導致成品停止回應。

如需有關虛擬機器擴充功能的一般資訊,請參閱 Azure 虛擬機器延伸模組和功能。 如需更多疑難排解構想,請參閱 Azure 虛擬機器代理程式概觀。

調查指令碼問題

成品安裝可能會失敗的另一個原因是成品安裝腳本的撰寫方式。

以下是一些潛在指令碼問題的範例:

  • 指令碼具有必要參數,但在指令碼執行期間未傳遞預期的值。 如果允許使用者將預期的參數保留空白,且未在 artifactfile.json 定義檔案中指定預設值,就可能發生此案例。 結果是指令碼會停止回應,因為其正在等候使用者輸入。 當指令碼要求參數值時,最佳做法是定義預設值,並要求使用者輸入值。

  • 指令碼在指令碼執行期間要求使用者動作。 如果等待使用者採取動作時,指令碼執行出現長時間的延遲,就可能發生此案例。 撰寫可以靜默運行且不需要使用者介入的腳本是良好的作法。

藉由完成下列步驟,判斷腳本是否導致成品停止回應:

  1. 連線到執行中的 DevTest Labs 實驗室 VM。

  2. 開啟 [檔案總管]。

  3. 移至具有 VM 成品安裝指令碼的 [Download] 資料夾,例如 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Downloads\。 <CSE version> 的其中一個範例是 1.10.12。

    針對後續步驟,您可以使用此資料夾中的腳稿,或將腳本複製到 VM 上的工作資料夾。

  4. 在 VM 上以系統管理權限開啟命令提示字元視窗。

  5. 在該命令提示字元視窗中執行成品安裝指令碼。

    遵循指令碼提示並輸入必要的參數值。 若要調查缺少使用者輸入或延遲的使用者動作是否會造成問題,請嘗試重現特定行為。

  6. 判斷指令碼是否示範非預期或有問題的行為。

  7. 視需要更正實驗室 VM 上的腳本,然後再次執行腳本,以確認問題已解決。

檢查成品結構

自訂成品必須具有適當結構。 務必確認成品安裝指令碼中的自訂成品會實作正確的結構。 下列資源提供可協助您完成此檢查的資訊:

要求腳本更新

您可以針對 DevTest Labs公用存放庫所裝載的成品提交建議的指令碼修正。 如需詳細資訊,請參閱 [自述] 檔中的 [貢獻] 一節。

Get support

如果您需要更多協助,請嘗試下列其中一個支援通道:

  • 搜尋 Microsoft社群 資源以取得 Azure DevTest Labs 的相關信息,並檢視 Stack Overflow 上的文章。

  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。