首页/系统/信创系统运维速查/journald 主配置与速率限制
服务与运维65 条

journald 主配置与速率限制

journald 行为集中在 /etc/systemd/journald.conf:落盘策略、大小上限、转发 syslog、速率限制等;改完重启 systemd-journald 生效,日志高峰被限速时先查这里。

信创系统运维速查系统更新于 2026-10-13

journald 的日志去哪了

journald 是 systemd 的日志收集组件:内核与各服务的标准输出都汇到它这里,再由它决定落盘还是只留内存、保留多久、是否转发给 rsyslog。默认配置在低配或高日志量场景下容易出问题——要么重启后日志全丢,要么把根分区写满,要么因为速率限制把关键报错吞掉。这些行为都集中在 /etc/systemd/journald.conf。

基本信息

主配置/etc/systemd/journald.conf,另有 /etc/systemd/journald.conf.d/*.conf 覆盖
落盘目录/var/log/journal/(persistent 时)
查看日志journalctl -u 服务、-b 本次启动、--since/--until
生效方式systemctl restart systemd-journald
空间控制SystemMaxUse、SystemKeepFree、MaxRetentionSec
速率限制RateLimitIntervalSec 与 RateLimitBurst(旧版本参数名不带 Sec)

典型使用场景

  • 排障时发现上次重启前的日志不见了,需要开启持久化存储
  • 根分区被日志写满,需要限制 journal 占用上限
  • 业务日志量突增时关键报错被限速吞掉,需要调整速率限制
  • 合规要求日志集中留存,需要转发到 rsyslog 或远端
  • 巡检时统计某个服务的报错趋势

常用配置

常用配置
[Journal]
Storage=persistent                    # auto 在 /var/log/journal 存在时即持久化;persistent 明确落盘
SystemMaxUse=2G                       # 日志占用上限,防止写满根分区
SystemKeepFree=1G                     # 至少保留的空闲空间
MaxRetentionSec=90day                 # 最长保留时间,按合规要求设定
ForwardToSyslog=yes                   # 同时转发给 rsyslog,兼容集中审计
RateLimitIntervalSec=30s              # 速率限制窗口(旧版本为 RateLimitInterval)
RateLimitBurst=10000                  # 窗口内允许的最大条数,超出会被抑制

生效与观察

生效与观察
systemctl restart systemd-journald        # 改完配置必须重启该服务
journalctl --verify                       # 校验日志文件完整性,看是否有损坏段
journalctl -u systemd-journald -n 20 --no-pager   # 看它自己的启动与告警信息
journalctl --disk-usage                   # 查看当前日志占用,与上限对比
journalctl -b -1 -n 50 --no-pager         # 读上一次启动的日志,排查重启前发生了什么
findmnt /var/log                          # 确认日志目录所在分区空间充足

配置项效果对照

配置作用典型问题
Storage决定内存还是磁盘存储volatile 重启即丢,排障时最痛
SystemMaxUse日志总量上限过小会导致老日志被很快清理
SystemKeepFree保留空闲空间未设置时可能把分区写满
ForwardToSyslog转发给 rsyslog与 rsyslog 同时留存会有双份占用
RateLimit 两项抑制高频日志调得过紧会吞掉关键报错
MaxRetentionSec按时间清理合规场景需与留存要求对齐
日志里出现 Suppressed N messages 就是触发了速率限制:先判断是业务在疯狂刷日志还是真的需要更多条数,来源异常时放宽限制只会掩盖问题。
参数名有版本差异:较新版本用 RateLimitIntervalSec 与 RateLimitBurst,较早版本是 RateLimitInterval / RateLimitBurst,配置前按本机版本核对手册。

易错点

  • Storage 保持 volatile 或默认 auto 而 /var/log/journal 不存在,重启后日志消失,故障复盘时拿不到现场证据
  • 只设了 SystemMaxUse 没设 SystemKeepFree,磁盘紧张时日志仍可能把分区挤满
  • 为了不让日志被吞就把速率限制完全关掉,异常进程刷日志直接把分区写满,从丢日志变成丢系统
  • 照抄其他版本的参数名写进配置,journald 忽略未知项而不报错,以为改好了其实没生效
  • ForwardToSyslog 与 rsyslog 同时做集中转发但没有容量规划,磁盘上出现两份日志,清理策略互相打架

数据来源与参考

  • man 5 journald.conf
  • openEuler 文档:journald 配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