文档

29. 故障排除 Tower

29.1. 错误日志

Tower 服务器错误记录在 /var/log/tower 中。 监督程序日志可在 /var/log/supervisor/ 中找到。 Nginx Web 服务器错误记录在 httpd 错误日志中。 在 /etc/tower/conf.d/ 中配置其他 Tower 日志记录需求。

使用大多数浏览器内置的 JavaScript 控制台探索客户端问题,并将任何错误报告给 Ansible,方法是访问 Red Hat 客户门户网站 https://access.redhat.com/

29.2. sosreport

sosreport 是一个实用程序,它收集支持人员用来分析和调查您报告的问题的诊断信息。 为正确地向技术支持提供此信息,请参考 Red Hat 客户门户网站上的 sosreport 的知识库文章 执行以下步骤

  1. 安装 sosreport 实用程序。

  2. 生成 sosreport.

  3. 将 sosreport 提供给 Red Hat 支持部门。

29.3. 连接到您的主机的故障

如果您无法从快速入门指南或其他剧本中运行 helloworld.yml 示例剧本,因为主机连接错误,请尝试以下操作

  • 您可以 ssh 到您的主机吗? Ansible 依赖于对您正在管理的服务器的 SSH 访问。

  • 您的主机名和 IP 是否已正确添加到您的清单文件中? (检查是否有拼写错误。)

29.4. 无法通过 HTTP 登录到 Tower

对 Tower 的访问有意地通过安全协议 (HTTPS) 限制。 在您的配置设置为在负载均衡器或代理后面运行 Tower 节点作为“仅 HTTP”,并且您只想在没有 SSL 的情况下访问它(例如,用于故障排除)的情况下,您必须在 custom.py 文件中添加以下设置,该文件位于 Tower 实例的 /etc/tower/conf.d

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

将这些设置更改为 False 将允许 Tower 在使用 HTTP 协议时管理 cookie 和登录会话。 必须在集群安装的每个节点上执行此操作才能正常生效。

要应用更改,请运行

ansible-tower-service restart

29.5. 用于实时事件的 WebSockets 端口无法正常工作

Ansible Tower 使用 Tower 服务器上的端口 80/443 将剧本活动和其他事件的实时更新流式传输到客户端浏览器。 这些端口默认配置为 80/443,但如果它们被防火墙阻止,请关闭为先前的 websocket 端口打开或添加的任何防火墙规则,这将确保您的防火墙允许流量通过此端口。

29.6. 运行剧本时的故障

如果您无法从快速入门指南或其他剧本中运行 helloworld.yml 示例剧本,因为剧本错误,请尝试以下操作

  • 您是否正在使用当前运行命令的用户进行身份验证? 如果不是,请检查用户名是如何设置的,或者传递 --user=username-u username 命令来指定用户。

  • 您的 YAML 文件是否正确缩进? 您可能需要正确排列您的空格。 缩进级别在 YAML 中很重要。 您可以使用 yamlint 检查您的剧本。 有关更多信息,请参阅 YAML 简介:https://docs.ansible.org.cn/YAMLSyntax.html

  • - 开头的项目被视为列表项目或剧本。 格式为 key: value 的项目充当哈希或字典。 确保您没有额外的或缺少的 - 剧本。

29.7. 运行作业时的故障

如果您在从剧本运行作业时遇到问题,您应该查看剧本 YAML 文件。 导入剧本时(无论是手动还是通过源代码控制机制),请记住主机定义由 Tower 控制,应设置为 hosts: all

29.8. 剧本没有出现在“作业模板”下拉菜单中

如果您的剧本没有出现在作业模板下拉列表中,您可以检查以下几个方面:

  • 确保剧本是有效的 YML,并且可以被 Ansible 解析。

  • 确保项目路径 (/var/lib/awx/projects) 的权限和所有权已设置好,以便“awx”系统用户可以查看文件。您可以运行以下命令来更改所有权:

chown awx -R /var/lib/awx/projects/

29.9. 剧本处于挂起状态

如果您尝试运行剧本作业,但它一直处于“挂起”状态,请尝试以下操作:

  • 使用 supervisorctl status 确保所有 supervisor 服务都在运行。

  • 检查确保 /var/ 分区至少有 1 GB 的可用空间。如果 /var/ 分区空间不足,作业将无法完成。

  • 在 Tower 服务器上运行 ansible-tower-service restart

如果您仍然遇到问题,请在 Tower 服务器上以 root 用户身份运行 sosreport,然后将结果提交 支持请求

