文档

11. Tower 日志记录和聚合

日志记录是一个功能,它提供将详细日志发送到多种第三方外部日志聚合服务的能力。连接到此数据流的服务是深入了解 Tower 使用情况或技术趋势的有效手段。该数据可用于分析基础设施中的事件、监控异常以及将来自一项服务中的事件与另一项服务中的事件相关联。对 Tower 最有用的数据类型是作业事实数据、作业事件/作业运行、活动流数据和日志消息。数据以 JSON 格式通过 HTTP 连接发送,并使用在自定义处理程序中设计或通过导入库实现的最小服务特定调整。

安装 Ansible Tower 将安装一个较新的 rsyslog 版本,该版本将替换 RHEL 基础版本中的版本。Ansible Tower 安装的 rsyslog 版本不包含以下 rsyslog 模块

  • rsyslog-udpspoof.x86_64

  • rsyslog-libdbi.x86_64

安装 Ansible Tower 后,仅使用 Tower 提供的 rsyslog 包进行任何 Tower 外部的日志记录,这些日志记录可能以前使用过 RHEL 提供的 rsyslog 包。如果您已经使用 rsyslog 记录 Tower 实例上的系统日志,您可以继续使用 rsyslog 处理来自 Tower 外部的日志,方法是运行一个单独的 rsyslog 进程(使用与 Tower 相同版本的 rsyslog),并将其指向一个单独的 /etc/rsyslog.conf。

注意

对于在 Tower 之外使用 rsyslog 的系统(在 Tower VM/机器上),请考虑与 Tower 附带的 rsyslog 新版本一起使用时可能出现的任何冲突。

您可以从 /api/v2/settings/logging/ 端点配置 Tower rsyslog 进程如何处理尚未发送的消息,以防您的外部记录器脱机

  • LOG_AGGREGATOR_MAX_DISK_USAGE_GB: 指定在外部日志聚合器出现故障期间存储的数据量(以 GB 为单位)(默认为 1)。相当于 rsyslogd queue.maxdiskspace 设置。

  • LOG_AGGREGATOR_MAX_DISK_USAGE_PATH: 指定持久保存日志的位置,这些日志应在外部日志聚合器出现故障后重试(默认为 /var/lib/awx)。相当于 rsyslogd queue.spoolDirectory 设置。

例如,如果 Splunk 脱机,rsyslogd 将在磁盘上存储一个队列,直到 Splunk 恢复联机。默认情况下,它将存储高达 1GB 的事件(当 Splunk 脱机时),但如果需要,您可以将其设置为大于 1GB,或者更改保存队列的路径。

11.1. 记录器

以下是提供大量信息以可预测的结构化或半结构化格式的特殊记录器(除 awx 外,它构成通用服务器日志),其结构与您从 API 获取数据时预期的结构相同

  • job_events: 提供从 Ansible 回调模块返回的数据

  • activity_stream: 显示 Ansible Tower 应用程序中对象的更改记录

  • system_tracking: 提供由 Ansible setup 模块收集的事实数据(即 gather_facts: True),当作业模板在选择“启用事实缓存”的情况下运行时

  • awx: 提供通用服务器日志,其中包括通常写入文件的日志。它包含所有日志具有的标准元数据,但它只包含来自日志语句的消息。

这些记录器只使用 INFO 日志级别,除了 awx 记录器,它可以是任何给定级别。

此外,标准 Tower 日志也可以通过相同的机制提供。很明显,如何在不操作本地设置文件中的复杂字典的情况下启用或禁用这五个数据源中的每一个,以及调整从标准 Tower 日志中使用的日志级别。

要在 Ansible Tower 中配置各种日志记录组件,请从位于左侧导航栏上的 (settings) 菜单中选择“系统”。

11.1.1. 日志消息模式

所有记录器的通用模式

  • cluster_host_id: Tower 集群中主机的唯一标识符

  • level: 标准 python 日志级别,大致反映事件的重要性 所有作为此功能一部分的数据记录器都使用 INFO 级别,但其他 Tower 日志将根据需要使用不同的级别

  • logger_name: 我们在设置中使用的记录器名称,例如“activity_stream”

  • @timestamp: 日志时间

  • path: 生成日志的代码中的文件路径

