Central Logging

OpenStack 部署会产生大量的日志数据。为了成功监控这些数据并将其用于诊断问题,标准的“ssh 和 grep”解决方案很快变得难以管理。

准备和部署

修改配置文件 /etc/kolla/globals.yml 并更改以下内容

enable_central_logging: "yes"

OpenSearch

Kolla 部署 OpenSearch 以存储、组织并使日志易于访问。

默认情况下,OpenSearch 部署在 9200 端口上。

注意

OpenSearch 存储大量日志,因此如果您正在运行集中式日志记录,请记住为 /var/lib/docker 提供足够的空间。

或者,可以使用本地目录代替 volume opensearch 来存储 OpenSearch 的数据。可以通过变量 opensearch_datadir_volume 设置路径。

应用日志保留策略

为了防止磁盘被填满,可以使用 OpenSearch 的 Index State Management 插件来定义日志保留策略。默认保留策略应用于与 opensearch_log_index_prefix 匹配的所有索引。该策略首先关闭旧索引,然后最终删除它们。可以通过以下变量进行自定义

  • opensearch_apply_log_retention_policy

  • opensearch_soft_retention_period_days

  • opensearch_hard_retention_period_days

默认情况下,软保留期和硬保留期分别为 30 天和 60 天。如果您正在从 ElasticSearch 升级,并且之前配置了 elasticsearch_curator_soft_retention_period_dayselasticsearch_curator_hard_retention_period_days,则将使用这些变量代替默认值。您应该在 Caracal 版本发布之前迁移您的配置以使用新的变量名称。

高级用户可能希望自定义保留策略,可以通过覆盖 opensearch_retention_policy 来实现,使用一个有效的策略。有关更多详细信息,请参阅 Index Management 插件文档

更新日志保留策略

设计上,Kolla Ansible 不会更新 OpenSearch 中现有的保留策略。这是为了防止通过 OpenSearch Dashboards UI 或外部工具进行的策略更改被覆盖。

修改现有策略有三种选择

1. 通过 OpenSearch Dashboards UI。有关更多详细信息,请参阅 Index Management 插件文档

  1. 通过 OpenSearch API 使用外部工具。

  2. 首先手动删除 OpenSearch Dashboards UI(或 API)中的现有策略,然后再使用 Kolla Ansible 重新应用更新的策略。

OpenSearch Dashboards

Kolla 部署 OpenSearch dashboards,以便操作员可以以集中式方式搜索和可视化日志。

成功部署后,可以使用浏览器通过 <kolla_internal_fqdn>:5601<kolla_external_fqdn>:5601 访问 OpenSearch Dashboards。

默认用户名是 opensearch,密码可以在 /etc/kolla/passwords.yml 中的 <opensearch_dashboards_password> 下找到。

如果您不想在外部 VIP 上暴露 OpenSearch Dashboards,可以将 enable_opensearch_dashboards_external 设置为 false/etc/kolla/globals.yml 中。

首次登录

首次打开 OpenSearch Dashboards 时,需要创建一个默认的索引模式。要查看、分析和搜索日志,必须至少创建一个索引模式。为了匹配存储在 OpenSearch 中的索引,我们建议使用以下配置

  1. 索引模式 - flog-*

  2. 时间筛选字段名称 - @timestamp

  3. 搜索时扩展索引模式 [已弃用] - 未选中

  4. 使用事件时间创建索引名称 [已弃用] - 未选中

设置参数后,可以使用“创建”按钮创建一个索引。

搜索日志 - Discover 选项卡

操作员可以基于日志中的各种字段创建和存储搜索,例如“显示所有标记为 ERROR 的 nova-compute 日志”。

为此,单击 Discover 选项卡。可以通过悬停在左侧条目上并单击 addremove 来过滤日志中的字段。添加以下字段

  • 主机名

  • 有效载荷

  • severity_label

  • programname

这将产生一个易于阅读的列表,其中包含部署中每个节点在过去 15 分钟内的所有日志事件。可以通过单击屏幕右上角的时钟图标并选择 Auto-refresh 来实现“tail like”功能。

日志也可以进一步过滤。要使用上面的示例,在搜索栏中键入 programname:nova-compute。单击其中一个结果的下拉箭头,然后单击 programname 字段旁边的放大镜图标。现在应该显示集群中所有 nova-compute 服务的事件列表。

可以通过单击右侧菜单中的 Save Search 图标保存当前搜索。

示例:使用 OpenSearch Dashboards 诊断常见故障

以下示例演示了如何使用 OpenSearch 诊断常见的 OpenStack 问题,即实例无法启动并出现错误“未找到有效的宿主机”。

首先,使用 --debug 重新运行服务器创建

openstack --debug server create --image cirros --flavor m1.tiny \
--key-name mykey --nic net-id=00af016f-dffe-4e3c-a9b8-ec52ccd8ea65 \
demo1

