systemd-journald 是 systemd 系统的核心组件之一,负责收集和存储日志数据。通过配置文件 journald.conf,我们可以精细地控制 journald 的行为,包括日志的存储方式、大小限制、转发选项等。本文将深入探讨 journald.conf 的主要配置选项,帮助你更好地管理系统日志。
journald 配置文件位置
journald.conf 的主要配置文件位置如下,按优先级从高到低排列:
/etc/systemd/journald.conf
/run/systemd/journald.conf
/usr/local/lib/systemd/journald.conf
/usr/lib/systemd/journald.conf
此外,还可以使用 .conf.d 目录来存放配置片段:
/etc/systemd/journald.conf.d/*.conf
/run/systemd/journald.conf.d/*.conf
/usr/local/lib/systemd/journald.conf.d/*.conf
/usr/lib/systemd/journald.conf.d/*.conf
对于特定命名空间的配置,可以使用:
/etc/systemd/journald@NAMESPACE.conf
/etc/systemd/journald@NAMESPACE.conf.d/*.conf
journald 配置选项示例
打开 journald 配置文件,通常如下所示:
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 2.1 of the License, or (at your option)
# any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the journald.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
#
# Use 'systemd-analyze cat-config systemd/journald.conf' to display the full config.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
SystemMaxUse=100M
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
#ReadKMsg=yes
#Audit=no
journald 主要配置选项详细介绍
Storage=
控制日志数据的存储位置。可选值:
volatile
: 仅存储在内存中 (/run/log/journal)persistent
: 优先存储在磁盘上 (/var/log/journal),如果不可用则回退到内存auto
: 如果 /var/log/journal 目录存在则使用 persistent,否则使用 volatilenone
: 关闭所有存储,仅转发日志
默认值: 在默认命名空间中为 auto
,其他命名空间中为 persistent
Compress=
控制是否压缩日志数据。可以是布尔值或字节数。默认启用,阈值为 512 字节。
Seal=
控制是否对持久化日志文件启用前向安全密封(FSS)。需要可用的密封密钥。默认启用。
SplitMode=
控制是否按用户拆分日志文件。可选值:
uid
: 为普通用户创建单独的日志文件,系统用户使用系统日志none
: 不拆分,所有消息存储在单个系统日志中
默认值: uid
RateLimitIntervalSec= 和 RateLimitBurst=
配置应用于系统上所有消息的速率限制。默认值:30 秒内 10000 条消息。
存储限制选项
SystemMaxUse=
,SystemKeepFree=
: 控制持久存储的最大使用空间和最小剩余空间RuntimeMaxUse=
,RuntimeKeepFree=
: 控制易失性存储的最大使用空间和最小剩余空间SystemMaxFileSize=
,RuntimeMaxFileSize=
: 控制单个日志文件的最大大小SystemMaxFiles=
,RuntimeMaxFiles=
: 控制最大保留的日志文件数量
MaxFileSec=
单个日志文件的最大存储时间,超过后进行轮转。默认为一个月。
MaxRetentionSec=
日志条目的最大保留时间。默认为 0,表示不限制。
SyncIntervalSec=
将日志文件同步到磁盘的超时时间。默认为 5 分钟。
转发选项
ForwardToSyslog=
: 转发到传统 syslog 守护进程ForwardToKMsg=
: 转发到内核日志缓冲区ForwardToConsole=
: 转发到系统控制台ForwardToWall=
: 转发到所有已登录用户ForwardToSocket=
: 转发到指定套接字
日志级别控制
使用 MaxLevelStore=
, MaxLevelSyslog=
, MaxLevelKMsg=
, MaxLevelConsole=
, MaxLevelWall=
, MaxLevelSocket=
来控制不同目标的最大日志级别。
其他重要选项
ReadKMsg=
: 是否处理内核生成的 /dev/kmsg 消息Audit=
: 是否在启动时开启内核审计TTYPath=
: 指定控制台 TTY 路径LineMax=
: 流日志转换为记录日志时的最大行长度
修改 journald.conf 配置文件后如何生效
要使修改后的 journald.conf 配置生效,请按照以下步骤操作:
保存配置文件: 首先,确保您已经保存了对 /etc/systemd/journald.conf 文件的修改。
重启 systemd-journald 服务: 这是使新配置生效的主要步骤。您可以使用以下命令:
sudo systemctl restart systemd-journald
验证服务状态: 重启后,检查服务是否正常运行:
sudo systemctl status systemd-journald
确保输出显示服务处于 “active (running)” 状态。
检查日志以确认更改: 可以使用以下命令查看 journald 的最新日志,确认是否有任何与配置更改相关的消息:
sudo journalctl -u systemd-journald -n 50
验证特定配置: 对于某些配置更改,您可能需要使用特定的命令来验证。例如,如果您更改了存储相关的设置,可以使用:
sudo journalctl --disk-usage
来查看当前的日志占用空间。
系统重启(可选但不推荐): 通常不是必需的,但万一没有生效,试试重启大法:
sudo reboot
注意事项:
- 某些配置更改(如 Storage= 选项)可能需要系统重启才能完全生效。
- 如果您修改了日志存储位置或大小限制,可能需要一些时间才能看到效果,因为旧的日志文件可能不会立即被清理。
- 对于 ForwardToSyslog=、ForwardToKMsg= 等转发选项的更改,可能需要重启相关的目标服务(如 rsyslog)以确保正确应用更改。
建议在进行重要更改时,先在测试环境中验证配置的效果,以避免对生产系统造成意外影响。
结语
通过合理配置 journald.conf,我们可以优化系统日志的存储和管理,提高系统的可维护性和性能。在实际应用中,建议根据系统特性和需求来调整这些参数,以达到最佳的日志管理效果。