阿里云ECS服务器运行了六七年,发现 /var/log/journal目录占了10个多G的空间。/var/log/journal目录是 Linux 系统中 systemd-journald 服务存储其二进制日志文件(journal)的主要位置。
一、它是什么?
-
核心组件: 它是 systemd 生态系统的一部分,替代或补充了传统的基于文本的 syslog(如
/var/log/syslog,/var/log/messages)。 -
二进制格式: 日志以高效的二进制格式存储,而不是纯文本。这使得日志检索、过滤和结构化更高效。
-
结构化日志: 它存储的日志条目包含丰富的元数据(如时间戳、来源单元、优先级、进程ID、主机名等),便于精确查询和分析。
-
集中存储: 收集来自内核、启动过程、系统服务以及支持 systemd journal 协议的应用程序的所有日志消息。
-
查看工具: 使用
journalctl命令来查看、搜索、过滤和分析这些日志。例如:journalctl:查看所有日志journalctl -u nginx.service:查看 nginx 服务的日志journalctl --since "2023-10-23" --until "2023-10-24":查看特定时间范围的日志journalctl -p err -b:查看本次启动以来的错误级别日志journalctl -f:实时跟踪日志(类似tail -f)
二、为什么需要清理?
- 磁盘空间占用: Journal 日志会随着时间推移不断增长,占用大量磁盘空间,尤其是在活跃的系统或启用了详细日志记录的系统中。
- 性能影响: 非常大的 journal 文件可能会略微影响
journalctl的查询速度(虽然其设计通常能很好地处理大文件)。 - 日志轮转: 与传统的 syslog 使用 logrotate 不同,journal 主要依靠其内置机制或手动命令进行清理。
三、如何清理 /var/log/journal?
这是清理 journal 日志最安全、最推荐的方法,因为它能正确处理日志文件的内部结构。
1. 查看当前日志占用的磁盘空间:
journalctl --disk-usage
这会显示当前 journal 日志总共占用了多少空间。
2. 清理策略:
-
按时间清理:
清理指定时间之前的日志:
# 删除所有早于 2 天的日志。 # 可以替换为 10d(10天)、4weeks(4周)、6months、1year sudo journalctl --vacuum-time=2d -
按大小清理:
将日志总体积限制到指定大小:
# 尝试将日志总大小缩减到 500MB,优先删除旧日志 sudo journalctl --vacuum-size=500M限制单个日志文件大小(较少直接使用):
# 只保留最新的 5 个日志文件,删除旧的 sudo journalctl --vacuum-files=5 -
验证清理结果:
再次运行journalctl --disk-usage查看清理后的磁盘占用情况。
3. 配置自动清理
更省心的做法是配置 systemd-journald 自动清理日志。编辑配置文件:
- 打开配置文件(通常位于
/etc/systemd/journald.conf):
sudo vim /etc/systemd/journald.conf
- 找到并修改以下行(如果被注释掉
#,则取消注释):
# 按大小限制(示例:最大总日志大小 500MB)
SystemMaxUse=500M
# 或按时间限制(示例:最多保留 2 周的日志)
MaxRetentionSec=2week
# 限制单个文件大小(可选)
SystemMaxFileSize=100M
# 限制日志文件数量(可选)
SystemMaxFiles=5
- 保存文件并退出编辑器。
- 重启 systemd-journald 服务使配置生效:
sudo systemctl restart systemd-journald.service
配置完成后,journald 会根据你的设置自动管理日志大小和轮转。

评论区