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

jdf*_*jdf 42 ubuntu systemd journald journalctl ubuntu-16.04

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

我没有对我的 journald.conf 做任何更改,所以我在那里使用默认值。有容器在运行,所以 docker 日志输出了相当多的数据。

我所看到的示例:

systemctl docker status 确认服务已激活:

since Thu 2016-10-13 18:56:28 UTC
Run Code Online (Sandbox Code Playgroud)

但是,当我运行类似的东西时:

journalctl -u docker.service --since "2016-10-13 22:00"
Run Code Online (Sandbox Code Playgroud)

我得到的唯一输出是:

-- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:为什么我不能使用 journalctl 查看旧日志,我该如何解决这个问题以便查看日志?

Mar*_*erg 24

这可能是因为您试图查看自上次启动以来的日志,这似乎是 docker 映像中的情况。

在 Ubuntu 16.04 上,日志存储默认为内存中。您可以更改默认是打开执着/etc/systemd/journald.conf和改变Storage=从线autopersistent。您可能需要systemctl restart systemd-journald在配置文件编辑后重新启动 journald 。

我认为该日志应该是 persistent-by-default,所以我打开了一个关于它的错误。


jdf*_*jdf 17

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

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.
Run Code Online (Sandbox Code Playgroud)

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

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

注意:我是 OP 并且这个问题仍然有一些赞成票,所以由于我在 journald(和 rtfm)方面获得了更多经验,所以我将其发布在这里希望它可以帮助其他人。

  • 我想强调的是,对于内存日志存储,“10% 的磁盘”是指 10% 的 tmpfs 位于 `/run` 上,它本身通常默认为 10% 的 RAM。所以你可以很快达到这 1% 的 RAM 限制 (6认同)