systemd-journald 是 systemd 系统的核心组件之一,负责收集和存储日志数据。通过配置文件 journald.conf,我们可以精细地控制 journald 的行为,包括日志的存储方式、大小限制、转发选项等。本文将深入探讨 journald.conf 的主要配置选项,帮助你更好地管理系统日志。

journald 配置文件位置

journald.conf 的主要配置文件位置如下,按优先级从高到低排列:

  1. /etc/systemd/journald.conf
  2. /run/systemd/journald.conf
  3. /usr/local/lib/systemd/journald.conf
  4. /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,否则使用 volatile
  • none: 关闭所有存储,仅转发日志

默认值: 在默认命名空间中为 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 配置生效,请按照以下步骤操作:

  1. 保存配置文件: 首先,确保您已经保存了对 /etc/systemd/journald.conf 文件的修改。

  2. 重启 systemd-journald 服务: 这是使新配置生效的主要步骤。您可以使用以下命令:

    sudo systemctl restart systemd-journald
    
  3. 验证服务状态: 重启后,检查服务是否正常运行:

    sudo systemctl status systemd-journald
    

    确保输出显示服务处于 “active (running)” 状态。

  4. 检查日志以确认更改: 可以使用以下命令查看 journald 的最新日志,确认是否有任何与配置更改相关的消息:

    sudo journalctl -u systemd-journald -n 50
    
  5. 验证特定配置: 对于某些配置更改,您可能需要使用特定的命令来验证。例如,如果您更改了存储相关的设置,可以使用:

    sudo journalctl --disk-usage
    

    来查看当前的日志占用空间。

  6. 系统重启(可选但不推荐): 通常不是必需的,但万一没有生效,试试重启大法:

    sudo reboot
    

注意事项

  • 某些配置更改(如 Storage= 选项)可能需要系统重启才能完全生效。
  • 如果您修改了日志存储位置或大小限制,可能需要一些时间才能看到效果,因为旧的日志文件可能不会立即被清理。
  • 对于 ForwardToSyslog=、ForwardToKMsg= 等转发选项的更改,可能需要重启相关的目标服务(如 rsyslog)以确保正确应用更改。

建议在进行重要更改时,先在测试环境中验证配置的效果,以避免对生产系统造成意外影响。

相关阅读:Linux journalctl 的基本使用

结语

通过合理配置 journald.conf,我们可以优化系统日志的存储和管理,提高系统的可维护性和性能。在实际应用中,建议根据系统特性和需求来调整这些参数,以达到最佳的日志管理效果。


也可以看看