排查 Azure Windows VM 代理问题

注意

本文是否有帮助? 你的输入对我们很重要。 请使用此页面上的 “反馈 ”按钮,让我们了解本文对你的影响,或者我们如何改进它。

Azure VM 代理是虚拟机 (VM) 代理。 它使 VM 能够与构造控制器 (托管 VM 的基础物理服务器通信,) IP 地址 168.63.129.16。 此地址是促进通信的虚拟公共 IP 地址。 有关详细信息,请参阅 什么是 IP 地址 168.63.129.16?

从本地环境迁移到 Azure 或使用自定义映像创建的 VM 未安装 Azure VM 代理。 在这些方案中,必须手动安装 VM 代理。 有关如何安装 VM 代理的详细信息,请参阅 Azure 虚拟机代理概述

成功安装 Azure VM 代理后,可以看到 VM 上的 services.msc 中列出的以下服务。

服务 说明
Windows Azure 来宾代理 此服务负责配置从来宾 VM 到主机代理的各种扩展和通信。 它还负责收集 WaAppAgent.log中的日志。
遥测 此服务负责将 VM 的遥测数据发送到后端服务器。
RdAgent 此服务负责安装来宾代理。 (透明安装程序是 RdAgent 的另一个组件,可帮助升级来宾代理的其他组件和服务。) RdAgent 还负责将检测信号从来宾 VM 发送到物理服务器上的主机代理。

注意

从来宾代理版本 2.7.41491.971 开始,遥测组件包含在 Windows Azure 来宾代理服务中。 因此,在新创建的 VM 中可能不会列出此遥测服务。

故障排除清单

若要使任何 VM 扩展能够运行,必须安装 Azure VM 来宾代理并成功工作。 如果看到来宾代理报告为 “未就绪”,或者扩展失败并返回错误消息(如 VMAgentStatusCommunicationError),请按照以下步骤开始对来宾代理进行故障排除。

步骤 1:检查 VM 是否已启动

若要验证 VM 是否已启动,请执行以下步骤:

  1. Azure 门户中,搜索并选择“虚拟机”。

  2. 在 VM 列表中,选择 Azure VM 的名称。

  3. 在 Azure VM 的导航窗格中,选择“ 概述”。

  4. 如果 VM 尚未打开,请在 “概述 ”页顶部找到操作列表,然后选择“ 开始” 链接。

此外,请验证操作系统 (操作系统) 是否已成功启动并运行。

步骤 2:检查来宾代理是否已准备就绪

仍处于Azure 门户的“VM 概述”页上时,选择“属性”选项卡。如果“代理状态”字段的值为“就绪”,请验证“代理版本”字段值是否满足支持的最低版本。 以下屏幕截图显示了可在何处找到这些字段。

Azure 门户显示虚拟机 (VM) 属性的屏幕截图。代理状态为“就绪”,代理版本为 2.7.41491.1083。

如果来宾代理状态为 “就绪” ,但遇到涉及 VM 扩展的问题,请参阅 Azure 虚拟机扩展和功能 以查看故障排除建议。

如果来宾代理状态为 “未就绪” 或“空白”,则表示来宾代理未安装或无法正常工作。

步骤 3:检查来宾代理服务是否正在运行

  1. 使用远程桌面协议 (RDP) 连接到 VM

    注意

    不需要来宾代理才能成功运行 RDP 连接。 如果遇到影响到 VM 的 RDP 连接的问题,请参阅 排查与 Azure 虚拟机的远程桌面连接问题

  2. 在 VM 上,选择“ 开始”,搜索 “services.msc”,然后选择“ 服务 ”应用。

  3. “服务 ”窗口中,选择 “RdAgent” 服务。

  4. 选择“ 操作 ”菜单,然后选择“ 属性”。

  5. 在“属性”对话框的“常规”选项卡上,确保满足以下条件,然后选择“确定”或“取消”按钮:

    • 启动类型 ”下拉列表设置为 “自动”。
    • 服务状态” 字段的值为 “正在运行”。

    “RdAgent 属性”对话框的屏幕截图。该对话框将 RdAgent 服务状态显示为“正在运行”,并将启动类型显示为“自动”。

  6. “服务 ”窗口中,选择 “WindowsAzureGuestAgent” 服务。

  7. 重复步骤 4 和 5。

如果服务不存在,则可能未安装来宾代理。 在这种情况下,可以 手动安装来宾代理。 在执行手动安装之前,检查安装先决条件

