排查 Azure Windows VM 代理问题

适用于:✔️ Windows VM

注意

本文有帮助吗? 你的输入对我们很重要。 请使用此页上的 “反馈 ”按钮告诉我们本文为你工作得有多好,或者我们如何改进它。

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

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

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

服务 说明
Microsoft 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 尚未打开,请在“概述”页顶部找到操作列表,然后选择“开始”链接。

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

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

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

显示虚拟机(VM)属性的Azure 门户屏幕截图。代理状态为“就绪”,代理版本为 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 连接

若要成功运行,来宾代理需要在端口80上连接到 WireServer IP(主机 IP)地址168.63.129.1632526。 有关如何测试到此 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 时,会看到以下错误消息:

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

  1. 打开 控制面板>Programs 和功能,并卸载 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.logTelemetry.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 状态,请运行以下 network shellnetsh) 接口 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 防火墙或第三方防火墙是否阻止了对端口 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.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.

这些错误条目可能是由于系统帐户的 Crypto 文件夹权限不足造成的。 如果在重启来宾代理服务(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:将工作 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 反馈社区