11.1.2. 活动流模式

  • (通用): 这使用了上面列出的所有记录器共有的所有字段

  • actor: 执行日志记录操作的用户的用户名

  • changes: 对更改的字段及其旧/新值的 JSON 摘要。

  • operation: 活动流中记录的更改的基本类别,例如,“关联”。

  • object1: 有关正在操作的主要对象的信息,与我们在活动流中显示的信息一致

  • object2: 如果适用,则为操作中涉及的第二个对象

11.1.3. 作业事件模式

此记录器反映了保存到作业事件中的数据,除非它们与记录器预期标准字段发生冲突,在这种情况下,字段将被嵌套。值得注意的是,job_event 模型上的字段主机被指定为 event_host。在有效负载中还有一个子字典字段 event_data,其中包含根据 Ansible 事件的具体情况而不同的不同字段。

此记录器还包含通用字段。

11.1.4. 扫描/事实/系统跟踪数据模式

这些包含详细的字典类型字段,这些字段是服务、软件包或文件。

  • (通用): 这使用了上面列出的所有记录器共有的所有字段

  • services: 对于服务扫描,此字段包含在内,并具有基于服务名称的键。**注意**: Elasticsearch 不允许名称中使用句点,并且我们的日志格式化程序会将句点替换为“_”

  • package: 包含在来自软件包扫描的日志消息中

  • files: 包含在来自文件扫描的日志消息中

  • host: 扫描适用的主机名称

  • inventory_id: 主机所在的清单 ID

11.1.5. 作业状态更改

这旨在成为关于作业状态更改的信息的低容量来源,与作业事件相比,它还旨在捕获除基于作业模板的作业之外的统一作业类型的更改。

除了通用字段外,这些日志还包含作业模型中存在的字段。

11.1.6. Tower 日志

除了通用字段外,这还包含一个 msg 字段,其中包含日志消息。错误包含一个单独的 traceback 字段。这些日志可以在配置 Tower 用户界面 ENABLE EXTERNAL LOGGING 设置中启用或禁用。

11.1.7. 日志聚合器服务

日志聚合器服务与以下监控和数据分析系统配合使用

11.1.7.1. Splunk

Ansible Tower 的 Splunk 日志记录集成使用 Splunk HTTP 收集器。配置 SPLUNK 日志记录聚合器时,请添加 HTTP 事件收集器主机的完整 URL,如以下示例所示

https://yourtowerfqdn.com/api/v2/settings/logging

{
    "LOG_AGGREGATOR_HOST": "https://yoursplunk:8088/services/collector/event",
    "LOG_AGGREGATOR_PORT": null,
    "LOG_AGGREGATOR_TYPE": "splunk",
    "LOG_AGGREGATOR_USERNAME": "",
    "LOG_AGGREGATOR_PASSWORD": "$encrypted$",
    "LOG_AGGREGATOR_LOGGERS": [
        "awx",
        "activity_stream",
        "job_events",
        "system_tracking"
    ],
    "LOG_AGGREGATOR_INDIVIDUAL_FACTS": false,
    "LOG_AGGREGATOR_ENABLED": true,
    "LOG_AGGREGATOR_TOWER_UUID": ""
}

Splunk HTTP 事件收集器默认情况下监听 8088,因此有必要提供完整的 HEC 事件 URL(带端口)才能成功处理传入的请求。以下示例中输入了这些值

_images/logging-splunk-tower-example.png

有关配置 HTTP 事件收集器的更多说明,请参阅Splunk 文档

11.1.7.2. Loggly

要设置通过 Loggly 的 HTTP 端点发送日志,请参阅https://www.loggly.com/docs/http-endpoint/。Loggly 使用在http://logs-01.loggly.com/inputs/TOKEN/tag/http/中描述的 URL 约定,该约定在以下示例中显示在**日志记录聚合器**字段中输入

