4.9. 配置 systemd-journald 和 Fluentd
Fluentd 需要从日志 (journal) 中读取数据。因为日志默认设置非常低,它可能无法跟上系统服务的日志记录率,所以日志条目可能会丢失。
我们推荐设置 RateLimitIntervalSec=30s
和 RateLimitBurst=10000
(如有必要甚至更高)以防止日志丢失条目。
4.9.1. 为 OpenShift Logging 配置 systemd-journald
随着项目的扩展,默认的日志记录环境可能需要进行一些调整。
例如,如果有缺少日志数据的情况,则可能需要提高 journald 的速率限制。您可以调整在指定时间段内保留的消息数量,以确保 OpenShift Logging 在不丢弃日志的情况下不使用过量资源。
您还可以确定是否压缩日志、日志需要保留的时间、如何存储日志,以及其他设置。
流程
使用所需设置创建
journald.conf
文件:Compress=yes 1 ForwardToConsole=no 2 ForwardToSyslog=no MaxRetentionSec=1month 3 RateLimitBurst=10000 4 RateLimitIntervalSec=30s Storage=persistent 5 SyncIntervalSec=1s 6 SystemMaxUse=8G 7 SystemKeepFree=20% 8 SystemMaxFileSize=10M 9
- 1
- 指定是否要在将日志写入文件系统前压缩日志。指定
yes
来压缩消息,或指定no
不压缩信息。默认为yes
。 - 2
- 配置是否转发日志信息。每个默认值为
no
。指定:-
ForwardToConsole
将日志转发到系统控制台。 -
ForwardToKsmg
将日志转发到内核日志缓冲。 -
ForwardToSyslog
将日志转发到 syslog 守护进程。 -
ForwardToWall
将信息作为墙信息转发给所有登录的用户。
-
- 3
- 指定存储日志条目的最长时间。输入秒数。或包括一个单位:" year" 、"month" 、"week" 、"day" 、"h" 或 "m"。输入
0
来禁用。默认值为1month
。 - 4
- 配置速率限制。在
RateLimitIntervalSec
定义的时间段内,如果接收的日志数量超过了RateLimitBurst
指定的值,则以后的所有信息都会被丢弃,直到该时间段结束。建议您设置RateLimitIntervalSec=30s
和RateLimitBurst=10000
,它们是默认值。 - 5
- 指定日志的存储方式。默认为
persistent
:-
volatile
在/var/log/journal/
中存储内存中的日志数据。 -
persistent
把日志保存到磁盘的/var/log/journal/
。如果这个目录步存在,systemd 将会创建这个目录。 -
auto
如果目录存在,把日志保存在/var/log/journal/
中。如果不存在,systemd 会临时将日志保存在/run/systemd/journal
中。 -
none
不存储日志。systemd 丢弃所有日志。
-
- 6
- 指定在将 ERR, WARNING, NOTICE, INFO 和 DEBUG 日志同步到磁盘上前等待的超时时间。systemd 在接收到 CRIT, ALERT 或 EMERG 日志后会立即进行同步。默认值为
1s
。 - 7
- 指定日志可以使用的最大值。默认值为
8G
。 - 8
- 指定 systemd 必须保留多少磁盘空间。默认值为
20%
。 - 9
- 指定保存在
/var/log/journal
中的独立日志文件的最大大小。默认值为10M
。注意如果删除速率限制,您可能会看到系统日志记录守护进程的 CPU 使用率增加,因为它需要处理在以前可以被限制掉的信息。
如需了解更多关于 systemd 设置的信息,请参阅 https://www.freedesktop.org/software/systemd/man/journald.conf.html。该页面中列出的默认设置可能不适用于 OpenShift Container Platform。
运行以下命令,将
journal.conf
文件转换为 base64,并将其存储在名为jrnl_cnf
的变量中:$ export jrnl_cnf=$( cat journald.conf | base64 -w0 )
创建一个
MachineConfig
对象,其中包含上一步中创建的jrnl_cnf
变量。以下示例命令为 worker 创建MachineConfig
对象:$ cat << EOF > ./40-worker-custom-journald.yaml 1 apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 2 name: 40-worker-custom-journald 3 spec: config: ignition: config: {} security: tls: {} timeouts: {} version: 3.2.0 networkd: {} passwd: {} storage: files: - contents: source: data:text/plain;charset=utf-8;base64,${jrnl_cnf} 4 verification: {} filesystem: root mode: 0644 5 path: /etc/systemd/journald.conf.d/custom.conf osImageURL: "" EOF
- 1
- 可选: 对于 control plane(也称为 master)节点,您可以提供文件名为
40-master-custom-journald.yaml
。 - 2
- 可选: 对于 control plane(也称为 master)节点,将角色提供为
master
。 - 3
- 可选: 对于 control plane(也称为 master)节点,您可以提供名称为
40-master-custom-journald
。 - 4
- 可选: 要在
journald.conf
文件中包含参数的静态副本,请将${jrnl_cnf}
替换为echo $jrnl_cnf
命令的输出。 - 5
- 为
journal.conf
文件设置权限 。建议把选项设置为0644
。
运行以下命令来创建机器配置:
$ oc apply -f <file_name>.yaml
控制器检测到新的
MachineConfig
对象,并生成新的rendered-worker-<hash>
版本。运行以下命令,监控新配置在每个节点中的推出状态:
$ oc describe machineconfigpool/<node> 1
- 1
- 将节点指定为
master
或worker
。
worker 的输出示例
Name: worker Namespace: Labels: machineconfiguration.openshift.io/mco-built-in= Annotations: <none> API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfigPool ... Conditions: Message: Reason: All nodes are updating to rendered-worker-913514517bcea7c93bd446f4830bc64e