針對 Azure DevTest Labs 中實驗室虛擬機器上的成品進行疑難排解
本文將引導您了解您的 Azure DevTest Labs 虛擬機器 (VM) 資源上成品失敗的可能原因和疑難排解步驟。
成品為可在建立 VM 期間或之後安裝至實驗室 VM 的工具、動作或軟體。 實驗室擁有者可以在建立時預先選取要套用至所有實驗室 VM 的必要成品,而實驗室使用者可以將成品套用至他們所擁有的 VM。 有數個可能的問題可能會導致成品無法安裝並套用至實驗室,或在實驗室 VM 上正確執行。
當成品似乎停止回應時,第一個步驟是嘗試判斷流程停滯的原因。 成品安裝可能會在初始要求期間被封鎖,或在要求執行期間失敗。 您可以從 Azure 入口網站或發生成品失敗的 VM 對成品失敗進行疑難排解。
在 Azure 入口網站中進行疑難排解
如果成品未成功套用至您的實驗室 VM,您可以從在 Azure 入口網站中調查 VM 的狀態開始。 您可以找到 VM 狀態的相關資訊、確認其正在執行,然後確認可以套用成品。 實驗室 VM 的活動記錄資料會顯示有關安裝流程的項目。 您可以檢查項目,以尋找成品失敗的相關資訊。
檢查 VM 狀態
遵循下列步驟在 Azure 入口網站中檢查 VM 狀態:
瀏覽至 DevTest Labs 實驗室 VM 的 [概觀] 頁面,並確認機器「正在執行」:
選取 [成品],然後開啟實驗室 VM 的成品清單:
檢查 [套用成品] 選項,並確認實驗室 VM 已準備好接受套用的成品:
當 [套用成品] 選項呈現灰色時,便代表您無法將成品套用至實驗室 VM,而且您會在頁面上方看到通知訊息:
使用 PowerShell 命令
您也可以使用 Azure PowerShell 來檢查實驗室 VM 是否可以接收套用的成品。
下列 GET
命令會傳回值為 True 或 False 的 canApplyArtifacts
旗標。 若要執行命令,請將 $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 的成品清單中顯示為「失敗」。
遵循下列步驟來調查失敗的成品:
檢查活動記錄
為了安裝成品,DevTest Labs 會建立及部署 Azure Resource Manager (ARM) 範本,以要求使用自訂指令碼延伸模組 (CSE)。 此等級的錯誤會顯示在訂用帳戶和包含實驗室 VM 之資源群組的 [活動記錄] 中。
注意
當您檢視 [活動記錄] 時,可能需要展開安裝流程項目,以查看失敗錯誤摘要。
使用下列步驟檢查 [活動記錄] 項目,以檢查與在實驗室 VM 上安裝或套用成品相關的失敗:
瀏覽至實驗室 VM 的 [活動記錄] 頁面,並找出具有「失敗」狀態的成品:
選取項目以開啟詳細資料窗格並檢視記錄資訊:
如果您是嘗試將成品直接套用至實驗室 VM,請尋找與 [建立或更新虛擬機器延伸模組] 安裝流程相關的失敗錯誤。
如果您是建立 VM 並在流程期間套用成品,請尋找針對 [建立或更新虛擬機器] 安裝流程回報的失敗錯誤。
窗格標題會對應至項目標題,例如 [將成品套用至虛擬機器]:
在詳細資料窗格上,選取 [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 儲存體帳戶的存放庫連線問題:
檢查是否已新增網路安全性群組 (NSG)。 如果已新增訂用帳戶原則以在所有虛擬網路中自動設定 NSG,其可能會影響用來建立實驗室 VM 的虛擬網路。
確認所有 NSG 規則:
使用 IP 流量驗證 來判斷 NSG 規則是否封鎖流量或是從 VM 封鎖流量。
檢閱作用中的安全性群組規則,以確保輸入 [允許] NSG 規則存在。 如需詳細資訊,請參閱使用有效安全性規則對 VM 流量流程進行疑難排解。
檢查實驗室的預設儲存體帳戶。
預設儲存體帳戶是實驗室建立期間建立的第一個儲存體帳戶。 其名稱通常會以字母 "a" 開頭,並以多個數字作為結尾,例如
a<labname>#
。瀏覽至 DevTest Labs 實驗室 VM 的 [概觀] 頁面,然後選取 [資源視覺化檢視]。
在圖表中,找出名稱符合所述命名慣例 (
a<labname>#
) 的 [儲存體帳戶]。選取該 [儲存體帳戶] 資源以查看快顯功能表,然後選取 [檢視]:
在儲存體帳戶 [概觀] 頁面上,展開左側功能表上的 [安全性 + 網路] 區段,然後選取 [網路]:
在 [防火牆與虛擬網路] 索引標籤上,檢查 [公用網路存取] 選項的設定:
如果已選取 [已從選取的虛擬網路和 IP 位址啟用],請確認允許的 IP 位址清單顯示可用來建立實驗室 VM 的實驗室虛擬網路:
否則,請確認已選取 [已從所有網路啟用]:
如需深入的疑難排解,請參閱 設定 Azure 儲存體防火牆和虛擬網路。
針對實驗室機器進行疑難排解
您可以連線到發生成品失敗的實驗室 VM 並調查問題。
檢查自訂指令碼延伸模組記錄檔
遵循下列步驟來檢視 Windows VM 的自訂指令碼延伸模組 (CSE) 記錄檔:
連線到執行中的 DevTest Labs 實驗室 VM。
開啟 [檔案總管] 視窗,並移至 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Status\。 <CSE version> 的其中一個範例是
1.10.12
。開啟並檢查 STATUS 檔案以檢視錯誤,例如 1.status。
如需在 Linux VM 上尋找記錄檔的指示,請參閱 搭配 Linux 虛擬機器使用 Azure 自訂指令碼延伸模組第 2 版。
檢查 Azure 虛擬機器代理程式
確定實驗室 VM 的 Azure 虛擬機器代理程式 (VM 代理程式) 已安裝並就緒。
實驗室 VM 第一次啟動時,或 CSE 第一次安裝以處理套用成品的要求時,實驗室 VM 可能會需要升級 VM 代理程式,或等候 VM 代理程式初始化。 VM 代理程式可能會需要很長的時間才能初始化所相依的服務。
依照下列步驟判斷 VM 代理程式是否導致成品停止回應:
連線到執行中的 DevTest Labs 實驗室 VM。
開啟 [檔案總管] 視窗,然後移至具有實驗室 VM 記錄檔的資料夾,例如 C:\WindowsAzure\logs。
開啟 WaAppAgent.log 檔案。
在記錄檔中,尋找顯示 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 定義檔案中指定預設值,就可能發生此案例。 結果是指令碼會停止回應,因為其正在等候使用者輸入。 當指令碼要求參數值時,最佳做法是定義預設值,並要求使用者輸入值。
指令碼在指令碼執行期間要求使用者動作。 如果等待使用者採取動作時,指令碼執行出現長時間的延遲,就可能發生此案例。 最佳做法是撰寫能以無訊息的形式運作,無需使用者介入的指令碼。
依照下列步驟判斷指令碼是否導致成品停止回應:
連線到執行中的 DevTest Labs 實驗室 VM。
開啟 [檔案總管] 視窗。
移至具有 VM 成品安裝指令碼的 [Download] 資料夾,例如 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Downloads\。 <CSE version> 的其中一個範例是
1.10.12
。針對後續步驟,您可以使用此資料夾中的指令碼,或將指令碼複製到您 VM 上的工作資料夾中。
在 VM 上以系統管理權限開啟命令提示字元視窗。
在該命令提示字元視窗中執行成品安裝指令碼。
遵循指令碼提示並輸入必要的參數值。 若要調查缺少使用者輸入或延遲的使用者動作是否會造成問題,請嘗試重現特定行為。
判斷指令碼是否示範非預期或有問題的行為。
視需要更正實驗室 VM 上的指令碼,然後再次執行指令碼以確認問題已解決。
檢查成品結構
自訂成品必須具有適當結構。 務必確認成品安裝指令碼中的自訂成品會實作正確的結構。 下列資源提供可協助您完成此檢查的資訊:
要求指令碼更新
您可以針對 DevTest Labs公用存放庫所裝載的成品提交建議的指令碼修正。 如需詳細資訊,請參閱 [自述] 檔中的 [貢獻] 一節。
取得支援
如果您需要更多協助,請嘗試下列其中一個支援通道:
搜尋 Microsoft Community 網站資源以取得 Azure DevTest Labs 的相關資訊,並存取 Stack Overflow 上的文章。
連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。
相關內容
- 針對 Azure DevTest Labs 中的虛擬機器部署失敗進行疑難排解 (部分機器翻譯)
- 測試參數類型成品 (英文)