×

Red Hat OpenShift Logging Operator 部署基于ClusterLogForwarder资源规范的收集器。此 Operator 支持两种收集器选项:旧版 Fluentd 收集器和 Vector 收集器。

Fluentd 已弃用,并计划在未来的版本中移除。Red Hat 在当前的发布生命周期中为此功能提供错误修复和支持,但此功能不再接收增强功能。作为 Fluentd 的替代方案,您可以改用 Vector。

日志收集

日志收集器是一个守护程序集,它将 Pod 部署到每个 Red Hat OpenShift Service on AWS 节点以收集容器和节点日志。

默认情况下,日志收集器使用以下来源:

  • 操作系统、容器运行时和 Red Hat OpenShift Service on AWS 生成的系统和基础设施日志(来自 journald 的日志消息)。

  • /var/log/containers/*.log 用于所有容器日志。

如果将日志收集器配置为收集审计日志,则会从/var/log/audit/audit.log收集它们。

日志收集器从这些来源收集日志,并根据您的日志记录配置将其内部或外部转发。

日志收集器类型

Vector 是一种日志收集器,作为 Fluentd 的日志记录替代方案提供。

您可以通过修改ClusterLogging自定义资源 (CR) 的collection规范来配置集群使用的日志收集器类型。

将 Vector 配置为收集器的示例 ClusterLogging CR
apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  name: instance
  namespace: openshift-logging
spec:
  collection:
    logs:
      type: vector
      vector: {}
# ...

日志收集限制

容器运行时提供最少的信息来识别日志消息的来源:项目、Pod 名称和容器 ID。这些信息不足以唯一地识别日志的来源。如果在日志收集器开始处理其日志之前删除了具有给定名称和项目的 Pod,则来自 API 服务器的信息(例如标签和注释)可能不可用。可能无法区分来自名称和项目相似的 Pod 的日志消息,也无法追踪日志到其来源。此限制意味着日志收集和规范化被认为是*尽力而为*。

可用的容器运行时提供最少的信息来识别日志消息的来源,并且不保证唯一标识单个日志消息,也不保证可以追踪这些消息到其来源。

按类型的日志收集器功能

表 1. 日志来源
功能 Fluentd Vector

应用程序容器日志

特定于应用程序的路由

按命名空间划分的特定于应用程序的路由

基础设施容器日志

基础设施 journal 日志

Kube API 审计日志

OpenShift API 审计日志

Open Virtual Network (OVN) 审计日志

表 2. 授权和身份验证
功能 Fluentd Vector

Elasticsearch 证书

Elasticsearch 用户名/密码

Amazon Cloudwatch 密钥

Amazon Cloudwatch STS

Kafka 证书

Kafka 用户名/密码

Kafka SASL

Loki Bearer 令牌

表 3. 规范化和转换
功能 Fluentd Vector

Viaq 数据模型 - 应用

Viaq 数据模型 - 基础设施

Viaq 数据模型 - 基础设施(journal)

Viaq 数据模型 - Linux 审计

Viaq 数据模型 - kube-apiserver 审计

Viaq 数据模型 - OpenShift API 审计

Viaq 数据模型 - OVN

日志级别规范化

JSON 解析

结构化索引

多行错误检测

多容器/分割索引

扁平化标签

CLF 静态标签

表 4. 调整
功能 Fluentd Vector

Fluentd readlinelimit

Fluentd 缓冲区

- chunklimitsize

- totallimitsize

- overflowaction

- flushthreadcount

- flushmode

- flushinterval

- retrywait

- retrytype

- retrymaxinterval

- retrytimeout

表 5. 可见性
功能 Fluentd Vector

指标

仪表盘

警报

表 6. 其他
功能 Fluentd Vector

全局代理支持

x86 支持

ARM 支持

IBM Power® 支持

IBM Z® 支持

IPv6 支持

日志事件缓冲

断开连接的集群

收集器输出

支持以下收集器输出:

表 7. 支持的输出
功能 Fluentd Vector

Elasticsearch v6-v8

Fluent forward

Syslog RFC3164

✓ (Logging 5.7+)

Syslog RFC5424

✓ (Logging 5.7+)

Kafka

Amazon Cloudwatch

Amazon Cloudwatch STS

Loki

HTTP

✓ (Logging 5.7+)

Google Cloud Logging

Splunk

✓ (Logging 5.6+)

日志转发

管理员可以创建ClusterLogForwarder资源,这些资源指定要收集哪些日志、如何转换日志以及将日志转发到何处。

ClusterLogForwarder资源可用于将容器、基础设施和审计日志转发到集群内或集群外的特定端点。支持传输层安全性 (TLS),以便可以将日志转发器配置为安全地发送日志。

管理员还可以授权 RBAC 权限,这些权限定义哪些服务帐户和用户可以访问和转发哪些类型的日志。

日志转发实现

有两种日志转发实现可用:旧版实现和多日志转发器功能。

只有 Vector 收集器支持与多日志转发器功能一起使用。Fluentd 收集器只能与旧版实现一起使用。

旧版实现

在旧版实现中,您只能在集群中使用一个日志转发器。此模式下的ClusterLogForwarder资源必须命名为instance,并且必须在openshift-logging命名空间中创建。ClusterLogForwarder资源还需要在openshift-logging命名空间中创建一个名为instance的相应ClusterLogging资源。

多日志转发器功能

多日志转发器功能在 Logging 5.8 及更高版本中可用,并提供以下功能:

  • 管理员可以控制哪些用户可以定义日志收集以及他们可以收集哪些日志。

  • 拥有所需权限的用户可以指定额外的日志收集配置。

  • 从已弃用的 Fluentd 收集器迁移到 Vector 收集器的管理员可以独立于现有部署部署新的日志转发器。在迁移工作负载期间,现有和新的日志转发器可以同时运行。

在多日志转发器实现中,您不需要为您的 `ClusterLogForwarder` 资源创建相应的 `ClusterLogging` 资源。您可以使用任何名称在任何命名空间中创建多个 `ClusterLogForwarder` 资源,但以下情况除外:

  • 您不能在 `openshift-logging` 命名空间中创建名为 `instance` 的 `ClusterLogForwarder` 资源,因为这是为使用 Fluentd 收集器的旧工作流提供支持的日志转发器保留的。

  • 您不能在 `openshift-logging` 命名空间中创建名为 `collector` 的 `ClusterLogForwarder` 资源,因为这是为收集器保留的。

为集群启用多日志转发器功能

要使用多日志转发器功能,必须为该服务帐户创建服务帐户和集群角色绑定。然后,您可以在 `ClusterLogForwarder` 资源中引用服务帐户以控制访问权限。

为了支持在 `openshift-logging` 命名空间以外的其他命名空间中的多日志转发,必须更新 Red Hat OpenShift Logging Operator 以监视所有命名空间。此功能在新的 Red Hat OpenShift Logging Operator 5.8 版本安装中默认支持。

授权日志收集 RBAC 权限

在 Logging 5.8 及更高版本中,Red Hat OpenShift Logging Operator 提供了 `collect-audit-logs`、`collect-application-logs` 和 `collect-infrastructure-logs` 集群角色,这些角色分别使收集器能够收集审核日志、应用程序日志和基础设施日志。

您可以通过将所需的集群角色绑定到服务帐户来授权日志收集的 RBAC 权限。

先决条件
  • Red Hat OpenShift Logging Operator 安装在 `openshift-logging` 命名空间中。

  • 您拥有管理员权限。

步骤
  1. 为收集器创建一个服务帐户。如果要将日志写入需要令牌进行身份验证的存储,则必须在服务帐户中包含令牌。

  2. 将相应的集群角色绑定到服务帐户

    示例绑定命令
    $ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>