29.10. 取消 Tower 作业

当对当前正在运行的 Tower 作业发出 cancel 请求时,Tower 会向 ansible-playbook 进程发送 SIGINT。虽然这会导致 Ansible 停止调度新任务并退出,但在许多情况下,已调度到远程主机上的模块任务将继续运行至完成。此行为类似于在命令行 Ansible 运行过程中按下 Ctrl-C

关于软件依赖关系,如果正在运行的作业被取消,该作业实际上会被删除,但依赖关系将保留。

29.11. 重用外部数据库会导致安装失败

据报道,在后续节点安装过程中重用外部数据库会导致安装失败。

例如,假设您执行了集群安装。接下来,假设您需要再次执行此操作,并执行第二次集群安装,重用了相同的外部数据库,但这次后续安装失败了。

在设置用于先前安装的外部数据库时,必须先手动清除用于集群节点的数据库,然后才能成功进行任何其他安装。

29.11.1. Bubblewrap 功能和变量

Ansible Tower 中的 bubblewrap 功能限制了在剧本运行期间剧本可以查看和使用的 Tower 文件系统上的目录。您可能会发现,在某些情况下需要自定义 bubblewrap 设置。为了微调您的 bubblewrap 使用方式,可以设置某些变量。

要为运行作业(仅限剧本运行)禁用或启用 bubblewrap 支持,请确保您已以管理员用户身份登录。

  1. 从左侧导航栏中点击设置 (settings) 图标。

  2. 点击 **作业** 选项卡。

  3. 在 **启用作业隔离** 中,将切换按钮选择更改为 **关闭** 以禁用 bubblewrap 支持,或选择 **开启** 以启用它。

_images/configure-tower-jobs-disable-proot-job-isolation.png

默认情况下,Tower 将使用系统的 tmp 目录(默认情况下为 /tmp)作为其暂存区域。这可以在配置 Tower 屏幕的 **作业执行路径** 字段中更改,或者通过更新 settings 文件中的以下条目进行更改:

AWX_PROOT_BASE_PATH = "/opt/tmp"

如果系统中有其他敏感信息需要隐藏,可以在配置 Tower 屏幕中的 **对隔离作业隐藏的路径** 中指定这些信息,或者通过更新 settings 文件中的以下条目进行更改:

AWX_PROOT_HIDE_PATHS = ['/list/of/', '/paths']

如果需要特别公开任何目录,可以在配置 Tower 屏幕中的 **对隔离作业公开的路径** 中指定这些信息,或者通过更新 settings 文件中的以下条目进行更改:

AWX_PROOT_SHOW_PATHS = ['/list/of/', '/paths']

注意

您可能想要添加到 AWX_PROOT_SHOW_PATHS 的主要文件是 /var/lib/awx/.ssh,如果您的剧本需要使用在那里定义的密钥或设置。

以上字段可以在作业设置窗口中找到。

_images/configure-tower-jobs-isolated-jobs-fields.png

如果您在 settings 文件中进行了更改,请确保在保存更改后使用 ansible-tower-service restart 命令重新启动服务。

29.12. Tower 库存中的私有 EC2 VPC 实例

默认情况下,Tower 只会显示与 VPC 中的实例关联的弹性 IP (EIP)。要查看您的所有 VPC 实例,请执行以下步骤:

  1. 在 Tower 界面中,选择您的库存。

  2. 点击源设置为 AWS 的组,然后点击源选项卡。

  3. 变量 框中,输入:

vpc_destination_variable: private_ip_address

接下来,保存并触发组的更新。完成此操作后,您应该能够看到您所有的 VPC 实例。

注意

如果您要配置这些实例,则 Tower 必须在可以访问这些实例的 VPC 中运行。

29.13. 排查“错误:提供的宿主列表为空”

如果您在尝试通过 Tower 运行剧本时收到“跳过:没有主机匹配”消息,请检查以下几个方面:

  • 确保剧本中的宿主声明行与库存中的组/宿主名称完全匹配(区分大小写)。

  • 如果它确实匹配,并且您使用的是 Ansible Core 2.0 或更高版本,请检查您的组名称中是否有空格,并将它们修改为使用下划线或不使用空格,以确保可以识别这些组。

  • 确保如果在作业模板中指定了限制,则它是一个有效的限制值,并且仍然与库存中的内容匹配。限制字段接受模式参数,此处有说明: https://docs.ansible.org.cn/intro_patterns.html

如果您在检查完这些选项后仍然遇到问题,请提交支持工单。