CentOS系统有两个日志服务:现有的rsyslog和systemd-journal

# ls -l /etc

-rw-r – r-1根根91 apr 11 2018引导日志

-rw-r – r-1根根根160 sep 15 2017 chrony

-rw-r – r-1根根根138 oct 30 2018 iptraf-ng

-rw-r – r-1根根根根根187 dec 27 2017 monit

-rw-r – r-1根根根173 mar 15 2013显示器IX

-rw-r – r-1根根868 jul 28 08336022 MySQL

-rw-r – r – 1根根根408 aug 3 2017 psacct

-rw-r – r-1根根根224 oct 30 2018 syslog

-rw-r – r-1根根根188 oct 31 2018 vsftpd

-rw-r – r-1根根根100 oct 31 2018 wpa _ supplicant

-rw-r – r – 1根根根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 系统启动的相关日志

曾经有人说: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-000567d28

-rw-r-x—+ 1 root systemd-journal 8.0M 2018-03-28 01:36:01.100275802 +0800 user-65534@4ee96b2

-rw-r-x—+ 1 root systemd-journal 72M 2018-04-02 19:16:41.644934707 +0800 system@00000000000000000000000000000000-0000000000010a47-0005686852

-rw-r-x—+ 1 root systemd-journal 8.0M 2018-04-02 19:16:41.714934707 +0800 user-65534@4ee96b2

-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-000569b848

查看垃圾文件的方法

未清理前发现硬盘根分区空间告急,用 du -t 100M /var 或 journalctl –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、用echo命令,将空字符串内容重定向到指定文件中

echo "" >

说明:此方法只会清空一次,一段时间后还要再次手动清空很麻烦,这里可以用以下命令让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

查看 /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.

相关推荐