針對 Azure Windows VM 代理程式問題進行疑難解答
適用於:✔️ Windows VM
注意
本篇文章實用嗎? 您的輸入對我們很重要。 請使用此頁面上的 [ 意見反應 ] 按鈕,讓我們知道這篇文章為您運作得有多好,或我們如何加以改善。
Azure VM 代理程式是虛擬機(VM) 代理程式。 它可讓 VM 與 IP 位址 168.63.129.16
上的網狀架構控制器(裝載 VM 的基礎實體伺服器)通訊。 此位址是可促進通訊的虛擬公用IP位址。 如需相關資訊,請參閱什麼是 IP 位址 168.63.129.16。
從內部部署環境移轉至 Azure 的 VM,或使用自定義映射建立的 VM 未安裝 Azure VM 代理程式。 在這些案例中,您必須手動安裝 VM 代理程式。 如需如何安裝 VM 代理程式的詳細資訊,請參閱 Azure 虛擬機器代理程式概觀。
成功安裝 Azure VM 代理程序之後,您可以看到 VM 上的 services.msc 中列出的下列服務。
Service | 描述 |
---|---|
Windows Azure 客體代理程式 | 此服務負責設定從客體 VM 到主機代理程式的各種擴充功能和通訊。 它也負責收集WaAppAgent.log中的記錄。 |
遙測 | 此服務負責將 VM 的遙測數據傳送至後端伺服器。 |
RdAgent | 此服務負責安裝客體代理程式。 (透明安裝程式是 RdAgent 的另一個元件,可協助升級客體代理程式的其他元件和服務。RdAgent 也負責將活動訊號從客體 VM 傳送至實體伺服器上的主機代理程式。 |
注意
從客體代理程式 2.7.41491.971 版開始,遙測元件會包含在 Windows Azure 客體代理程式服務中。 因此,您可能不會看到此遙測服務列在新建立的 VM 中。
疑難排解檢查清單
若要讓任何 VM 擴充功能能夠執行,必須安裝並順利運作 Azure VM 客體代理程式。 如果您看到客體代理程序回報為 「未就緒」,或擴充功能失敗並傳回錯誤訊息,例如 VMAgentStatusCommunicationError
,請遵循下列步驟開始對客體代理程序進行疑難解答。
步驟 1:檢查 VM 是否已啟動
若要確認 VM 已啟動,請遵循下列步驟:
在 Azure 入口網站中,搜尋並選取 [虛擬機器]。
在 VM 清單中,選取 Azure VM 的名稱。
在 Azure VM 的瀏覽窗格中,選取 [ 概觀]。
如果 VM 尚未開啟,請找出 [概觀] 頁面頂端的動作清單,然後選取 [開始] 連結。
此外,請確認作業系統已啟動並成功執行。
步驟 2:檢查客體代理程式是否已就緒
當您仍在 Azure 入口網站 的 VM 概觀頁面上時,請選取 [屬性] 索引標籤。如果 [代理程序狀態] 欄位的值為 [就緒],請確認 [代理程式版本] 欄位值符合最低支援的版本。 下列螢幕快照顯示您可以在何處找到這些欄位。
如果客體代理程式狀態為 就緒 ,但您有涉及 VM 擴充功能的問題,請參閱 Azure 虛擬機擴充功能和功能 ,以檢閱疑難解答建議。
如果客體代理程序狀態為 [未就緒 ] 或 [空白],則不會安裝客體代理程式或無法正常運作。
步驟 3:檢查客體代理程式服務是否正在執行
-
注意
RDP 連線無法順利運作,不需要客體代理程式。 如果您遇到影響 VM RDP 連線的問題,請參閱 針對 Azure 虛擬機器的遠端桌面連線進行疑難解答。
在您的 VM 上,選取 [ 啟動],搜尋 services.msc,然後選取 [服務 ] 應用程式。
在 [ 服務] 視窗中,選取 RdAgent 服務。
選取 [ 動作] 功能表,然後選取 [ 屬性]。
在 [屬性] 對話框的 [一般] 索引標籤上,確定下列條件成立,然後選取 [確定] 或 [取消] 按鈕:
- [ 啟動類型 ] 下拉式清單會設定為 [自動]。
- [ 服務狀態] 欄位的值為 [正在執行]。
在 [ 服務] 視窗中,選取 [WindowsAzureGuestAgent ] 服務。
重複步驟 4 和 5。
如果服務不存在,則可能不會安裝客體代理程式。 在此情況下,您可以 手動安裝客體代理程式。 執行手動安裝之前, 請先檢查安裝必要條件。
步驟 4:測試 WireServer 連線能力
若要成功執行,客體代理程式需要連線到埠80
和 32526
上的WireServerIP(主機IP) 位址168.63.129.16
。 如需如何測試此IP位址連線的指示,請參閱什麼是IP位址168.63.129.16的疑難解答連線一節?
如果該區段中的任何測試未連線,請檢查是否有可能導致下列任何元件封鎖IP位址 168.63.129.16
存取的問題:
- 防火牆
- Proxy
- 應用程式
步驟 5:檢閱記錄檔
檢查下列記錄位置是否有任何值得注意的錯誤:
- C:\WindowsAzure\Logs\WaAppAgent.log
- C:\WindowsAzure\Logs\TransparentInstaller.log
比較您發現的任何錯誤與下列常見案例,可能會導致 Azure VM 代理程序顯示 「未就緒 」狀態或如預期般停止運作。
原因 1:使用 Azure VM 代理程式 2.7.41491.1004 版的 Windows VM 遇到涉及 Sysprep 的問題
在這些 VM 上執行 Sysprep 可能會導致下列錯誤:
當您第一次執行 Sysprep 時,您會看到下列錯誤訊息:
系統管理員:錯誤處理程式
當您執行 Sysprep 一次以上時,您會看到下列錯誤訊息:
嘗試 sysprep VM 時發生嚴重錯誤
解決方案 1:重設 VM 的 Sysprep 狀態,然後將 Azure VM 代理程式升級至更新版本
重要
這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必小心執行下列步驟。 為了保護,請先備份登錄再加以修改,以便在發生問題時加以還原。 如需備份和還原登錄的詳細資訊,請參閱如何在 Windows 中備份及還原登錄。
首先,重設 VM 的 Sysprep 狀態。 重設牽涉到 修改某些登錄機碼。 然後,您可以將 Azure VM 代理程式升級至更新版本。 因為此問題只會在 2.7.41491.1004 版中發生,因此您可以嘗試將代理程式升級至最新的代理程式版本。
原因 2:代理程式卡在「正在啟動」程式中
在 WaAppAgent.log 檔案中,您可以看到代理程式卡在「正在啟動」程式中,而且無法啟動:
[00000007] [05/28/2019 12:58:50.90] [INFO] WindowsAzureGuestAgent starting. Version 2.7.41491.901
VM 仍在執行舊版的 Azure VM 代理程式。 在 C:\WindowsAzure 資料夾中,您可能會注意到已安裝許多 Azure VM 代理程式實例,包括數個具有相同版本的實例。 由於已安裝多個代理程序實例,因此 VM 不會啟動最新版的 Azure VM 代理程式。
解決方案 2:手動卸載並重新安裝 Azure VM 代理程式
手動卸載 Azure VM 代理程式,然後依照下列步驟重新安裝它:
開啟 控制台> Programs 和 Features,然後卸載 Azure VM 代理程式。
啟動任務管理員,然後停止下列服務:
- Azure VM 代理程序服務
- RdAgent 服務
- Windows Azure 遙測服務
- Windows Azure 網路代理程式服務
在 C:\WindowsAzure 底下,建立名為 OLD 的資料夾。
將名為 Packages 或 GuestAgent 的任何資料夾移至 OLD 資料夾。 此外,將 C:\WindowsAzure\logs 中啟動為 GuestAgent_x.x.xxxxx 的任何 GuestAgent 資料夾移至 OLD 資料夾。
下載並安裝最新版本的 Windows Installer (MSI) 代理程式。 您必須具有系統管理員許可權才能完成安裝。
執行下列 msiexec 命令來安裝客體代理程式:
msiexec.exe /i c:\VMAgentMSI\WindowsAzureVmAgent.2.7.<version>.fre.msi /quiet /L*v c:\VMAgentMSI\msiexec.log
確認 RdAgent、Azure VM 代理程式和 Windows Azure 遙測服務正在執行中。
請檢查WaAppAgent.log檔案,以確定最新版的 Azure VM 代理程式正在執行。
刪除 C:\WindowsAzure 底下的 OLD 資料夾。
原因 3:無法連線到 WireServer IP (主機 IP)
您會注意到WaAppAgent.log和Telemetry.log檔案中的下列錯誤專案:
[ERROR] GetVersions() failed with exception: Microsoft.ServiceModel.Web.WebProtocolException: Server Error: Service Unavailable (ServiceUnavailable) --->
System.Net.WebException: The remote server returned an error: (503) Server Unavailable.
[00000011] [12/11/2018 06:27:55.66] [WARN] (Ignoring) Exception while fetching supported versions from HostGAPlugin: System.Net.WebException: Unable to connect to the remote server
---> System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions 168.63.129.16:32526
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState status, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
at System.Net.WebClient.DownloadString(Uri address)
at Microsoft.GuestAgentHostPlugin.Client.GuestInformationServiceClient.GetVersions()
at Microsoft.WindowsAzure.GuestAgent.ContainerStateMachine.HostGAPluginUtility.UpdateHostGAPluginAvailability()`
這些錯誤專案表示 VM 無法連線到 WireServer 主機伺服器。
解決方案 3:啟用 DHCP,並確定伺服器未遭到防火牆、Proxy 或其他來源封鎖
因為無法連線到WireServer,請使用遠端桌面連線到VM,然後在網頁瀏覽器中嘗試存取URL
http://168.63.129.16/?comp=versions
。如果您無法連線到步驟 1 中的 URL,請檢查網路介面,以判斷是否已啟用它以使用動態主機設定通訊協定 (DHCP) 並具有 DNS。 若要檢查網路介面的 DHCP 狀態,請執行下列 網路殼層 (
netsh
) 介面 IP 命令來 顯示組態:netsh interface ip show config
如果 DHCP 已停用,請針對設定位址執行下列
netsh
介面 IP 命令:netsh interface ip set address name="<name-of-the-interface>" source=dhcp
注意: 在此命令中,將佔位元值變更為介面的名稱。
檢查防火牆、Proxy 或其他來源可能造成封鎖IP位址
168.63.129.16
存取的任何問題。檢查 Windows 防火牆或第三方防火牆是否封鎖對埠
80
和 的32526
存取。 如需為何不應該封鎖此位址的詳細資訊,請參閱 什麼是IP位址168.63.129.16?
原因 4:客體代理程式卡在「停止」程式中
您會注意到WaAppAgent.log檔案中的下列錯誤專案:
[00000007] [07/18/2019 14:46:28.87] [WARN] WindowsAzureGuestAgent stopping.
[00000007] [07/18/2019 14:46:28.89] [INFO] Uninitializing StateExecutor with WaitForTerminalStateReachedOnEnd : True
[00000004] [07/18/2019 14:46:28.89] [WARN] WindowsAzureGuestAgent could not be stopped. Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.WindowsAzure.GuestAgent.ContainerStateMachine.GoalStateExecutorBase.WaitForExtensionWorkflowComplete(Boolean WaitForTerminalStateReachedOnEnd)
at Microsoft.WindowsAzure.GuestAgent.ContainerStateMachine.GoalStateExecutorBase.Uninitialize(Boolean WaitForTerminalStateReachedOnEnd)
at Microsoft.WindowsAzure.GuestAgent.ContainerStateMachine.GoalStateExecutorForCloud.Uninitialize(Boolean WaitForTerminalStateReachedOnEnd)
at Microsoft.WindowsAzure.GuestAgent.AgentCore.AgentCore.Stop(Boolean waitForTerminalState)
at Microsoft.WindowsAzure.GuestAgent.AgentCore.AgentService.DoStopService()
at Microsoft.WindowsAzure.GuestAgent.AgentCore.AgentService.<>c__DisplayClass2.<OnStopProcessing>b__1()
這些錯誤專案表示 Azure VM 代理程式卡在「停止」程式中。
解決方案 4a:啟動WaAppAgent.exe並停止WindowsAzureGuest.exe
請確定 WaAppAgent.exe 正在 VM 上執行。 如果未執行,請重新啟動 RdAgent 服務,然後等候五分鐘。 WaAppAgent.exe開始執行之後,結束WindowsAzureGuest.exe程式。
解決方案 4b:升級至最新版的 Azure VM 代理程式
如果解決方案 4a 無法解決問題,請移除目前安裝的版本,然後手動安裝最新版本的代理程式。
原因 5:已安裝 Npcap 回送配接器
您會注意到WaAppAgent.log檔案中的下列錯誤專案:
[00000006] [06/20/2019 07:44:28.93] [INFO] Attempting to discover fabric address on interface Npcap Loopback Adapter.
[00000024] [06/20/2019 07:44:28.93] [WARN] Empty DHCP option data returned
[00000006] [06/20/2019 07:44:28.93] [ERROR] Did not discover fabric address on interface Npcap Loopback Adapter
這些錯誤專案表示Wireshark已在VM上安裝網路對應程式 (Nmap) 專案的封包擷取 (Npcap) 回送適配卡。 Wireshark 是一種開放原始碼工具,可用來分析網路流量和分析封包。 這類工具通常稱為網路分析器、網路通訊協定分析器或探查器。
解決方案5:停用 Npcap 回送配接器
嘗試停用 Npcap 回送配接器,然後檢查問題是否已解決。
原因 6:遠端過程調用 (RPC) 問題
您會注意到WaAppAgent.log檔案中的下列錯誤專案:
[00000004] [01/12/2019 00:30:47.24] [ERROR] RdCrypt Initialization failed. Error Code: -2147023143.
[00000004] [01/12/2019 00:30:47.24] [ERROR] Failed to get TransportCertificate. Error: System.AccessViolationException
Microsoft.Cis.Fabric.CertificateServices.RdCertificateFactory.Shutdown()
[00000004] [01/12/2019 00:30:47.24] [WARN] Could not get transport certificate from agent runtime for subject name: 12345678-d7c8-4387-8cf3-d7ecf62544e5. Installing certificates in the LocalMachine store failed.
[00000004] [01/12/2019 00:30:47.24] [WARN] Fetching certificate blob from the cert URI: http://168.63.129.16/machine/12345678-d7c8-4387-8cf3-d7ecf62544e5/12345678-d447-4b10-a5da-1ba1581cd7d7._VMName?comp=certificates&incarnation=2 failed with exception: System.NullReferenceException
-2147023143 = 0x6d9 = EPT_S_NOT_REGISTERED
這些錯誤專案可能是因為遠端過程調用 (RPC) 問題所造成。 例如,RPC 端點可能未接聽,或 RPC 進程可能遺失在相反端。
解決方案 6:啟動 CNG 金鑰隔離服務
執行下列 portqry 命令,檢查密碼編譯新一代 (CNG) 金鑰隔離 (CNGKEYISO
) Windows 服務是否在 RPC 端點清單中:
portqry -n <VMName> -e 135
如果您沒有看到此 CNGKEYISO
程式,請從 Windows 服務控制台啟動它(CNG 金鑰隔離 = KeyIso
),然後重新啟動 WaAppAgent.exe 或 WindowsAzureGuestAgent.exe。
原因 7:PInvoke PFXImportCertStore 失敗,並傳回 Null 句柄。 錯誤碼:86
Windows 客體代理程式正在執行,但擴充功能無法運作。 您會注意到WaAppAgent.log檔案中的下列錯誤專案:
PInvoke PFXImportCertStore failed and null handle is returned. Error Code: 86
[00000003] [10/21/2020 02:37:45.98] [WARN] Could not get transport certificate from agent runtime for subject name: 12345678-dae3-4c2f-be57-55c0ab7a44e5. Installing certificates in the LocalMachine store failed.
[00000003] [10/21/2020 02:37:45.98] [ERROR] Installing certificates in the LocalMachine store failed with exception: Microsoft.WindowsAzure.GuestAgent.CertificateManager.CryptographyNative+PInvokeException: PInvoke PFXImportCertStore failed and null handle is returned. Error Code: 86.
這些錯誤專案可能是因為系統帳戶的密碼 編譯 資料夾許可權不足所造成。 如果您在重新啟動客體代理程式服務 (RdAgent 或 WindowsAzureGuestAgent) 時收集 行程監視器 (ProcMon) 追蹤,您應該會看到一些「拒絕存取」錯誤。
解決方案 7:將密碼編譯資料夾的完整控制權新增至 SYSTEM 帳戶
請確定 SYSTEM 帳戶具有 下列資料夾的完整控制 權限:
C:\ProgramData\Microsoft\Crypto\Keys
C:\ProgramData\Microsoft\Crypto\RSA
C:\ProgramData\Microsoft\Crypto\SystemKeys
原因 8:System.BadImageFormatException:嘗試載入格式不正確的程式。 (HRESULT 例外:0x8007000B)
您會注意到WaAppAgent.log檔案中的下列錯誤專案,指出客體代理程式沒有回應:
[00000018] 2021-01-12T16:35:45Z [INFO] Test extract the plugin zip file to the temp folder C:\TEMP\12345678-5f85-45dc-9f17-55be1fde7b10
[00000010] 2021-01-12T16:35:45Z [ERROR] InstallPlugins() failed with exception: System.AggregateException: One or more errors occurred. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at Microsoft.WindowsAzure.GuestAgent.ExtensionStateMachine.PluginInstaller.PackageExpand(String packageFilePath, String destinationPath)
at Microsoft.WindowsAzure.GuestAgent.ExtensionStateMachine.PluginInstaller.ValidateExtensionZipFile(String pluginName, String pluginVersion, String& pluginZipFile)
最有可能的是,這些錯誤專案是因為第三方應用程式已安裝在 VM 上,並修改了 32 位或 64 位 .NET 應用程式的行為。
BadImageFormatException
當 64 位應用程式載入 32 位 DLL 時,就會發生錯誤。
解決方案 8:設定 .NET Framework 的 Enable64Bit 登錄專案,然後重新啟動 VM
重要
這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必小心執行下列步驟。 為了保護,請先備份登錄再加以修改,以便在發生問題時加以還原。 如需備份和還原登錄的詳細資訊,請參閱如何在 Windows 中備份及還原登錄。
開啟登錄,找出 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\。NETFramework 登錄子機碼,然後檢視 Enable64Bit 登錄專案。
如果 Enable64Bit 登錄專案設定為 0,則 64 位 .NET 應用程式會被視為 32 位應用程式。 因此,Azure VM 代理程式無法運作。
解決方案是將 Enable64Bit 金鑰設定為 1,然後重新啟動 VM。
原因 9:Windows 客體代理程式未啟動,因為 ConfigurationErrorsException 或 TypeInitializationException 錯誤
Windows 客體代理程式會在啟動時停止回應,並顯示下列應用程式記錄專案:
Log Name: Application
Source: .NET Runtime
Date: 3/07/2023 10:25:59 AM
Event ID: 1026
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: vm372437823
Description:
Application: WindowsAzureGuestAgent.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Configuration.ConfigurationErrorsException
at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean)
at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors)
at System.Configuration.ClientConfigurationSystem.EnsureInit(System.String)
Exception Info: System.Configuration.ConfigurationErrorsException
at System.Configuration.ClientConfigurationSystem.EnsureInit(System.String)
at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(System.String)
at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(System.String)
at System.Configuration.ConfigurationManager.GetSection(System.String)
at System.Configuration.PrivilegedConfigurationManager.GetSection(System.String)
at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
at System.Diagnostics.DiagnosticsConfiguration.Initialize()
at System.Diagnostics.DiagnosticsConfiguration.get_IndentSize()
at System.Diagnostics.TraceInternal.InitializeSettings()
at System.Diagnostics.Trace.set_AutoFlush(Boolean)
at Microsoft.WindowsAzure.GuestAgent.Prime.TraceManager..cctor()
Exception Info: System.TypeInitializationException
at Microsoft.WindowsAzure.GuestAgent.Prime.TraceManager.Write(System.String, System.Object[])
at Microsoft.WindowsAzure.GuestAgent.AgentCore.AgentCore.Start()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
如果 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 檔案遺失或損毀,就可能發生此問題。
解決方案 9:將工作機器.config 檔案複製到 VM,然後重新啟動客體代理程式服務
若要解決此問題,請執行下列步驟:
從工作 VM 複製 machine.config 檔案,然後將檔案貼到有問題的 VM 上的 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config 資料夾中。
執行和
net start
命令來重新啟動客體net stop
代理程式服務:net stop RdAgent net stop WindowsAzureGuestAgent net start RdAgent net start WindowsAzureGuestAgent
下一步
與 Azure VM 代理程式相關聯的其他已知問題會列在其 GitHub 存放庫中。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
第三方聯繫人免責聲明
Microsoft提供第三方連絡資訊,協助您尋找本主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft不保證第三方連絡信息的正確性。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。