Linux 系统 /var/log/journal/ 是什么?垃圾日志需要清理么?

Linux命令

CentOS系统中有两个日志服务,包括传统的 rsyslog 和 systemd-journal

知识点一:linux的两个日志系统
rsyslog作为传统的系统日志服务,记录位置/var/log/目录下的各个日志文件中。
systemd-journald是改进型日志管理服务,记录位置:/var/log/journal

知识点二: 新型日志系统的特点
systemd-journald是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息,还有syslog的日志。该日志服务仅仅把日志集中保存在单一结构的日志文件/run/log中,由于日志是经历过压缩和格式化的二进制数据,所以在查看和定位的时候很迅速。默认情况下并不会持久化保存日志,只会保留一个月的日志。另外,一些rsyslog无法收集的日志也会被journal记录到。

知识点三: 常见的日志文件如下:
/var/log/messages 绝大多数的系统日志都记录到该文件
/var/log/secure 所有跟安全和认证授权等日志都会记录到此文件
/var/log/maillog 邮件服务的日志
/var/log/cron crond计划任务的日志
/var/log/boot.log 系统启动的相关日志

知识点四: linux也有垃圾文件,用journalctl 命令来查看:
journalctl --disk-usage
Archived and active journals take up 2.5G on disk.
验证一下果然如此:
du -sh /var/log/journal/
2.6G /var/log/journal/

知识点五: 如何清理?
执行命令: journalctl --vacuum-size=10M
再看:
# du -sh /var/log/journal/
89M /var/log/journal/

其他清理命令
1)只保留近一周的日志
journalctl --vacuum-time=1w
2)只保留500MB的日志
journalctl --vacuum-size=500M

可能执行journalctl 命令报错:Error was encountered while opening journal files: Input/output error
解决办法:手工删除日志,并重启服务 systemctl restart systemd-journald.service

其他技巧:
查看某个目录的文件大小并排序(单位为MB)
du -hm --max-depth=1 /var/ | sort -n