为什么要做日志持久化
系统日志服务默认可能把日志放在内存文件系统里,机器一重启记录就没了。平时不容易察觉,等到事故回溯时才发现「重启前那段时间的日志查不到」,损失的机会成本远高于当初配置的成本。持久化的做法很简单:让日志目录存在并显式声明存储策略,日志就会落到磁盘,重启后仍能查看上一次启动的完整记录。是否落盘、落多少、保留多久,都应作为交付基线的一部分明确下来。
基本信息
| 默认行为 | 存储策略为自动时,日志目录存在则落盘,否则只存内存 |
|---|---|
| 存储策略 | 可设置为仅内存、持久化、自动或不保存 |
| 日志目录 | 磁盘上的日志目录承载历史归档 |
| 配置文件 | 日志服务主配置或配置目录下的片段 |
| 容量上限 | 可限制总占用与保留周期 |
| 生效方式 | 重启日志服务即可,无需重启系统 |
典型使用场景
- 交付基线:新机上电即开启持久化,避免事故时无迹可查
- 事故回溯:重启后仍需查看上一次启动期间的日志
- 容量控制:限制日志总占用,防止挤占系统盘空间
- 合规留存:按留存要求设定保留周期与容量上限
- 排障核对:确认日志确实落盘并保留到预期时间范围
- 迁移与取证:把历史日志目录整体打包,交付给分析方
开启持久化
开启持久化
mkdir -p /var/log/journal # 建立磁盘日志目录
systemd-tmpfiles --create --prefix /var/log/journal # 设置正确的属主与权限
# 在日志服务配置中显式声明(主配置或配置目录下的片段)
# Storage=persistent # 明确落盘
# SystemMaxUse=2G # 限制总占用
systemctl restart systemd-journald # 重启日志服务生效
journalctl --disk-usage # 确认已在使用磁盘空间
journalctl -b -1 --no-pager | tail -20 # 重启后仍能查看上一次启动存储策略取值
| 取值 | 含义 | 适用场景 |
|---|---|---|
| 仅内存 | 只写内存文件系统,重启丢失 | 临时环境,不推荐生产 |
| 持久化 | 写入磁盘日志目录 | 生产默认选择 |
| 自动 | 日志目录存在则落盘 | 默认行为,结果依赖目录状态 |
| 不保存 | 完全不保留日志 | 极少使用,等同于放弃排障依据 |
存储策略为自动时,行为取决于日志目录是否存在:目录在就落盘,不在就只存内存。这种「隐式行为」容易在镜像与自动化部署之间产生差异,因此生产环境建议显式声明策略,而不是依赖默认推断。
落盘前先评估承载目录的可用容量并设定占用上限:日志增长不受限时会挤占系统盘,反过来引发更严重的问题。把日志目录纳入监控,与容量告警一起管理。