第 2 章 了解 Red Hat OpenShift Logging
作为集群管理员,您可以部署 OpenShift Logging 来聚合 OpenShift Container Platform 集群中的所有日志,如节点系统日志、应用程序容器日志和基础架构日志等。OpenShift Logging 汇总整个集群中的这些日志,并将其存储在默认日志存储中。您可以使用 Kibana web 控制台来视觉化日志数据。
OpenShift Logging 聚合了以下类型的日志:
-
application
- 由集群中运行的用户应用程序生成的容器日志(基础架构容器应用程序除外)。 -
infrastructure
- 在集群和 OpenShift Container Platform 节点上运行的基础架构组件生成的日志,如 journal 日志。基础架构组件是在openshift*
、kube*
或default
项目中运行的 pod。 -
audit
- 由节点审计系统 (auditd) 生成的日志,这些日志保存在 /var/log/audit/audit.log 文件中,以及 Kubernetes apiserver 和 OpenShift apiserver 的审计日志。
由于内部 OpenShift Container Platform Elasticsearch 日志存储无法为审计日志提供安全存储,所以审计日志默认不会存储在内部 Elasticsearch 实例中。如果要将审计日志发送到内部日志存储,例如要在 Kibana 中查看审计日志,您必须使用 Log Forwarding API,如 把审计日志转发到日志存储所示。
2.1. 关于部署 OpenShift Logging
OpenShift Container Platform 集群管理员可以使用 OpenShift Container Platform Web 控制台或 CLI 部署 OpenShift Logging 来安装 OpenShift Elasticsearch Operator 和 Operator and Red Hat OpenShift Logging Operator。安装 Operator 后,可创建 ClusterLogging
自定义资源(CR)以调度 OpenShift Logging pod 和支持 OpenShift Logging 所需的其他资源。Operator 负责部署、升级和维护 OpenShift Logging。
ClusterLogging
CR 定义包括日志记录堆栈的所有组件在内的完整 OpenShift Logging 环境,以收集、存储和视觉化日志。Red Hat OpenShift Logging Operator 监视 OpenShift Logging CR 并相应地调整日志记录部署。
管理员和应用程序开发人员可以查看他们具有查看访问权限的项目的日志。
如需更多信息,请参阅配置日志收集器。
2.1.1. 关于 JSON OpenShift Container Platform Logging
您可以使用 JSON 日志记录配置 Log Forwarding API,将 JSON 字符串解析为结构化对象。您可以执行以下任务:
- 解析 JSON 日志
- 为 Elasticsearch 配置 JSON 日志数据
- 将 JSON 日志转发到 Elasticsearch 日志存储
如需更多信息,请参阅关于 JSON 日志记录。
2.1.2. 关于收集并存储 Kubernetes 事件
OpenShift Container Platform 事件路由器是一个 pod,它监视 Kubernetes 事件,并在 OpenShift Container Platform Logging 中记录它们以收集。您必须手动部署 Event Router。
如需更多信息,请参阅关于收集和存储 Kubernetes 事件。
2.1.3. 关于更新 OpenShift Container Platform Logging
OpenShift Container Platform 允许您更新 OpenShift Container Platform 日志记录。您必须在更新 OpenShift Container Platform Logging 时更新以下 Operator:
- Elasticsearch Operator
- Cluster Logging Operator
2.1.4. 关于查看集群仪表板
OpenShift Container Platform Logging 仪表板包含 chart,在集群级别显示 Elasticsearch 实例的详情。这些图表可帮助您诊断和预测问题。
如需更多信息,请参阅关于查看集群仪表板。
2.1.5. 关于 OpenShift Container Platform Logging 故障排除
您可以通过执行以下任务排除日志问题:
- 查看日志记录状态
- 查看日志存储的状态
- 了解日志记录警报
- 为红帽支持收集日志记录数据
- 关键警报故障排除
2.1.6. 关于卸载 OpenShift Container Platform Logging
您可以通过删除 ClusterLogging 自定义资源(CR)来停止日志聚合。在删除 CR 后,还有其它保留集群日志记录组件,您可以选择性地删除它们。
如需更多信息,请参阅 卸载 OpenShift Container Platform Logging。
2.1.7. 关于导出字段
日志记录系统导出字段。导出的字段出现在日志记录中,可从 Elasticsearch 和 Kibana 搜索。
如需更多信息,请参阅关于导出字段。
2.1.8. 关于 OpenShift Logging 组件
OpenShift Logging(日志记录)组件包括了一个要部署到 OpenShift Container Platform 集群中每个节点的收集器,用于收集所有节点和容器日志并将其写入日志存储。您可以使用集中 web UI 使用汇总的数据创建丰富的视觉化和仪表板。
OpenShift Logging 的主要组件有:
- collection(收集) - 此组件从集群中收集日志,格式化日志并将其转发到日志存储。当前的实现是 Fluentd。
- log store(日志存储) - 存储日志的位置。默认是 Elasticsearch。您可以使用默认的 Elasticsearch 日志存储,或将日志转发到外部日志存储。默认日志存储经过优化并测试以进行简短存储。
- visualization(可视化) - 此 UI 组件用于查看日志、图形和图表等。当前的实现是 Kibana。
在本文中我们可能会互换使用日志存储或 Elasticsearch、视觉化或 Kibana、collection 或 Fluentd、收集或 Fluentd。
2.1.9. 关于日志记录收集器
OpenShift Container Platform 使用 Fluentd 来收集容器和节点的日志数据。
默认情况下,日志收集器使用以下源:
- 所有系统的日志记录的 journald
-
/var/log/containers/*.log
用于所有容器日志
如果您配置了日志收集器来收集审计日志,它会从 /var/log/audit/audit.log
中获取日志信息。
日志记录收集器是一个守护进程集,它将 pod 部署到每个 OpenShift Container Platform 节点。系统及基础架构日志由来自操作系统、容器运行时和 OpenShift Container Platform 的日志消息生成。应用程序日志由 CRI-O 容器引擎生成。Fluentd 从这些源收集日志,并在内部或外部转发 OpenShift Container Platform 中配置的日志。
容器运行时提供少许信息来标识日志消息的来源,如项目、容器名称和容器 ID。这些信息不足以区分日志的来源。如果在日志收集器开始处理日志之前删除了具有指定名称和项目的 Pod,则来自 API 服务器的信息(如标签和注解)可能会不可用。可能没有办法区分来自名称相似的 Pod 和项目的日志消息,也无法追溯日志的来源。这种局限性意味着日志收集和规范化仅属于尽力而为。
可用的容器运行时提供少许信息来标识日志消息来源,无法确保唯一的个别日志消息,也不能保证可以追溯这些消息的来源。
如需更多信息,请参阅配置日志收集器。
2.1.10. 关于日志存储
OpenShift Container Platform 使用 Elasticsearch (ES) 来存储和整理日志数据。另外,您可以使用日志转发功能使用 Fluentd 协议、syslog 协议或 OpenShift Container Platform 日志转发 API 将日志转发到外部日志存储。
OpenShift Logging Elasticsearch 实例经过优化并测试,用于大约 7 天的简短存储。如果要更长时间保留日志,建议您将数据移至第三方存储系统。
Elasticsearch 将日志数据从 Fluentd 整理到数据存储或 索引 中,然后将每个索引分成多个碎片(称为 shard(分片) ),分散到 Elasticsearch 集群中的一组 Elasticsearch 节点上。您可以配置 Elasticsearch 来为分片制作备份(称为 replica(副本) ),Elasticsearch 也会分散到 Elasticsearch 节点上。ClusterLogging
自定义资源(CR)允许您指定如何复制分片,以提供数据冗余和故障恢复能力。您还可以使用 ClusterLogging
CR 中的保留策略来指定不同类型的日志的保留的时长。
索引模板的主分片数量等于 Elasticsearch 数据节点的数目。
Red Hat OpenShift Logging Operator 和相应的 OpenShift Elasticsearch Operator 确保每个 Elasticsearch 节点都使用带有自身存储卷的唯一部署来进行部署。在需要时,可以使用 ClusterLogging
自定义资源(CR)来增加 Elasticsearch 节点的数量。有关配置存储的注意事项,请参阅 Elasticsearch 文档。
高可用性 Elasticsearch 环境需要至少三个 Elasticsearch 节点,各自在不同的主机上。
Elasticsearch 索引中应用的基于角色的访问控制 (RBAC) 可让开发人员控制对日志的访问。管理员可以获取所有日志,开发人员只能访问自己项目中的日志。
如需更多信息,请参阅 配置日志存储。
2.1.11. 关于日志记录视觉化
OpenShift Container Platform 使用 Kibana 显示由 Fluentd 收集并由 Elasticsearch 索引的日志数据。
Kibana 是基于浏览器的控制台界面,可通过直方图、折线图、饼图、其他视觉化方式,来查询、发现和视觉化您的 Elasticsearch 数据。
如需更多信息,请参阅 配置日志可视化工具。
2.1.12. 关于事件路由
Event Router 是一个 pod,它监视 OpenShift Container Platform 事件,以便通过 OpenShift Logging 来收集这些事件。Event Router 从所有项目收集事件,并将其写入 STDOUT
。Fluentd 收集这些事件并将其转发到 OpenShift Container Platform Elasticsearch 实例。Elasticsearch 将事件索引到 infra
索引。
您必须手动部署 Event Router。
如需更多信息,请参阅收集并存储 Kubernetes 事件。
2.1.13. 关于日志转发
默认情况下,OpenShift Logging 将日志发送到 ClusterLogging
自定义资源(CR)中定义的默认内部 Elasticsearch 日志存储。如果要将日志转发到其他日志聚合器,您可以使用日志转发功能将日志发送到集群内部或外部的特定端点。
如需更多信息,请参阅将日志转发到第三方系统。