步骤 4:测试 WireServer 连接

若要成功运行,来宾代理需要连接到端口8032526上的 WireServer IP (主机 IP) 地址168.63.129.16。 有关如何测试到此 IP 地址的连接的说明,请参阅什么是 IP 地址 168.63.129.16?

如果该部分中的任何测试未连接,检查可能导致以下任何组件阻止对 IP 地址168.63.129.16的访问的问题:

  • 防火墙
  • 代理
  • 应用程序

步骤 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 时,会看到以下错误消息:

    尝试对 VM 进行 sysprep 时发生严重错误

解决方案 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 代理,然后按照以下步骤重新安装它:

  1. 打开控制面板>程序和功能,并卸载 Azure VM 代理。

  2. 启动任务管理器,然后停止以下服务:

    • Azure VM 代理服务
    • RdAgent 服务
    • Windows Azure 遥测服务
    • Windows Azure 网络代理服务
  3. C:\WindowsAzure 下,创建名为 OLD 的文件夹。

  4. 将名为 PackagesGuestAgent 的任何文件夹移动到 OLD 文件夹。 此外,将 C:\WindowsAzure\logs 中以 GuestAgent_x.x.xxxxx 开头的任何 GuestAgent 文件夹移动到 OLD 文件夹。

  5. 下载并安装最新版本的 Windows Installer (MSI) 代理。 必须具有管理员权限才能完成安装。

  6. 通过运行以下 msiexec 命令安装来宾代理:

    msiexec.exe /i c:\VMAgentMSI\WindowsAzureVmAgent.2.7.<version>.fre.msi /quiet /L*v c:\VMAgentMSI\msiexec.log
    
  7. 验证 RdAgent、Azure VM 代理和 Windows Azure 遥测服务现在是否正在运行。

  8. 检查 WaAppAgent.log 文件,确保最新版本的 Azure VM 代理正在运行。

  9. 删除 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,并确保服务器不受防火墙、代理或其他源的阻止

  1. 由于无法访问 WireServer,因此请使用远程桌面连接到 VM,然后尝试在 Web 浏览器中访问 URL http://168.63.129.16/?comp=versions

  2. 如果无法访问步骤 1 中的 URL,检查网络接口,以确定它是否已启用使用动态主机配置协议 (DHCP) 并且具有 DNS。 若要检查网络接口的 DHCP 状态,请针对 show config 运行以下网络 shell (netsh) 接口 IP 命令:

    netsh interface ip show config
    
  3. 如果 DHCP 已禁用,请为设置地址运行以下netsh接口 IP 命令:

    netsh interface ip set address name="<name-of-the-interface>" source=dhcp
    

    注意: 在此命令中,将占位符值更改为接口的名称。

  4. 检查防火墙、代理或其他源可能导致阻止对 IP 地址 168.63.129.16的访问的任何问题。

  5. 检查 Windows 防火墙或第三方防火墙是否阻止了对端口 8032526的访问。 有关为何不应阻止此地址的详细信息,请参阅 什么是 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) Project (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 命令,检查 Windows 服务) 下一代加密 (CNG) 密钥隔离CNGKEYISO (是否在 RPC 终结点列表中:

portqry -n <VMName> -e 135

如果未看到 CNGKEYISO 该过程,请从 Windows 服务控制台启动它 (CNG 密钥隔离 = KeyIso) ,然后重启 WaAppAgent.exeWindowsAzureGuestAgent.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.

这些错误条目可能是由于缺少对 SYSTEM 帐户的 加密 文件夹的权限。 如果在重启 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:由于 ConfigurationErrorsException 或 TypeInitializationException 错误,Windows 来宾代理无法启动

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:将工作 machine.config 文件复制到 VM,然后重启来宾代理服务

要解决这个问题,请按照下列步骤操作:

  1. 从工作 VM 复制 machine.config 文件,然后将该文件粘贴到有问题的 VM 上的 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config 文件夹中。

  2. 通过运行 net stopnet start 命令重启来宾代理服务:

    net stop RdAgent
    net stop WindowsAzureGuestAgent
    
    net start RdAgent
    net start WindowsAzureGuestAgent
    

后续步骤

GitHub 存储库中列出了与 Azure VM 代理关联的其他已知问题。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

第三方联系人免责声明

Microsoft 提供第三方联系信息,帮助你查找有关本主题的其他信息。 该联系信息如有更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。