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

排查 Azure Chaos Studio 问题

在使用 Azure Chaos Studio 时,可能偶尔会遇到一些问题。 本文说明了常见问题及其排查步骤。

常规疑难解答技巧

排查 Chaos Studio 问题时,以下信息源非常有用:

  • 活动日志:Azure 活动日志 包含订阅中所有创建、更新和删除操作的记录。 这些记录包括 Chaos Studio 操作,例如启用目标或功能、安装代理以及创建或运行试验。 活动日志中的故障表明,使用 Chaos Studio 所必需的用户操作可能无法完成。 大多数直接服务故障还会通过执行 Azure 资源管理器操作来注入故障,因此,活动日志还会记录在针对某些直接服务故障进行的试验中注入的故障。
  • 试验详细信息:试验执行详细信息显示单个试验运行的状态和错误。 在试验详细信息中打开特定故障时,会显示失败的资源以及故障的错误消息。 详细了解如何访问试验详细信息
  • 代理日志:如果是使用基于代理的故障,可能需要通过 RDP 或 SSH 登录虚拟机 (VM) 来了解代理无法运行故障的原因。 访问代理日志的说明视具体的操作系统而定:
    • Chaos Windows 代理:代理日志位于应用程序类别中的 Windows 事件日志中,其源为 AzureChaosAgent。 此代理将故障活动和常规运行状况检查(能够向 Chaos Studio 代理服务进行身份验证并与其通信)事件添加到此日志中。
    • Chaos Linux 代理:Linux 代理使用 systemd 将代理进程作为 Linux 服务进行管理。 若要查看代理的 systemd 日志(代理服务记录的事件),请使用命令 journalctl -u azure-chaos-agent
  • VM 扩展状态:如果使用基于代理的故障,请验证 VM 扩展是否已安装且运行正常。 在 Azure 门户中,转到 VM,然后转到“扩展”或“扩展 + 应用程序”。 选择 ChaosAgent 扩展并查找以下字段:
    • “状态”应该显示“预配成功”。 任何其他状态都表示代理安装失败。 验证是否满足所有系统要求。 尝试重新安装代理。
    • “处理程序状态”应显示“就绪”。 任何其他状态都表示代理已安装但无法连接到 Chaos Studio。 验证是否满足所有网络要求,以及是否已将用户分配的托管标识添加到 VM。 尝试重新启动。

添加资源时出现的问题

添加资源时可能会遇到以下问题。

资源未显示在 Azure 门户的目标列表中

如果未在 Chaos Studio 目标列表中看到要启用的资源,则可能是以下任何问题所致:

目标或功能启用失败或未在目标列表中正确显示

如果在启用目标或功能时出现错误,请尝试以下步骤:

  1. 验证你对所添加的资源是否拥有适当的权限。 启用目标或功能时,需要资源范围内的 Microsoft.Chaos/* 权限。 内置角色(例如参与者)具有通配符读取和写入权限,包括针对所有 Microsoft.Chaos 操作的权限。
  2. 等待几分钟,让目标和功能列表完成更新。 Azure 门户使用 Azure Resource Graph 收集有关添加目标和功能的信息。 更新可能需要长达五分钟的时间进行传播。
  3. 如果资源仍显示“未启用”,请尝试以下步骤
    1. 再次尝试启用资源。
    2. 如果资源启用仍失败,请访问活动日志并查找失败的目标创建操作,以查看详细的错误信息。
  4. 如果资源显示“已启用”,但功能添加失败,请尝试以下步骤
    1. 对目标列表中的资源选择“管理操作”。 勾选未选中的任何功能,然后选择“保存”
    2. 如果功能启用仍失败,请访问活动日志并查找失败的目标创建操作,以查看详细的错误信息。

先决条件问题

有些问题是由于未满足先决条件所致。

基于代理的故障在虚拟机上失败

与未满足先决条件有关的各种原因都可能导致基于代理的故障失败:

  • 在 Linux VM 上,CPU 压力物理内存压力磁盘 I/O 压力任意 Stress-ng 的压力故障都需要在 VM 上安装 stress-ng 实用工具。 要详细了解如何安装 stress-ng,请参阅故障先决条件部分。
  • 在 Linux 或 Windows VM 上,还必须向 VM 添加在基于代理的目标启用过程中提供的用户分配的托管标识。
  • 在 Linux 或 Windows VM 上,必须为用于试验的系统分配的托管标识授予 VM 上的“读取者”角色。 (似乎像虚拟机参与者这种提升的角色不包括 Chaos Studio 代理读取 VM 上的 microsoft-agent 目标代理资源所需的 */读取操作。)

