如何查看旧的 journalctl 日志(可能经过轮换之后?)

如何查看旧的 journalctl 日志(可能经过轮换之后?)

我在 ubuntu 16.04 上运行 docker,想查看日志。但是,我猜想可能是某种轮换或日志增长到一定大小后,我无法查看日志。

我没有对 journald.conf 做任何更改,因此我使用默认设置。有容器正在运行,因此 docker log 输出了相当多的数据。

我所看到的例子:

systemctl docker status确认服务已激活:

since Thu 2016-10-13 18:56:28 UTC

但是,当我运行类似这样的命令时:

journalctl -u docker.service --since "2016-10-13 22:00"

我得到的唯一输出是:

-- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --

我可以按预期查看该范围内的日志。

我的问题是:为什么我无法使用 journalctl 查看旧日志,以及如何修复此问题以便我可以查看日志?

答案1

这可能是因为您正在尝试查看自上次启动以来的日志,这在 docker 镜像中似乎很可能是这种情况。

在 Ubuntu 16.04 上,日志存储默认为内存。您可以通过打开/etc/systemd/journald.conf并将Storage=行从auto更改为 将默认值更改为持久性persistent。您可能需要systemctl restart systemd-journald在配置文件编辑后重新启动 journald。

我认为日志默认应该是持久的,所以我打开了一个有关此的错误。

答案2

发生这种情况的原因是由于日志文件存储大小的默认值。有关此内容的更多详细信息在文档中。值得一读我链接的整个部分,但默认的工作方式如下:

journald will use 10% of the disk or 4G, whichever is smaller.

journald will leave free 15% of the disk or 4G, whichever is larger.

为了查看上次启动时的日志,假设您Storage=persistent在 journald.conf 中,正如其他答案所述,您可以使用命令--boot=-1上的标志journalctl来获取上次启动时的日志。

在 OP 确定主机没有重新启动的情况下,日志的丢失只是由SystemMaxUse和/或SystemKeepFree默认值引起的。

注意:我是 OP,这个问题仍然有越来越多的赞成票,所以因为我对 journald(和 rtfm)有了更多的经验,所以我在这里发布这个问题,希望它能对其他人有所帮助。

相关内容