第 9 章 日志收集和转发


9.1. 关于日志收集和转发

Red Hat OpenShift Logging Operator 根据 ClusterLogForwarder 资源规格部署一个收集器。此 Operator 支持两个收集器选项:旧的 Fluentd 收集器和 Vector 收集器。

注意

Fluentd 已被弃用,计划在以后的发行版本中删除。红帽将在当前发行生命周期中将提供对这个功能的 bug 修复和支持,但此功能将不再获得改进。作为 Fluentd 的替代选择,您可以使用 Vector。

9.1.1. 日志集合

日志收集器是一个守护进程集,它将 Pod 部署到每个 OpenShift Dedicated 节点,以收集容器和节点日志。

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

  • 系统及基础架构日志由来自操作系统、容器运行时和 OpenShift Dedicated 的日志消息生成。
  • /var/log/containers/*.log 用于所有容器日志

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

日志收集器从这些源收集日志,并根据日志记录配置在内部或外部转发它们。

9.1.1.1. 日志收集器类型

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: {}
# ...

9.1.1.2. 日志收集限制

容器运行时提供少许信息来标识日志消息的来源,如项目、容器名称和容器 ID。这些信息不足以区分日志的来源。如果在日志收集器开始处理日志之前删除了具有指定名称和项目的 Pod,则来自 API 服务器的信息(如标签和注解)可能会不可用。可能没有办法区分来自名称相似的 Pod 和项目的日志消息,也无法追溯日志的来源。这种限制意味着日志收集和规范化被视为 最佳工作

重要

可用的容器运行时提供少许信息来标识日志消息来源,无法确保唯一的个别日志消息,也不能保证可以追溯这些消息的来源。

9.1.1.3. 按类型划分的日志收集器功能

表 9.1. 日志源
功能FluentdVector

应用程序容器日志

特定于应用程序的路由

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

Infra 容器日志

Infra 日志

kube API 审计日志

OpenShift API 审计日志

打开虚拟网络 (OVN) 审计日志

表 9.2. 授权和身份验证
功能FluentdVector

Elasticsearch 证书

Elasticsearch 用户名/密码

Amazon Cloudwatch 密钥

Amazon Cloudwatch STS

Kafka 证书

Kafka 用户名/密码

Kafka SASL

Loki bearer 令牌

表 9.3. 规范化和转换
功能FluentdVector

ViaQ 数据模型 - 应用程序

ViaQ 数据模型 - infra

ViaQ 数据模型 - infra(journal)

ViaQ 数据模型 - Linux 审计

ViaQ 数据模型 - kube-apiserver 审计

ViaQ 数据模型 - OpenShift API 审计

ViaQ 数据模型 - OVN

loglevel Normalization

JSON 解析

结构化索引

多行错误检测

multicontainer/ split 索引

Flatten 标签

CLF 静态标签

表 9.4. Tuning
功能FluentdVector

Fluentd readlinelimit

 

Fluentd 缓冲

 

- chunklimitsize

 

- totallimitsize

 

- overflowaction

 

- flushthreadcount

 

- flushmode

 

- flushinterval

 

- retrywait

 

- retrytype

 

- retrymaxinterval

 

- retrytimeout

 
表 9.5. 可见性
功能FluentdVector

指标

Dashboard

警报

表 9.6. 其它
功能FluentdVector

全局代理支持

x86 支持

ARM 支持

IBM Power® 支持

IBM Z® 支持

IPv6 支持

日志事件缓冲

 

断开连接的集群

9.1.1.4. 收集器输出

支持以下收集器输出:

表 9.7. 支持的输出
功能FluentdVector

Elasticsearch v6-v8

Fluent 转发

 

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+)

9.1.2. 日志转发

管理员可以创建 ClusterLogForwarder 资源,以指定要收集哪些日志、它们的转换方式以及它们被转发到的位置。

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

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

9.1.2.1. 日志转发实现

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

重要

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

9.1.2.1.1. 旧实施

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

9.1.2.1.2. 多日志转发器功能

日志记录 5.8 及更高版本中提供了多日志转发器功能,并提供以下功能:

  • 管理员可以控制哪些用户被允许定义日志收集以及允许收集哪些日志。
  • 具有所需权限的用户可以指定额外的日志收集配置。
  • 从已弃用的 Fluentd 收集器迁移到 Vector 收集器的管理员可以独立于现有部署部署新的日志转发程序。在迁移工作负载时,现有和新的日志转发程序可以同时运行。

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

  • 您无法在 openshift-logging 命名空间中创建一个名为 instanceClusterLogForwarder 资源,因为它为支持使用 Fluentd 收集器的传统工作流的日志转发器保留。
  • 您无法在 openshift-logging 命名空间中创建一个名为 collectorClusterLogForwarder 资源,因为这为收集器保留。

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

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

重要

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

9.1.2.2.1. 授权日志收集 RBAC 权限

在日志记录 5.8 及更高版本中,Red Hat OpenShift Logging Operator 提供了 collect-audit-logscollect-application-logscollect-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>

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.