Chaos 代理不会安装在虚拟机规模集上

如果虚拟机规模集升级策略设置为“手动”,在虚拟机规模集上安装 Chaos 代理可能会失败,但不会显示错误。 要检查虚拟机规模集的升级策略,请执行以下操作:

  1. 登录 Azure 门户。
  2. 选择虚拟机规模集
  3. 在左窗格中,选择升级策略
  4. 检查“升级模式”,看看是否已将其设置为“手动”- 现有实例必须手动升级

如果升级策略设置为“手动”,则必须升级 Azure 虚拟机规模集实例,以便 Chaos 代理完成安装

从 Azure 门户升级实例

可以从 Azure 门户升级虚拟机规模集实例:

  1. 登录 Azure 门户。
  2. 选择虚拟机规模集
  3. 在左窗格中,选择“实例”
  4. 选择所有实例,然后选择“升级”

使用 Azure CLI 升级实例

可以使用 Azure CLI 升级虚拟机规模集实例:

  • 在 Azure CLI 中,使用 az vmss update-instances 手动升级实例:

    az vmss update-instances --resource-group myResourceGroup --name myScaleSet --instance-ids {instanceIds}
    

有关详细信息,请参阅使用最新的规模集模型对 VM 进行更新

AKS Chaos Mesh 故障失败

与未满足先决条件有关的各种原因都可能导致 Azure Kubernetes 服务 (AKS) Chaos Mesh 故障失败:

  • 必须先在 AKS 群集上安装 Chaos Mesh,然后才能使用 AKS Chaos Mesh 故障。 有关说明,请参阅 AKS 上的 Chaos Mesh 故障教程
  • Chaos Mesh 必须是 2.0.4 或更高版本。 通过连接到 AKS 群集并运行 helm version chaos-mesh 即可获得 Chaos Mesh 版本。
  • Chaos Mesh 必须随命名空间 chaos-testing 一起安装。 Chaos Mesh 的其他命名空间名称不受支持。
  • AKS 群集管理员角色必须分配给混沌试验的系统分配的托管标识。

创建或设计试验时出现的问题

创建或设计试验时可能会遇到问题。

添加故障时,我的资源未显示在“目标资源”列表中

添加故障时,如果在“目标资源”列表中未看到要添加故障的目标资源,则可能是以下任何问题所致

  • “订阅”筛选器设置为排除部署了你的目标的订阅。 选择“订阅”筛选器并修改所选订阅。
  • 尚未添加资源。 前往“目标”视图并启用目标。 然后关闭“添加故障”窗格,再重新打开它以查看更新的目标列表
  • 尚未为该故障的目标类型启用资源。 请查看故障库,看看哪个目标类型用于故障。 然后转到“目标”视图并启用该目标类型。 该类型可以是用于 microsoft-agent 故障的基于代理的类型,也可以是用于所有其他目标类型的服务直接类型。 然后关闭“添加故障”窗格,再重新打开它以查看更新的目标列表
  • 资源尚未启用该故障对应的功能。 请在故障库中查看故障的功能名称。 然后转到“目标”视图,对目标资源选择“管理操作”。 选中与你试图运行的故障相对应的功能复选框,然后选择“保存”。 然后关闭“添加故障”窗格,再重新打开它以查看更新的目标列表
  • 该资源最近才添加,尚未显示在 Resource Graph 中。 从 Resource Graph 查询“目标资源”列表。 启用新目标后,更新最多可能需要五分钟才能传播到 Resource Graph。 等待几分钟,然后重新打开“添加故障”窗格

创建试验时,我收到错误“microsoft:agent 提供程序需要托管标识”

当代理尚未部署到 VM 时,会发生此错误。 有关安装说明,请参阅创建并运行使用基于代理的错误的试验

