成功最有效的方法就是向有经验的人学习!

Linux 系统 /var/log/journal/ 日志清理

CentOS系统中有两个日志服务,分别是传统的 rsyslog 和 systemd-journal

# ls -l /etc/logrotate.d/
-rw-r--r-- 1 root root  91 Apr 11  2018 bootlog
-rw-r--r-- 1 root root 160 Sep 15  2017 chrony
-rw-r--r-- 1 root root 138 Oct 30  2018 iptraf-ng
-rw-r--r-- 1 root root 187 Dec 27  2017 monit
-rw-r--r-- 1 root root 173 Mar 15  2013 monitorix
-rw-r--r-- 1 root root 868 Jul 28 08:22 mysql
-rw-r--r-- 1 root root 408 Aug  3  2017 psacct
-rw-r--r-- 1 root root 224 Oct 30  2018 syslog
-rw-r--r-- 1 root root 188 Oct 31  2018 vsftpd
-rw-r--r-- 1 root root 100 Oct 31  2018 wpa_supplicant
-rw-r--r-- 1 root root 103 Nov  5  2018 yum

systemd-journald是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息,还有syslog的日志。

systemd-journal 日志服务仅仅把日志集中保存在单一结构的日志文件/run/log中,由于日志是经历过压缩和格式化的二进制数据,所以在查看和定位的时候很迅速。

默认情况下并不会持久化保存日志,只会保留一个月的日志。

另外,一些rsyslog无法收集的日志也会被journal记录到。

rsyslog作为传统的系统日志服务,把所有收集到的日志都记录到/var/log/目录下的各个日志文件中。

常见的日志文件如下:

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

曾经有人说:Linux没有垃圾文件,Windows才有垃圾文件,实际上不是这样的,两者都会有垃圾文件。

操作系统,就是操作各种文件的系统,它不可能没有日志文件,更不可能不产生临时文件,就像剪纸一样,临时产生一些废料是再自然不过的事情。

Linux到底有没有占用空间的垃圾文件,这个看如何判定了,例如:好几年前、几个月前的日志文件、系统文件,基本没什么用处,算垃圾文件吗?

ls -lhm --full-time /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122/ | sort -k6 | head -n30
# ls -lhm --full-time /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122/ | sort -k6 | head -n30
total 3.5G
-rw-r-x---+ 1 root systemd-journal  64M 2018-03-28 01:36:01.010275802 +0800 system@00000000000000000000000000000000-00000000000002ca-000567d28f35cca7.journal
-rw-r-x---+ 1 root systemd-journal 8.0M 2018-03-28 01:36:01.100275802 +0800 user-65534@4ee96b2fbd8b4a82beee0402402fee03-0000000000005419-000567f7fd08bd2f.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-02 19:16:41.644934707 +0800 system@00000000000000000000000000000000-0000000000010a47-0005686852f561be.journal
-rw-r-x---+ 1 root systemd-journal 8.0M 2018-04-02 19:16:41.714934707 +0800 user-65534@4ee96b2fbd8b4a82beee0402402fee03-0000000000011f98-00056872cab77761.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-08 05:48:01.673026304 +0800 system@00000000000000000000000000000000-0000000000021c40-000568dbb97116ae.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-13 18:25:01.967846109 +0800 system@00000000000000000000000000000000-0000000000033800-00056949207ae8a1.journal
-rw-r-x---+ 1 root systemd-journal  72M 2018-04-18 04:12:35.385621922 +0800 system@00000000000000000000000000000000-0000000000045c3e-000569b848f6f86c.journal

查看垃圾文件的方法

未清理前发现硬盘根分区空间告急,用 du -t 100M /varjournalctl --disk-usage 命令查看

# du -t 100M /var/log/
3604336 /var/log/journal/f0f31005fb5a436d88e3c6cbf54e25aa
3604344 /var/log/journal
5291552 /var/log/
# journalctl --disk-usage
Archived and active journals take up 1.1G on disk.

发现/var/log/journal日志文件占用了近3G空间,每个日志文件体积高达8-128M,这些日志文件记录了很长时间以来的systemd情况,毫无价值,

journalctl --vacuum-size=10M 命令将其清理之后,腾出了2.7G的空间。

df命令一查,/根分区果然宽敞了很多。

查看某个目录的文件大小并排序(单位为MB)

