journald 默认会丢日志
systemd-journald 的 Storage 默认多为 auto:只有当 /var/log/journal 目录存在时才落盘,否则只驻留内存,重启即清空。这会直接击穿“日志留存”要求,也让故障复盘在最需要的时候没有数据。加固动作是明确的:创建持久化目录、把 Storage 设为 persistent、再用容量与留存参数控制磁盘占用。
基本信息
| 适用平台 | Linux(systemd 系统,RHEL 7+/Debian 8+ 起) |
|---|---|
| 配置文件 | /etc/systemd/journald.conf 及 journald.conf.d 片段 |
| 关键参数 | Storage、SystemMaxUse、MaxRetentionSec |
| 落地目录 | /var/log/journal |
| 加固项 | 日志持久化与容量控制 |
典型使用场景
- 合规整改:要求日志重启后可回溯、留存期达标
- 故障复盘:重启后仍能查到上一次启动的错误记录
- 容量治理:日志目录被写满导致服务异常时先控容量
- 验收检查:用重启验证持久化是否真的生效
- 多机统一:配合转发把关键日志送到集中平台
核查与设置
核查与设置
grep -E '^#?Storage|^#?SystemMaxUse|^#?MaxRetentionSec' /etc/systemd/journald.conf
mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal
# 在 /etc/systemd/journald.conf 中设置 Storage=persistent 后重启服务:
systemctl restart systemd-journald
journalctl --disk-usage # 当前占用,判断是否已落盘
journalctl --vacuum-time=90d # 清理示例,先确认留存要求再执行
journalctl -k -b | head # 本次启动的内核日志,验证读取正常参数逐项读法
| 参数 | 含义 | 取值建议与异常 |
|---|---|---|
| Storage | 日志存储方式 | persistent 才保证重启后仍有记录 |
| SystemMaxUse | 日志目录最大占用 | 未设置时按文件系统比例估算,易失控 |
| MaxRetentionSec | 最长保留时间 | 设置过短会与留存要求冲突 |
| /var/log/journal | 持久化目录 | 不存在时 auto 模式只驻留内存 |
| journalctl --disk-usage | 当前磁盘占用 | 增长异常说明有服务在刷日志 |
验收口径只有一个:重启一次再查历史日志还在不在,只看当前会话的输出判断不出持久化是否生效。
vacuum 清理不可恢复:确认留存期与审计要求已满足后再执行,别在取证阶段清理日志。
容量控制要点
- 先设 Storage=persistent,再用 SystemMaxUse 控制空间上限
- 按分区容量给日志留出明确比例,避免把系统盘写满
- MaxRetentionSec 与审计留存要求对齐,别让清理策略提前删日志
- 重启服务后回读配置,确认参数真正生效
- 日志量异常增长时先定位刷日志的服务,而不是一味扩容
把日志目录放到独立分区更稳妥:写满时影响范围可控,不会连带拖垮系统盘。