阿里云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?
1. 使用 journalctl命令
这是清理 journal 日志最安全、最推荐的方法,因为它能正确处理日志文件的内部结构。
-
查看当前日志占用的磁盘空间:
journalctl --disk-usage这会显示当前 journal 日志总共占用了多少空间。
-
清理策略:
-
按时间清理:
-
清理指定时间之前的日志:
sudo journalctl --vacuum-time=2d # 删除所有早于 2 天的日志将
2d替换为所需的时间,例如10d(10天)、4weeks(4周)、6months(6个月)、1year(1年)。 -
清理指定时间之前的日志(保留最新的):
sudo journalctl --vacuum-time=2d
-
-
按大小清理:
-
将日志总体积限制到指定大小:
sudo journalctl --vacuum-size=500M # 尝试将日志总大小缩减到 500MBjournalctl会删除最旧的日志文件,直到总大小小于或等于指定值(这里是 500MB)。注意,这是一个目标值,实际大小可能略低于此值。 -
限制单个日志文件大小(较少直接使用):
sudo journalctl --vacuum-files=5 # 只保留最新的 5 个日志文件,删除旧的这直接控制文件数量,而不是总大小。
-
-
-
验证清理结果:
再次运行journalctl --disk-usage查看清理后的磁盘占用情况。
2. 配置自动清理
更省心的做法是配置 systemd-journald 自动清理日志。编辑配置文件:
-
打开配置文件(通常位于
/etc/systemd/journald.conf):sudo vim /etc/systemd/journald.conf -
找到并修改以下行(如果被注释掉
#,则取消注释):# 按大小限制(示例:最大总日志大小 500MB) SystemMaxUse=500M # 或按时间限制(示例:最多保留 2 周的日志) MaxRetentionSec=2week # 限制单个文件大小(可选) SystemMaxFileSize=100M # 限制日志文件数量(可选) SystemMaxFiles=5SystemMaxUse=:journal 可以使用的最大磁盘空间。达到此限制时,最旧的日志会被删除。SystemKeepFree=:在日志目录所在文件系统上,journal 应保留的剩余空间。如果SystemMaxUse和SystemKeepFree都设置了,会优先满足SystemKeepFree。RuntimeMaxUse=/RuntimeKeepFree=:同上,但针对/run/log/journal(内存中的临时日志,重启消失)。MaxRetentionSec=:日志条目保留的最长时间(如1month,2weeks)。早于此时间的日志会被自动删除。SystemMaxFileSize=:单个 journal 文件增长到的最大大小,之后会被轮转。SystemMaxFiles=:保留的 journal 文件的最大数量。旧文件会被删除。
-
保存文件并退出编辑器。
-
重启 systemd-journald 服务使配置生效:
sudo systemctl restart systemd-journald.service配置完成后,journald 会根据你的设置自动管理日志大小和轮转。

评论区