第 9 章 日志收集和转发

9.1. 关于日志收集和转发

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

注意

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

9.1.1. 日志集合

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

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

  • 由来自操作系统、容器运行时和 OpenShift Container Platform 的 journald 日志消息生成的系统和基础架构日志。
  • /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 用户名/密码

Cloudwatch keys

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 支持

PowerPC 支持

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

Cloudwatch

Cloudwatch STS

Loki

HTTP

✓ (Logging 5.7+)

Google Cloud Logging

Splunk

 

✓ (Logging 5.6+)

9.1.2. 日志转发

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

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

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