7.7. 配置日志记录收集器
OpenShift Container Platform 使用 Fluentd 从集群中收集操作和应用程序日志,并使用 Kubernetes pod 和项目元数据丰富这些日志。
您可以配置日志位置,使用外部日志聚合器,以及为日志收集器进行其他配置。
除非另有说明,否则在执行这些配置之前,必须将集群日志记录设置为非受管状态。如需更多信息,请参阅更改集群日志记录管理状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。如需了解更多信息,请参阅非受管 Operator 的支持策略
7.7.1. 查看日志记录收集器 Pod
您可以使用 oc get pods --all-namespaces -o wide
命令查看部署了 Fluentd 的节点。
流程
在 openshift-logging
项目中运行以下命令:
$ oc get pods --all-namespaces -o wide | grep fluentd NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES fluentd-5mr28 1/1 Running 0 4m56s 10.129.2.12 ip-10-0-164-233.ec2.internal <none> <none> fluentd-cnc4c 1/1 Running 0 4m56s 10.128.2.13 ip-10-0-155-142.ec2.internal <none> <none> fluentd-nlp8z 1/1 Running 0 4m56s 10.131.0.13 ip-10-0-138-77.ec2.internal <none> <none> fluentd-rknlk 1/1 Running 0 4m56s 10.128.0.33 ip-10-0-128-130.ec2.internal <none> <none> fluentd-rsm49 1/1 Running 0 4m56s 10.129.0.37 ip-10-0-163-191.ec2.internal <none> <none> fluentd-wjt8s 1/1 Running 0 4m56s 10.130.0.42 ip-10-0-156-251.ec2.internal <none> <none>
7.7.2. 配置日志收集器 CPU 和内存限值
日志收集器允许对 CPU 和内存限值进行调整。
流程
编辑
openshift-logging
项目中的ClusterLogging
自定义资源(CR):$ oc edit ClusterLogging instance
$ oc edit ClusterLogging instance apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata: name: "instance" .... spec: collection: logs: fluentd: resources: limits: 1 memory: 736Mi requests: cpu: 100m memory: 736Mi
- 1
- 根据需要指定 CPU 和内存限值及请求。显示的值是默认值。
7.7.3. 为 Fluentd 配置缓冲数据块限制
如果 Fluentd 日志记录器保存大量日志,Fluentd 会执行文件缓冲来降低内存用量并防止数据丢失。
Fluentd 文件缓冲以数据块的形式存储记录。数据块存储在缓冲区中。
您可以通过编辑 Fluentd 守护进程集中的环境变量来调整集群中的文件缓冲:
修改 Fluentd 守护进程集中的 FILE_BUFFER_LIMIT
或 BUFFER_SIZE_LIMIT
参数,您需要把集群日志系统设置为未管理(unmanaged)状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。
BUFFER_SIZE_LIMIT。此参数决定 Fluentd 创建新块之前每个块文件的最大大小。默认值为
8M
。此参数设置 Fluentdchunk_limit_size
变量。高
BUFFER_SIZE_LIMIT
可以使每个块文件收集更多记录。但较大的记录需要更长的时间才会被发送到日志存储中。FILE_BUFFER_LIMIT。这个参数决定每个日志输出的文件缓冲区大小。此值只是基于调度 Fluentd pod 的节点中的可用空间的请求。OpenShift Container Platform 不允许 Fluentd 超过节点容量。默认值为
256Mi
。高
FILE_BUFFER_LIMIT
意味着基于输出数量的更高的BUFFER_QUEUE_LIMIT
。但是,如果节点的空间面临压力,Fluentd 可能会失败。默认情况下,如果所有日志都发送到单个资源,则
number_of_outputs
为1
,否则每多一个资源就会递增1
。如果您使用 Log Forwarding API、Fluentd Forward 协议或 syslog 协议将日志转发到外部位置,则可能会有多个输出。持久性卷大小必须大于
FILE_BUFFER_LIMIT
与输出相乘的结果。BUFFER_QUEUE_LIMIT。这个参数是允许的最大缓冲块数量。
BUFFER_QUEUE_LIMIT
参数无法直接调整。OpenShift Container Platform 根据日志记录输出数量、块大小以及可用文件系统空间来计算这个值。默认是32
块。要修改BUFFER_QUEUE_LIMIT
,需要修改FILE_BUFFER_LIMIT
的值。BUFFER_QUEUE_LIMIT
参数设置 Fluentdqueue_limit_length
参数。OpenShift Container Platform 计算
BUFFER_QUEUE_LIMIT
的公式是(FILE_BUFFER_LIMIT / (number_of_outputs * BUFFER_SIZE_LIMIT))
。使用默认设置的值,
BUFFER_QUEUE_LIMIT
的值是 32:-
FILE_BUFFER_LIMIT = 256Mi
-
number_of_outputs = 1
-
BUFFER_SIZE_LIMIT = 8Mi
-
OpenShift Container Platform 使用 Fluentd file 缓冲插件来配置存储块的方式。您可以使用以下命令查看缓冲区文件的位置:
$ oc get cm fluentd -o json | jq -r '.data."fluent.conf"'
<buffer> @type file 1 path '/var/lib/flunetd/retry-elasticsearch' 2
先决条件
- 将集群日志记录设置为非受管状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。
流程
配置缓冲区块限制:
7.7.4. 使用环境变量配置日志记录收集器
您可以使用环境变量来修改 Fluentd 日志收集器的配置。
如需可用环境变量的列表,请参见 Github 中的 Fluentd README。
前提条件
- 将集群日志记录设置为非受管状态。处于非受管状态的 Operator 不被正式支持,集群管理员需要完全掌控各个组件的配置和升级。
流程
根据需要设置任何 Fluentd 环境变量:
oc set env ds/fluentd <env-var>=<value>
例如:
oc set env ds/fluentd LOGGING_FILE_AGE=30
7.7.5. 关于日志记录收集器警报
以下警报由日志记录收集器生成,可以在 Prometheus UI 的 Alerts 选项卡上查看。
所有日志记录收集器警报都列在 OpenShift Container Platform Web 控制台的 Monitoring
- Firing:在超时期限内警报条件为 true。点击在触发警报末尾的 Options 菜单,以查看更多信息或使警告静音。
- Pending:警报条件当前为 true,但尚未达到超时时间。
- Not Firing:当前未触发警报。
警报 | 消息 | 描述 | 重要性 |
---|---|---|---|
|
| Fluentd 报告的问题数量超过了指定数量(默认值为 10)。 | Critical |
|
| Fluentd 报告 Prometheus 可能无法抓取特定的 Fluentd 实例。 | Critical |
|
| Fluentd 报告自己已不堪重负。 | Warning |
|
| Fluentd 报告队列使用方法问题。 | Critical |