如何检测和清理垃圾日志文件?

rei*_*ost 3 journalctl systemd-journald

我们的一台 Ubuntu 18.04 主机被捕获了 12 GB 的*.journal文件,远远超出了预期。为了弄清楚它们是否值得保留,我跑了

journalctl --file $f
Run Code Online (Sandbox Code Playgroud)

每个早于今天的文件;这总是导致Failed to open files--- No entries ---

我得出这样的文件是垃圾并且可以丢弃的结论是否正确?

如果是的话,它们为何存在?支持的清理方法是什么?是否值得定期检查系统是否存在?

Ray*_*igh 9

首先,Journal 是一个日志系统,是systemd. 当您需要知道发生了什么时,它们的存在至关重要。

正如这里提到的,journalctl --file不是那么有用。

由于日志文件会定期轮换,因此这种形式并不真正可用于查看完整的日志。

现在,您是否认为这些文件无用,由您决定。通常,太旧的日志不值得保留,您可以删除它们。

为此,最好使用journalctl真空吸尘器本身及其实用工具。例如你可以使用

sudo journalctl --vacuum-time=3weeks
Run Code Online (Sandbox Code Playgroud)

删除所有超过 3 周的日志文件。

有关更多信息,请查看手册页man journalctl

--vacuum-size=, --vacuum-time=, --vacuum-files=

删除最旧的存档日志文件,直到它们使用的磁盘空间低于指定大小(使用通常的“K”、“M”、“G”和“T”后缀指定),或者所有存档日志文件不包含早于指定的时间跨度(用通常的“s”、“m”、“h”、“天”、“月”、“周”和“年”后缀指定),或保留不超过指定数量的单独日志文件。请注意,运行 --vacuum-size= 仅对 --disk-usage 显示的输出产生间接影响,因为后者包括活动日志文件,而清理操作仅对存档日志文件进行操作。同样, --vacuum-files= 实际上可能不会将日志文件的数量减少到指定数量以下,因为它不会删除活动的日志文件。

另外,我认为定期检查这一点并不值得。您可以做的最好的事情是通过取消注释并更改 中的以下内容来设置上限/etc/systemd/journald.conf

例如:

SystemMaxUse=4G
Run Code Online (Sandbox Code Playgroud)

然后重新启动服务。sudo systemctl restart systemd-journald

用于man journald.conf获取更多信息。


编辑

正如@reinierpost 所解释的

这个问题不是关于常规的旧日志,而是关于似乎根本不包含任何日志的旧日志文件(但它们仍然每个占用 8 MB)。

尝试跑步journalctl --verify。如果文件未通过,则日志已损坏,您应该重新启动服务。

sudo systemctl restart systemd-journald
Run Code Online (Sandbox Code Playgroud)

这应该可以解决未来日志的问题。

至于为什么会这样,我不知道,也不容易弄清楚。是的,损坏的文件可能是垃圾。你可以尝试这个来重新开始。