Documentation

27. 对控制器进行故障排除

27.1. 错误日志

控制器服务器的错误被记录在 /var/log/tower 中。监控器日志可在 /var/log/supervisor/ 中找到。Nginx 网页服务器错误记录在 httpd 错误日志中。在 /etc/tower/conf.d/ 中配置其他控制器日志记录需要。

使用内置于大多数浏览器中的 JavaScript 控制台来查看客户端的问题,并通过红帽客户门户网站(https://access.redhat.com/)向 Ansible 报告任何错误。

27.2. sosreport

sosreport 是一个工具程序,可以用来收集对问题进行诊断分析所需要的数据。根据红帽客户门户网站中的 Knowledgebase article for sosreport 的内容来执行以下步骤:

  1. Install the sosreport 工具程序。

  2. Generate an sosreport.

  3. 向红帽支持提供 sosreport。

27.3. 主机连接问题

当运行快速启动指南中的 helloworld.yml 示例 playbook 或其他 playbook 时出现主机连接错误,请尝试以下操作:

  • 您能 ssh 到您的主机吗?Ansible 需要通过 SSH 连接到被管理的服务器。

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

27.4. 无法通过 HTTP 登录到控制器

对控制器的访问被有意限制为需要通过安全协议 (HTTPS) 进行。当您的配置被设置为在负载均衡器或“仅限 HTTP”代理后面运行控制器节点,且您希望在不使用 SSL 的情况下访问它时(例如,进行故障排除),您必须将以下设置添加到控制器实例的 /etc/tower/conf.d 目录的 custom.py 文件中。

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

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

要应用这些更改,请运行:

automation-controller-service restart

27.5. 实时事件的 WebSocket 端口不能正常工作

automation controller 使用控制器服务器上的端口 80/443 将 playbook 活动和其他事件的实时更新流传输到客户端浏览器。这些端口默认配置为 80/443,但是如果防火墙阻止了这些端口,请关闭所有为之前的 websocket 端口打开或添加的防火墙规则,这将确保防火墙允许通过此端口传输流量。

27.6. 运行 playbook 的问题

当运行快速启动指南中的 helloworld.yml 示例 playbook 或其他 playbook 时出现 playbook 错误,请尝试以下操作:

  • 您是否与当前运行该命令的用户进行身份验证?如果没有,请检查用户名是如何设置的,并传递 --user=username-u username 命令来指定用户。

  • 您的 YAML 文件的缩进是否正确?您可能需要正确对齐空格。缩进级别在 YAML 中非常重要。您可以使用 yamlint 检查 playbook。如需更多信息,请参阅 YAML primer:http://docs.ansible.com/YAMLSyntax.html

  • - 开头的项目被视为列表项目或 play。采用 key: value 格式的项目用作哈希或字典。请确保您没有多余或缺失的 - play。

27.7. 运行作业时出现问题

如果您在 playbook 中运行作业时遇到问题,您应该查看 playbook YAML 文件。在手动或通过源控制机制导入 playbook 时,请记住主机定义是由控制器控制,应该设置为 hosts: all

27.8. 在“Job Template”下拉菜单中未显示 playbook

如果您的 playbook 没有显示在作业模板下拉列表中,您可以检查以下几个事项:

  • 确保 playbook 是有效 YML,可以被 Ansible 解析。

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

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

27.9. Playbook 处于待定状态

当运行 playbook 作业时一直显示作业处于“Pending”状态,请尝试以下操作:

  • 确定所有控制程序服务都通过 supervisorctl status 运行。

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

  • 在控制器服务器中运行 automation-controller-service restart

如果问题仍然存在,请以 root 用户身份在控制器服务器上运行 sosreport,然后提交 support request 并包括运行命令的结果。

27.10. 取消控制器任务

在当前运行的控制器作业上发出 cancel 请求时,控制器会发出 SIGINTansible-playbook 进程。这会导致 Ansible 停止分配新的任务并退出,在很多情况下,已经分配给远程主机的模块任务将会完成运行。此行为与命令行 Ansible 运行期间按 Ctrl-C 类似。

对于软件依赖项,如果取消正在运行的作业,则该作业将基本删除,但依赖项仍会保留。

27.11. 重新使用外部数据库会导致安装失败

在后续安装节点时重新使用外部 DB 会导致安装失败。

例如,您执行了集群的安装。然后,您需要再次进行安装,并使用相同的外部数据库执行第二次集群的安装。则第二次安装会失败。

在设置之前安装中使用的外部数据库时,必须在后续的安装进行前,手动清除在前一次安装时集群节点使用的数据库。

27.11.1. 隔离功能和变量

Automation controller 使用容器技术将作业相互隔离。默认情况下,只有当前项目公开给运行作业模板的容器。

您可能会发现,您需要自定义 playbook 运行以公开其他目录。要微调作业隔离的使用,可以设置某些变量。

默认情况下,automation controller 将使用系统的 tmp 目录(默认为``/tmp`` )作为其临时区域。这可以在作业设置屏幕的 Job Execution Path 字段中进行修改,也可以在位于 /api/v2/settings/jobs 的 REST API 中更改:

AWX_ISOLATION_BASE_PATH = "/opt/tmp"

如果应该从主机向运行 playbook 的容器公开任何其他目录,您可以在 Jobs 设置 scren 的 Paths to Expose to Isolated Jobs 字段中指定,或者在位于 /api/v2/settings/jobs 的 REST API 中指定它们:

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

注解

如果 playbook 需要使用在 /var/lib/awx/.ssh 中定义的密钥或设置,则需要把它做为主文件添加到 AWX_ISOLATION_SHOW_PATHS

以上字段可在 Jobs Settings 窗口中找到:

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

27.12. 控制器清单中的私有 EC2 VPC 实例

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

  1. 在控制器界面中,选择您的清单。

  2. 点击来源设置为 AWS 的组,并点击 Source 选项卡。

  3. Source Variables 在方框中输入:

vpc_destination_variable: private_ip_address

接下来,保存并触发组更新。完成后,您应该可以看到所有 VPC 实例。

注解

如果要配置这些实例,必须在 VPC 中运行控制器,并可访问这些实例。

27.13. “Error: provided hosts list is empty” 的故障排除

如果您在试图通过控制器运行 playbook 时收到"Skipping: No Hosts Matched"消息,请检查以下几个问题:

  • 确保 playbook 中的主机声明行与清单中您的组/主机的名称完全匹配(这些内容区分大小写)。

  • 如果匹配,且您正在使用 Ansible Core 2.0 或更高版本,请检查您的组名称中包括的空格,把它们改为下划线或不包括空格以确保这些组可以被识别。

  • 如果在作业模板中指定了 Limit,请确保它是一个有效的限制值,并且仍然匹配清单中的内容。Limit 字段采用模式参数,如下所述:http://docs.ansible.com/intro_patterns.html

如果您在检查这些选项后仍然遇到问题,请创建支持问题单。