systemd开启journald日志持久化
在 systemd 体系下,是否能看到“重启前日志”,几乎完全取决于一件事: journald 是否启用了磁盘持久化
CentOS 8 默认是 auto / volatile(内存),一旦 reboot、断电、宿主机重置,证据就蒸发了。
env
- centos8.x
- journal
1.journald 持久化的工作机制
journald 有两种存储位置
- 内存:
/run/log/journal(重启即消失) - 磁盘:
/var/log/journal(跨重启保留)
- 内存:
只要
/var/log/journal存在,systemd 就会自动启用持久化journald.conf更多是“策略控制”,不是必要条件
2. 生产环境标准操作
2.1 创建持久化目录
1 | mkdir -p /var/log/journal |
权限通常会自动修正,如果你想显式一点:
1 | chown root:systemd-journal /var/log/journal |
2.2 修改 /etc/systemd/journald.conf
编辑文件:
1 | vi /etc/systemd/journald.conf |
建议显式配置如下:
1 | [Journal] |
说明几条关键的:
Storage=persistent
明确告诉 systemd:必须落盘Compress=yes
日志量大时非常重要Seal=yes
防篡改校验,利于事后取证RateLimit*
防止异常程序刷爆 journal
2.3 重启 journald 服务
1 | systemctl restart systemd-journald |
这一步不会丢当前日志,放心用。
3. 验证
3.1 看 journal 使用情况(重启要稍等下,自动刷数据到磁盘)
1 | journalctl --disk-usage |
如果你看到类似:
Archived and active journals take up 512.0M in the file system.
说明已经在用磁盘了。
3.2 确认日志文件位置
1 | ls -ld /var/log/journal |
以及:
1 | ls /var/log/journal/$(cat /etc/machine-id)/ |
你应该能看到一堆 .journal 文件。
3.3 模拟一次重启验证
1 | reboot |
回来后执行:
1 | journalctl --list-boots |
如果你能看到:
-1 ...
0 ...
并且:
1 | journalctl -b -1 | head |
说明持久化已经 100% 成功