du -hm --max-depth=1 /var/ | sort -n
# du -hm --max-depth=1 /var/ | sort -n
1       /var/adm
1       /var/crash
1       /var/db
1       /var/empty
1       /var/games
1       /var/gopher
1       /var/kerberos
1       /var/local
1       /var/nis
1       /var/opt
1       /var/preserve
1       /var/spool
1       /var/tmp
1       /var/yp
131     /var/www
198     /var/lib
486     /var/cache
3695    /var/log
8513    /var/

清空 /var/log/journal 文件的方法

1、重定向空到指定文件中

> system.journal

说明:此方法只会清空一次,一段时间后还要再次手动清空很麻烦,这里可以用以下命令让journalctl 自动维护空间

2、journalctl 命令自动维护文件大小

1)只保留近一周的日志

journalctl --vacuum-time=1w

2)只保留500MB的日志

journalctl --vacuum-size=500M

3)直接删除 /var/log/journal/ 目录下的日志文件

rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1

问题与分析解决

执行 journalctl 命令时报错:Error was encountered while opening journal files: Input/output error

# journalctl --vacuum-time=1w
Error was encountered while opening journal files: Input/output error

问题分析:日志文件损坏

解决方法:删除之前的日志,并重启 journalctl 服务

mv journal/f9d400c5e1e8c3a8209e990d887d4ac1 journal/f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122

systemctl restart systemd-journald.service

查看 /var/log/journal/ 日志目录如下:

# ll /var/log/journal/
drwxr-sr-x  2 root systemd-journal  4096 Jan 22 11:26 f9d400c5e1e8c3a8209e990d887d4ac1
drwxr-sr-x+ 2 root systemd-journal 12288 Jan 14 15:37 f9d400c5e1e8c3a8209e990d887d4ac1_bk_20190122

然后,再执行 journalctl 限制日志的命令:

# journalctl --vacuum-time=1w
Vacuuming done, freed 0B of archived journals on disk.
# journalctl --vacuum-size=500M
Vacuuming done, freed 0B of archived journals on disk.

默认保存内存中,只需要创建/var/log/journal,即可持久化

如果你想检查在2018年3月8日晚上8点20分之后日志,请输入以下命令 ▼

journalctl --since "2018-03-26 20:20:00"

如果未填写上述格式的某些组件,系统将直接填充默认值。
例如,如果未填充日期部分,则直接显示当前日期。
如果未填充时间部分,则默认使用“00:00:00”(午夜)。
秒字段也可以留空。
默认值为“00”,例如以下命令 ▼

journalctl --since "2018-03-26" --until "2018-03-26 03:00"

此外,journalctl还可以理解一些相对值和命名简写。

例如,你可以使用"yesterday"、"today"、"tomorrow"或"now"。
例如,要获取昨天的日志数据,可以使用以下命令 ▼

journalctl --since yesterday

要从上午9:00到最后一小时获取日志,可以使用以下命令 ▼

journalctl --since 09:00 --until "1 hour ago"

实时更新查看journalctl日志
跟 tail -f 命令类似,journalctl支持-f选项,以便实时显示日志 ▼

journalctl -f

如果想查看设备的实时日志,请添加-u选项 ▼

$ sudo journalctl -f -u prometheus.service

仅显示最journalctl 新的n行
命令行选项 -n 用于仅控制最新的n行日志。

默认是在最后显示最新的10行日志 ▼

$ sudo journalctl -n

你还可以在末尾显示指定行数的日志 ▼

$ sudo journalctl -n 20

以下是显示cron.service服务的最新三行日志 ▼

$ journalctl -u cron.service -n 3

经常使用 df -h 命令查看VPS磁盘容量,发现每月以1GB的趋势在上升(记得上个月是1GB)

检查当前 journalctl 日志使用磁盘容量命令 ▼

journalctl --disk-usage

journalctl清空删除日志
由于Linux是一个非常敏感的操作系统,若删除文件错误,很容易造成系统崩溃。

所以,清理journalctl日志的方法,请按日期、允许保留的容量进行删除。

journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

如果要手动删除日志文件,则需要在删除之前轮转(循环)日志。

systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service

journalctl配置持久性容量
要启用日志限制持久性配置,你可以修改journald的配置文件 ▼

/etc/systemd/journald.conf

SystemMaxUse=16M
ForwardToSyslog=no

然后,重启journald ▼

systemctl restart systemd-journald.service

检查日志是否如常?日志文件是否完好且未损坏? ▼

journalctl --verify
赞(0) 打赏
未经允许不得转载:陈桂林博客 » Linux 系统 /var/log/journal/ 日志清理
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册