_images/logging-loggly-tower-example.png

11.1.7.3. Sumologic

在 Sumologic 中,创建一个包含用于收集所需数据的参数的 json 文件的搜索条件。

_images/logging_sumologic_main.png

11.1.7.4. Elastic stack(以前称为 ELK stack)

建立自己的 Elastic stack 版本不需要修改 logstash logstash.conf 文件。

注意

Elastic 5.0.0 引入了向后不兼容的更改,并且可能需要不同的配置,具体取决于您使用的版本。

11.2. 使用 Tower 设置日志记录

要将日志记录设置到任何聚合器类型,请执行以下操作

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

  1. 选择**系统**。

  2. 在系统屏幕中,选择**日志记录**选项卡。

  3. 从提供的字段中设置可配置选项

  • **启用外部日志记录**: 如果要将日志发送到外部日志聚合器,请单击切换按钮将其设置为**开**。

  • **日志记录聚合器**: 输入要发送日志的主机名或 IP 地址。

  • **日志记录聚合器端口**: 如果需要,请指定聚合器的端口。

注意

当连接类型为 HTTPS 时,您可以将主机名输入为带有端口号的 URL,因此,您不需要再次输入端口。但是 TCP 和 UDP 连接是由主机名和端口号组合确定的,而不是 URL。因此,在 TCP/UDP 连接的情况下,请在指定字段中提供端口。如果相反,在主机字段(**日志记录聚合器**字段)中输入了 URL,则其主机名部分将被提取为实际主机名。

  • **日志记录聚合器类型**: 单击以从下拉菜单中选择聚合器服务

_images/configure-tower-system-logging-types.png
  • **日志记录聚合器用户名**: 如果需要,请输入日志记录聚合器的用户名。

  • **日志记录聚合器密码/令牌**: 如果需要,请输入日志记录聚合器的密码。

  • **要发送到日志聚合器表单的记录器**: 默认情况下,所有四种类型的数据都已预先填充。单击字段旁边的工具提示 help 图标以获取有关每种数据类型的更多信息。删除您不想要的数据类型。

  • **单独记录系统跟踪事实**: 单击工具提示 help 图标以获取更多信息,无论您是否要将其打开,或默认情况下将其关闭。

  • **日志记录聚合器协议**: 单击以选择用于与日志聚合器通信的连接类型(协议)。后续选项会根据所选协议而有所不同。

  • **TCP 连接超时**: 指定连接超时(以秒为单位)。此选项仅适用于 HTTPS 和 TCP 日志聚合器协议。

  • **日志记录聚合器级别阈值**: 选择您希望日志处理程序报告的严重性级别。

  • **启用/禁用 HTTPS 证书验证**: 默认情况下,HTTPS 日志协议会启用证书验证。如果不想让日志处理程序在建立连接之前验证外部日志聚合器发送的 HTTPS 证书,请单击切换按钮将其设置为**关闭**。

  1. 查看您为所选日志聚合选择的条目。以下是一个为 Splunk 设置的示例

_images/configure-tower-system-logging-splunk-example.png
  1. 完成后,单击**保存**以应用设置,或单击**取消**以放弃更改。

  2. 要验证您的配置是否设置正确,请先单击**保存**,然后单击**测试**。这会使用 Ansible Tower 中当前的日志记录配置将测试日志消息发送到日志聚合器。您应该检查以确保您的外部日志聚合器已收到此测试消息。

注意

如果**测试**按钮被禁用,则表示字段与初始值不同,因此请先保存您的更改,并确保**启用外部日志记录**切换设置为开。

11.3. 对 Tower 的日志记录进行故障排除

如果您已使用测试按钮通过 http/https 将消息发送到已配置的日志记录服务,但未收到消息,请检查 /var/log/tower/rsyslog.err 日志文件。如果在将 rsyslog 认证到 http/https 外部日志记录服务时发生错误,则错误将存储在此处。请注意,如果没有错误,则此文件将不存在。