在此输出中,查找键 X-Compute-Request-Id。这是一个可用于跟踪系统请求的唯一标识符。一个示例 ID 如下所示

X-Compute-Request-Id: req-c076b50a-6a22-48bf-8810-b9f41176a6d5

获取 X-Compute-Request-Id 的值后,将其输入 OpenSearch Dashboards 搜索栏,减去前导 req-。假设已经添加了一些基本过滤器,如前所示,OpenSearch Dashboards 应该现在显示此请求通过 OpenStack 部署的路径,从控制节点上的 nova-api 开始,通过 nova-schedulernova-conductor,最后到达 nova-compute。检查标记为 ERROR 的条目的 Payload 应该可以快速找到问题的根源。

虽然在此实例中仍然需要一些 Nova 的知识,但可以看出 OpenSearch Dashboards 如何帮助跟踪此数据,尤其是在大规模部署场景中。

可视化数据 - Visualize 选项卡

在可视化选项卡中,提供了各种图表。如果尚未保存任何可视化,则选择此选项卡后将打开“创建新可视化”面板。如果已经保存了可视化,则选择此选项卡后将打开最近修改的可视化。在这种情况下,可以通过选择右侧菜单中的“添加可视化”选项来创建新的可视化。为了创建新的可视化,必须选择一个可用的选项(饼图、面积图)。每个可视化都可以从保存或新的搜索创建。选择任何一种搜索后,将打开设计面板。在此面板中,可以生成和预览图表。在左侧菜单中,可以选择图表的指标。可以通过按左侧菜单顶部的绿色箭头生成图表。

注意

创建可视化后,可以通过选择右侧菜单中的“保存可视化”选项来保存它。如果未保存,则在离开页面或创建另一个可视化后将丢失。

组织可视化和搜索 - Dashboard 选项卡

在 Dashboard 选项卡中,所有保存的可视化和搜索都可以在一个 Dashboard 中组织。要添加可视化或搜索,可以选择右侧菜单中的“添加可视化”选项,然后从所有保存的选项中选择一个项目。可以在此位置通过移动或调整大小来更改元素的顺序和大小。还可以通过检查可视化图例附近的彩色圆点来更改图表的颜色。

注意

创建 Dashboard 后,可以通过选择右侧菜单中的“保存 Dashboard”选项来保存它。如果未保存,则在离开页面或创建另一个 Dashboard 后将丢失。

如果已经保存了 Dashboard,可以通过选择右侧菜单中的“打开 Dashboard”选项来打开它。

导出和导入创建的项目 - Settings 选项卡

创建可视化、搜索或 Dashboard 后,可以通过选择 Settings 选项卡,然后选择 Objects 选项卡将其导出为 JSON 格式。可以单独选择菜单中的每个项目进行导出。还可以通过选择“导出所有内容”选项一次性导出所有项目。在同一个选项卡(Settings - Objects)中,还可以通过选择“导入”选项导入保存的项目。

自定义日志规则

Kolla Ansible 自动部署 Fluentd,用于将 OpenStack 日志从控制平面转发到中央日志记录存储库。Fluentd 配置分为四个部分:Input、forwarding、filtering 和 formatting。可以自定义以下内容

自定义日志过滤

在某些情况下,在转发日志之前应用自定义过滤器可能很有用。这对于向消息添加其他标签或修改标签以符合与 kolla-ansible 定义的格式不同的日志格式可能很有用。

可以通过将 filter 配置文件放置在控制主机上的 /etc/kolla/config/fluentd/filter/*.conf 中来配置自定义 fluentd 过滤器。

自定义日志格式化

在某些情况下,在转发日志之前执行自定义日志格式化可能很有用。例如,可以使用 JSON formatter 插件将事件转换为 JSON。

可以通过将 filter 配置文件放置在控制主机上的 /etc/kolla/config/fluentd/format/*.conf 中来配置自定义 fluentd 格式化。

自定义日志转发

在某些情况下,可能需要将日志转发到其他于 elasticsearch 的日志记录服务。可以通过配置自定义 fluentd 输出来实现此目的。

可以通过将 output 配置文件放置在控制主机上的 /etc/kolla/config/fluentd/output/*.conf 中来配置自定义 fluentd 输出。

自定义日志输入

在某些情况下,可能需要输入来自其他服务的日志,例如网络设备。可以通过配置自定义 fluentd 输入来实现此目的。

可以通过将 input 配置文件放置在控制主机上的 /etc/kolla/config/fluentd/input/*.conf 中来配置自定义 fluentd 输入。

Systemd Logs

默认情况下,在启用集中式日志记录时,我们还会启用从 /var/log/journal 文件读取 systemd 日志。

要在启用集中式日志记录时禁用此行为,请将变量 enable_fluentd_systemd 的值设置为 false 在配置文件 /etc/kolla/globals.yml 中。