oflyhigh avatar

每天进步一点点:清理systemd-journald日志空间以及限制日志空间占用

oflyhigh

Published: 06 Jun 2023 › Updated: 06 Jun 2023每天进步一点点:清理systemd-journald日志空间以及限制日志空间占用

每天进步一点点:清理systemd-journald日志空间以及限制日志空间占用

最近维护一些使用N多年的VPS时,发现很多VPS上,/var/log/目录都占用极大的空间,有的竟然多达数G。仔细查看了一番,发现占用空间最大的目录为:/var/log/journal

image.png
(图源 :pixabay)

简单了解一下,/var/log/journal目录是systemd-journald存储日志的路径之一,而systemd-journald是用于收集和存储日志数据的系统服务,它从系统的各种来源接收的日志信息并创建和维护结构化的索引日志。

有关systemd-journald服务,可以通过如下指令查看详细帮助:

man systemd-journald

配置文件方式

我们可以通过/etc/systemd/journald.conf对systemd-journald的行为进行配置,可以通过如下指令参考详细帮助:

man journald.conf

通过帮助信息,我们了解到,我们可以通过设置不同的参数,来对systemd-journald日志的存储位置、是否压缩、日志大小、日志存储时间等进行精细化设置。

按着以往的思路,我必须把这些参数研究得彻彻底底,然后设置得明明白白,这样我就可以一劳永逸地解决VPS或者服务器上/var/log/journal目录占用空间过大的问题。

通过阅读帮助文件,我们了解到SystemMaxUse= 和 RuntimeMaxUse=控制日志最多可以使用多少磁盘空间。第一对默认为相应文件系统大小的 10%,第二对默认为 15%,但每个值上限为 4G。所以,对于/var/log/journal而言,最多不会超过4G啦。

MaxRetentionSec=用于设置存储日记条目的最长时间。 这控制是否删除包含早于指定时间跨度的条目的日志文件。默认为关闭(永久存储)。

所以如果对这两组参数进行一些设置,就应该可以达到控制磁盘空间的目的。

测试SystemMaxUse=参数

我们使用如下指令对journald.conf进行编辑:

sudo vi /etc/systemd/journald.conf

再编辑之前,看了一眼默认值,发现SystemMaxUse=以及MaxRetentionSec=均为设置。

首先进行SystemMaxUse=的设置与测试,在此之前,我们先来查看一下这台机器上当前/var/log/journal占用空间。

sudo journalctl --disk-usage

返回信息如下:
image.png

配置文件中修改SystemMaxUse=2G,并重启systemd-journald服务:

sudo service systemd-journald restart

再次查看/var/log/journal占用空间,发现空间占用降低至1.9G啦:

1686020869639.png

测试MaxRetentionSec=参数

配置文件中修改MaxRetentionSec=1month,并重启systemd-journald服务:

sudo service systemd-journald restart

再次查看/var/log/journal占用空间,发现空间占用降低至616M啦:
image.png

所以上述测试,证实了我们可以通过组合SystemMaxUse=以及MaxRetentionSec=来实现systemd-journald服务日志空间的限制。

因为不搞研发,也不去DEBUG,这个日志的作用对我而言聊胜于无,所以我将上述两个参数值分别设置为1G以及2week,这套组合拳下来,对应日志的空间占用降低至264M,完全可以接受啦。

命令方式

除了上述通过配置文件进行设置的方式外,我们还可以通过journalctl工具,对日志进行查询和处理。

比如通过--vacuum-size=, --vacuum-time=, --vacuum-files=单独或组合使用来清理空间占用或者删除旧文件等。

我们尝试执行如下指令:

sudo journalctl --vacuum-size=200M

执行后空间占用更新至176M,

尝试执行如下指令:

sudo journalctl --vacuum-time=2day

执行后空间占用更新至48M。

关于journalctl更多的使用方法,可以通过如下指令查阅帮助手册:

man journalctl

所以,命令行处理systemd-journald日志,也是可行的。只是上述命令行处理只在执行时生效,而不像配置文件中设置参数那样可以一劳永逸。

结束语

systemd-journald是用于收集和存储日志数据的系统服务,时间积累下会产生大量的系统日志,占用磁盘空间。通过命令行工具journalctl可以对空间进行清理。

通过修改配置文件的参数SystemMaxUse=以及MaxRetentionSec=可以达到一劳永逸限制空间过度占用的目的。

其实这玩意仔细研究下去很复杂也很有意思,不过有了这两把斧头已经解决了我的问题,就不深入学习啦。得过且过,快乐无边呀。

Leave 每天进步一点点:清理systemd-journald日志空间以及限制日志空间占用 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh