你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查在开发测试实验室虚拟机上应用项目时出现的问题

本文指导你了解 Azure 开发测试实验室虚拟机 (VM) 上项目失败的可能原因和故障排除步骤。

项目是在创建 VM 期间或之后可以安装在实验室 VM 上的工具、操作或软件。 实验室所有者可以预先选择在创建时应用到所有实验室 VM 的必需项目,实验室用户可以将项目应用到他们拥有的 VM

有多种可能的原因会导致项目无法正常安装或运行。 当某个项目似乎停止响应时,请先确定它停滞在哪个位置。 项目安装可能在初始请求期间遭到阻止,也可能在请求执行期间失败。

可以从 Azure 门户或者从项目失败的 VM 来排查项目失败的原因。

从 Azure 门户排查项目失败的原因

如果你无法将项目应用到 VM,请先在 Azure 门户中检查以下项:

  • 确保该 VM 正在运行。
  • 导航到实验室 VM 的“项目”页,确保该 VM 已准备就绪,可以应用项目。 如果“应用项目”功能不可用,页面顶部会显示一条消息。

使用 PowerShell 命令

还可以使用 Azure PowerShell 来确定 VM 是否可以应用项目。 检查在展开 GET 操作时返回的标志 canApplyArtifacts。 例如:

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

调查失败的项目

项目可能会停止响应,最终显示为“失败”。 若要调查失败的项目,请执行以下操作:

  1. 在实验室“概述”页上,从“我的虚拟机”下的列表中,选择包含你要调查的项目的 VM。

  2. 在 VM“概述”页上,选择左侧导航栏中的“项目”。 “项目”页将列出与该 VM 关联的项目及其状态。

    显示项目列表及其状态的屏幕截图。

  3. 选择状态显示为“失败”的项目。 该项目将打开并附带一条扩展消息,其中包含了有关项目失败的详细信息。

    失败项目的错误消息的屏幕截图。

检查活动日志

为了安装项目,开发测试实验室将创建并部署一个请求使用自定义脚本扩展 (CSE) 的 Azure 资源管理器 (ARM) 模板。 此级别的错误将显示在订阅和 VM 资源组的“活动日志”中。

如果项目无法安装,请检查“创建或更新虚拟机扩展”(如果你直接应用了项目)或者“创建或更新虚拟机”(如果在 VM 创建过程中应用了项目)的“活动日志”条目。 在这些条目下查看失败结果。 有时必须展开条目才能看到失败结果。

选择失败的条目以查看错误详细信息。 在失败页上,选择“JSON”以查看 JSON 有效负载的内容。 可以在 JSON 文档的末尾看到错误。

调查专用项目存储库和实验室存储帐户

当开发测试实验室应用某个项目时,它会从连接的存储库中读取项目配置和文件。 默认情况下,开发测试实验室可以访问开发测试实验室的公共项目存储库。 还可以将实验室连接到专用存储库以访问自定义项目。 如果自定义项目无法安装,请确保专用存储库的个人访问令牌 (PAT) 未过期。 如果 PAT 已过期,则不会列出项目,并且引用该存储库中项目的任何脚本都将失败。

根据配置,实验室 VM 可能无法直接访问项目存储库。 开发测试实验室将项目缓存在首次初始化实验室时创建的实验室存储帐户中。 如果阻止了对此存储帐户的访问(例如阻止了从 VM 发送到 Azure 存储服务的流量),你可能会看到如下所示的错误:

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 存储帐户的连接问题,请执行以下操作:

  • 检查添加的网络安全组 (NSG)。 如果添加了订阅策略以便在所有虚拟网络中自动配置 NSG,该策略会影响用于创建实验室 VM 的虚拟网络。

  • 验证 NSG 规则。 使用 IP 流验证确定是否有 NSG 规则阻止了传入或传出 VM 的流量。 还可以查看生效的安全组规则,确保存在入站“允许”NSG 规则。 有关详细信息,请参阅使用有效的安全规则排查 VM 流量流问题

  • 检查实验室的默认存储帐户。 默认存储帐户是创建实验室时创建的第一个存储帐户。 其名称通常以字母“a”开头并以多位数字结尾,例如 <labname>#。

    1. 导航到实验室的资源组。
    2. 找到类型为“存储帐户”的资源,该资源的名称符合约定。
    3. 在存储帐户的“概述”页上,从左侧导航栏中选择“网络”。
    4. 在“防火墙和虚拟网络”选项卡上,确保将“公用网络访问”设置为“已从所有网络启用”。 或者,如果选择了“已从所选虚拟网络和 IP 地址启用”选项,请确保用于创建 VM 的实验室虚拟网络已添加到列表中。

有关深入的故障排除信息,请参阅配置 Azure 存储防火墙和虚拟网络

从实验室 VM 排查项目失败的原因

可以连接到项目失败的实验室 VM,并在其中调查问题。

检查自定义脚本扩展日志文件

  1. 在实验室 VM 上,转到 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\*1.10.12*\Status\,其中 *1.10.12* 是 CSE 版本号。

    实验室 VM 上“Status”文件夹的屏幕截图。

  2. 打开“STATUS”文件并检查错误。

有关在 Linux VM 上查找日志文件的说明,请参阅在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本 2

检查 VM 代理

确保 Azure 虚拟机代理(VM 代理)已安装且准备就绪。

当 VM 首次启动时,或首次安装 CSE 以便为应用项目的请求提供服务时,VM 可能需要升级 VM 代理或等待 VM 代理初始化。 VM 代理依赖的服务可能需要花费很长时间才能完成初始化。 有关更多故障排除信息,请参阅 Azure 虚拟机代理概述

若要验证项目是否由于 VM 代理原因而看似停止响应,请执行以下操作:

  1. 在实验室 VM 上,导航到“C:\WindowsAzure\logs”。

  2. 打开文件“WaAppAgent.log”。

  3. 查看显示 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 服务花费了很长时间。

有关 Azure 扩展的常规信息,请参阅 Azure 虚拟机扩展和功能

调查脚本问题

由于项目安装脚本的创作方式,项目安装可能失败。 例如:

  • 脚本包含必需的参数但无法传递值,原因是允许用户将其留空,或者 artifactfile.json 定义文件中没有默认值。 由于正在等待用户输入,脚本停止响应。

  • 脚本要求在执行过程中提供用户输入。 脚本应该以无提示方式运行,且无需用户干预。

若要排查脚本是否导致项目看似停止响应,请执行以下操作:

  1. 将脚本复制到 VM,或者将它放在 VM 上的项目脚本下载位置:C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads。
  2. 使用管理命令提示符在 VM 上运行脚本,并提供导致问题的相同参数值。
  3. 确定脚本是否显示任何意外的行为。 如果是,请请求更新或更正脚本。

提示

可为开发测试实验室公共存储库中托管的项目提交建议的脚本更正。 有关详细信息,请参阅 README 文档中的 Contributions(贡献)部分。

注意

自定义项目需采用正确的结构。 有关如何正确构造项目的信息,请参阅创建自定义项目。 有关结构正确的项目示例,请参阅测试参数类型项目。

有关编写和更正项目脚本的详细信息,请参阅创作

后续步骤

如需更多帮助,请尝试访问以下支持渠道之一:

  • 联系 MSDN Azure 和 Stack Overflow 论坛上的 Azure 开发测试实验室专家。
  • 通过 Azure 论坛获取 Azure 专家的解答。
  • 联系 @AzureSupport,这是用于改进客户体验的官方 Microsoft Azure 帐户。 Azure 支持人员会将你连接到 Azure 社区,从中可以获得解答、支持和专家建议。
  • 转到 Azure 支持站点,并选择“提交支持票证”以提交 Azure 支持事件。