journalctl 日志清理教程:容量限制、轮转与安全回收
在 Linux VPS 上检查 systemd journal 占用,配置持久化和容量上限,使用 rotate 与 vacuum 安全回收归档日志并核对结果。

journalctl 日志清理教程:容量限制、轮转与安全回收
systemd-journald 收集内核、系统服务和用户服务的结构化日志。小磁盘 VPS 如果长期不检查,journal 文件可能占据明显空间;直接删除 /var/log/journal 中的文件又可能破坏日志索引和排障证据。正确做法是先确认存储模式与占用,再配置长期上限,最后使用 journalctl 提供的轮转和 vacuum 命令回收归档文件。
先确认日志存储在哪里
查看 journal 当前占用:
sudo journalctl --disk-usage
持久日志通常位于 /var/log/journal,内存型日志位于 /run/log/journal。journald.conf 的 Storage= 决定使用 persistent、volatile、auto 或 none。auto 模式只有在持久目录存在时才写入磁盘。不要为了省空间盲目切换成 volatile,否则重启后历史记录会消失,故障调查能力也会下降。
先查看有效配置,而不是只读主文件:
systemd-analyze cat-config systemd/journald.conf
systemctl status systemd-journald
发行版包可能在 /usr/lib 提供默认值,本地覆盖应放入 /etc/systemd/journald.conf.d/。这样更容易审计,也不会在升级时覆盖供应商文件。文本应用日志仍可由 logrotate VPS 日志轮转教程 管理,两套机制不要混用。
设置长期容量边界
创建 drop-in 文件,例如 /etc/systemd/journald.conf.d/limits.conf:
[Journal]
SystemMaxUse=500M
SystemKeepFree=1G
SystemMaxFileSize=64M
MaxRetentionSec=30day
Compress=yes
数值只是示例,应根据磁盘容量、日志增长和审计要求调整。SystemMaxUse 限制持久 journal 总体目标,SystemKeepFree 要求为其他数据保留空间,journald 会采用更严格的一项。RuntimeMaxUse 和 RuntimeKeepFree 则用于 /run 中的内存型日志。
修改后先检查文件内容,再重启服务:
sudo systemctl restart systemd-journald
sudo journalctl --disk-usage
重启 journald 不等于立即删除所有超额文件。官方文档指出,容量回收主要针对归档文件,当前正在写入的活动文件会保留。要立刻获得更明确的回收效果,应先轮转当前文件。
使用 rotate 和 vacuum 回收
先要求 journald 将活动文件转成归档文件:
sudo journalctl --rotate
然后按容量、时间或文件数量清理。以下命令保留归档总量目标:
sudo journalctl --vacuum-size=500M
按时间保留:
sudo journalctl --vacuum-time=30days
也可以把 --rotate 与 vacuum 放在一次调用中。需要注意,--disk-usage 统计活动文件和归档文件,而 vacuum 只移除归档文件,所以执行后显示值可能仍高于指定目标。不要因此反复缩小参数,更不要绕过 journalctl 直接删除正在使用的文件。
清理前后如何核对
操作前保存关键事件或导出所需范围。可按服务、启动批次和时间过滤:
sudo journalctl -u ssh.service --since '7 days ago'
sudo journalctl --list-boots
sudo journalctl -b -1
清理后再次运行 journalctl --disk-usage,并检查最近日志、上一启动记录和关键服务记录仍可读取。还可使用 journalctl --verify 检查 journal 文件内部一致性。若日志突然快速增长,应找到产生大量消息的服务并修复根因,而不是仅靠更频繁的 vacuum 掩盖问题。
磁盘空间已经紧张时,应同时检查包缓存、容器层、应用日志和数据库文件。站内的 Docker Compose 数据备份教程 可帮助区分容器卷与可重新创建的数据。
自动化时的安全边界
长期控制应优先依赖 journald.conf 的容量与保留设置,而不是每天运行激进的清理脚本。如果确实需要额外定时任务,应先用 systemd timer,记录每次执行结果,并保证参数不会比审计要求更短。任何自动化都应保留告警:磁盘持续增长、journald 失败或关键服务大量报错时要通知管理员。
一个稳妥流程是:确认存储模式,设置容量与空闲空间边界,观察一周增长趋势,再决定保留时间。这样既能防止日志挤满系统盘,也不会在故障发生时发现关键证据已经被过早清除。


