Documentation

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

29.1. 错误日志

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

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

29.2. sosreport

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

  1. Install the sosreport 工具程序。

  2. Generate an sosreport.

  3. 向红帽支持提供 sosreport。

29.3. 主机连接问题

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

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

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

29.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

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

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

29.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。

29.7. 运行作业时出现问题

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

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

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

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

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

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

29.9. Playbook 处于待定状态

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

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

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

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

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

29.10. 取消控制器任务

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

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

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

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

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

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

29.11.1. Isolation functionality and variables

Automation controller uses container technology to isolate jobs from each other. By default, only the current project is exposed to the container running a job template.

You may find that you need to customize your playbook runs to expose additional directories. To fine tune your usage of job isolation, there are certain variables that can be set.

By default, automation controller will use the system's tmp directory (/tmp by default) as its staging area. This can be changed in the Job Execution Path field of the Jobs settings screen, or in the REST API at /api/v2/settings/jobs:

AWX_ISOLATION_BASE_PATH = "/opt/tmp"

If there are any additional directories that should specifically be exposed from the host to the container that playbooks run in, you can specify those in the Paths to Expose to Isolated Jobs field of the Jobs setting scren, or in the REST API at /api/v2/settings/jobs:

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

注解

The primary file you may want to add to AWX_ISOLATION_SHOW_PATHS is /var/lib/awx/.ssh, if your playbooks need to use keys or settings defined there.

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

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

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

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

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

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

  3. Source Variables 在方框中输入:

vpc_destination_variable: private_ip_address

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

注解

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

29.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

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