创建试验时,我收到错误“不支持内容媒体类型‘null’。 仅支持‘application/json’”

如果使用 Azure 资源管理器模板或 Chaos Studio REST API 创建试验,则可能会遇到此错误。 此错误表示试验定义中存在格式错误的 JSON。 请检查是否存在任何语法错误,例如,大括号或方括号({} 和 [])不匹配。 若要检查,请使用 JSON Linter(如 Visual Studio Code)。

运行试验时出现的问题

运行试验时可能会遇到问题。

我的试验在启动后执行状态为“失败”

在 Azure 门户的“试验”列表中,选择试验名称,查看“试验概述”。 在“历史记录”部分中,选择失败的试验运行旁边的“详细信息”,查看详细的错误信息

屏幕截图显示试验历史记录。

或者,使用 REST API 获取试验的执行详细信息。 在 REST API 示例文章中了解详细信息。

az rest --method post --url "https://management.azure.com/{experimentId}/executions/{executionDetailsId}/getExecutionDetails?api-version={apiVersion}" 

基于代理的故障失败,出现错误“请验证目标是否已正确添加,并向试验 msi 提供适当的读取权限”

如果使用 Azure 门户添加存在已知问题的代理,则可能会出现此错误。 启用基于代理的目标不会将用户分配的托管标识分配给 VM 或虚拟机规模集。

若要解决此问题,请转到 Azure 门户中的 VM 或虚拟机规模集,然后转到“标识”。 打开“用户分配”选项卡,将用户分配的标识添加到 VM。 完成后,可能需要重新启动 VM,以便代理进行连接。

基于代理的故障失败,显示错误“代理已在执行其他任务”

如果尝试同时运行多个代理故障,则会发生此错误。 目前,代理一次仅支持运行单个代理故障,如果定义同时运行多个代理故障的试验,该代理将会失败。

试验未立即启动或失败

启动试验后,可能会看到如下错误消息:The long-running operation has failed. InternalServerError. The target resource(s) could not be resolved. Error Code: OperationFailedException。 通常,这表示试验的标识没有必要的权限。

若要解决此错误,请确保试验的系统分配或用户分配的托管标识有权访问试验中的所有资源。 在此处了解有关权限的详细信息:Azure Chaos Studio 中的权限和安全性。 例如,如果试验面向虚拟机,请导航到虚拟机的标识页,并将“虚拟机参与者”角色分配给试验的托管标识。

我的 AKS Chaos Mesh 试验失败

使用 AKS Chaos Mesh 故障时可能会遇到几个常见错误。

错误消息 建议的操作
不允许获取静态凭据,因为此群集已设置为禁用本地帐户。 从版本 2.2 开始,AKS Chaos Mesh 故障可以使用 Kubernetes 本地帐户或 Microsoft Entra 身份验证。 在此处了解如何迁移试验:将 Microsoft Entra 身份验证与 Chaos Studio AKS 故障配合使用
由于提供的配置无效,无法启动 Chaos Mesh 试验 确保 jsonSpec 包含所有必需字段。
Chaos Studio 目前不支持 Chaos Mesh 版本“x.x.x” 对照 Azure Chaos Studio 版本兼容性页面验证已安装的版本,如果未列出所需版本,请提交功能请求

设置托管标识时出现的问题

尝试向现有试验添加系统分配/用户分配的托管标识时,保存失败。

如果尝试将用户分配的托管标识或系统分配的托管标识添加到已分配有托管标识的试验,该试验将无法部署。 在添加所需的托管标识之前,首先需要在所需试验中删除现有的用户分配或系统分配的托管标识

当我运行配置为自动创建和分配自定义角色的试验时,我收到错误“无法解析目标资源。 ErrorCode:AccessDenied。 目标资源:”

为试验选中“自定义角色权限”复选框时,Chaos Studio 会创建一个具有所需权限的自定义角色,并将其分配给试验标识。 但是,这受以下角色分配和角色定义限制的约束:

  • 每个 Azure 订阅具有 4000 个角色分配的上限。
  • 每个 Microsoft Entra 租户具有 5000 个角色定义的上限(中国区 Azure 为 2000 个角色定义)。

达到其中一个上限时,将发生此错误。 若要解决此问题,请改为手动向试验标识授予权限。