日志持久化是什么
systemd 的日志默认可能只存在内存里:当 /var/log/journal 目录不存在时,journald 采用易失模式,机器一重启历史就没了。启用持久化只需建目录并重启服务,再用 SystemMaxUse 之类的参数控制磁盘占用上限。这两件事要一起做——只持久化不限额,日志迟早把磁盘吃掉。
基本信息
| 用途 | 让 journal 日志跨重启保留,并限制它的磁盘占用 |
|---|---|
| 配置位置 | /etc/systemd/journald.conf 及其 drop-in 目录 |
| 所属 | systemd(journald 与 journalctl) |
| 生效方式 | 改完配置需要重启 systemd-journald 服务 |
典型使用场景
- 跨重启排障:需要查看上一次启动的日志,必须先启用持久化
- 容量治理:日志目录持续增长,用 SystemMaxUse 与 MaxRetentionSec 划出上限
- 合规留存:要求保留一定天数的系统日志,用保留时间参数明确边界
- 紧急瘦身:磁盘告急时用 vacuum 立刻回收空间
- 排查丢日志:日志出现被抑制的提示时,核对速率限制参数
启用持久化
启用持久化
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald
journalctl --list-boots # 能看到多个启动轮次说明生效
journalctl --disk-usage # 查看当前占用限制占用与保留期
限制占用与保留期
# /etc/systemd/journald.conf
[Journal]
Storage=persistent
SystemMaxUse=2G
SystemMaxFileSize=200M
MaxRetentionSec=30day
# 旧版本使用 RateLimitInterval 与 RateLimitBurst 控制写入速率
RateLimitIntervalSec=30s
RateLimitBurst=10000在线瘦身
在线瘦身
journalctl --disk-usage # 先看当前占用
journalctl --vacuum-size=1G # 缩到 1G 以内
journalctl --vacuum-time=7day # 只保留最近 7 天
systemctl restart systemd-journald # 改配置文件后重启生效常用参数对照
| 参数 | 作用 | 说明 |
|---|---|---|
| Storage | 日志存放方式 | persistent 落盘、volatile 只放内存、auto 按目录是否存在自动选择 |
| SystemMaxUse | 持久日志总占用上限 | 不设置时默认约为所在文件系统的 10%,仍有上限,但不一定符合你的预期 |
| SystemMaxFileSize | 单个日志文件大小上限 | 便于轮转与清理粒度控制 |
| MaxRetentionSec | 最长保留时长 | 按时间维度兜底,与容量上限配合使用 |
| RuntimeMaxUse | 内存中日志的占用上限 | 易失模式与运行时缓冲的边界 |
| RateLimitIntervalSec 与 RateLimitBurst | 写入速率限制 | 过高频率的日志会被抑制,表现为日志出现缺口 |
清理历史日志用 journalctl 的 vacuum 选项,不要手删 /var/log/journal 下的文件:journal 目录里除了日志文件还有索引结构,直接删除可能让后续查询出现异常。
日志出现被抑制的提示时要正视:速率限制会让高频日志被丢掉,排查突发问题最关键的那几秒可能恰好缺失。确认需求后适当放宽限制,或把该类日志交给专门的采集通道。