journal 日志持久化
systemd-journald 的日志默认可能只保存在内存里,重启就没了。决定是否落盘的是 /etc/systemd/journald.conf 中的 Storage 选项:持久化时写入 /var/log/journal,易失时写入 /run/log/journal。判断历史日志是否可用,先看这一项。
基本信息
| 配置文件 | /etc/systemd/journald.conf 与 journald.conf.d/ 目录 |
|---|---|
| Storage 取值 | volatile 仅内存、persistent 落盘、auto 按目录是否存在、none 不保存 |
| 目录分工 | /var/log/journal 持久,/run/log/journal 易失 |
| 容量控制 | SystemMaxUse、SystemMaxFileSize、RuntimeMaxUse |
| 占用查看 | journalctl --disk-usage |
| 生效方式 | 修改后重启 systemd-journald 服务 |
典型使用场景
- 判断历史日志能否跨重启查询
- 规划日志容量与保留策略
- 排查日志缺失或记录过短的根因
- 采集前确认数据范围是否覆盖事件时段
- 与远端转发配置一起评估日志链路的可靠性
最小示例
最小示例
grep -E '^\s*Storage' /etc/systemd/journald.conf # 查看当前的存储策略
ls -d /var/log/journal /run/log/journal 2>/dev/null # 目录是否存在
journalctl --disk-usage # 当前日志占用空间
journalctl --list-boots # 能列出多少历史引导
journalctl --verify 2>/dev/null | tail -3 # 日志文件校验结果
grep -E '^\s*SystemMaxUse' /etc/systemd/journald.conf配置与现象
| 配置或现象 | 含义 | 说明 |
|---|---|---|
| Storage=volatile | 仅内存保存 | 重启后历史日志消失 |
| Storage=persistent | 始终落盘 | 需要目录存在且权限正确 |
| Storage=auto | 按目录是否存在决定 | 目录被删后旧日志即丢失 |
| /var/log/journal | 持久化目录 | 读取需要相应组权限 |
| /run/log/journal | 易失目录 | 位于内存文件系统,重启清空 |
| disk-usage 输出 | 当前占用空间 | 与容量上限一起评估保留时长 |
Storage=auto 依赖 /var/log/journal 目录是否存在:目录被删除后,后续日志会退回内存,重建目录也无法找回已丢失的内容。
日志文件的读取需要相应权限,非特权账号通常要加入 systemd-journal 组才能看到完整内容。
启用持久化后旧日志会按容量上限自动回收,本地能保留的时长往往只有数天到数周;需要长期留证时,除了调高上限还要配置远端转发。
不要用删除目录或清理命令来释放空间:会永久丢失历史日志,取证阶段尤其要避免。