为什么日志日志文件如此庞大?

Smi*_*_33 9 logging systemd journald

当我做一个时,journalctl --disk-usage它说日志文件的大小大约为300MB,但是当我查看实际文本时,journalctl | wc -c它大约为28MB。嗯,journald 有压缩,甚至考虑到元数据,如时间戳、uid、消息哈希等,在我看来,这似乎是对磁盘空间的荒谬浪费。

有人能告诉我为什么日志文件与里面的实际文本相比如此之大吗?

Mar*_*erg 7

有两个原因。首先,正如@Mella 提到的,当前日志与所有日志之间存在差异。

其次,如 中所述man journalctl,有多种输出格式。您正在测量最紧凑/最不详细的尺寸。要查看 systemd 日志中的最大数据,请使用:

journactl --output=verbose
Run Code Online (Sandbox Code Playgroud)

在我的例子中,紧凑型日志输出返回 32 Megs 的数据,同时返回 128 MB--output=verbose和 152M journalctl --disk-usage,包含活动日志和存档日志。

如果您担心,请参阅man journald.conf了解如何限制磁盘空间journald使用量。

  • 恕我直言,这个答案很有用,但有点误导。虽然确实有更大的 *verbose* 输出,但这无法解释更大的磁盘文件。我检查了一个 see `journald` `.journal` 文件是 8MiB 但是只给出大约 56kiB **verbose** 输出。显然必须有另一种解释来解释为什么`journald` 对磁盘存储如此浪费(另见 https://unix.stackexchange.com/q/462266/24394) (4认同)

hum*_*ace 5

  1. 它们很大,因为它是一个错误:

由于它在上游指示并且因此为 journald 的开发人员所知,二进制日志格式中使用的 根本不是很好(还没有?)。

  1. 它们很大,因为可能没有激活压缩

/etc/systemd/journald.confnamed 中还有一个选项Compress=yes,它可能在您的系统上未激活,因此实际上没有压缩。

  1. 归档期刊的问题在这里无关紧要。

虽然原则上 journald 区分了活动日志和存档日志日志,但这是对其他答案的误导性回复,因为man journalctl它明确指出:

输出从所有可访问的日志文件中交错,无论它们是轮换的还是当前正在写入的,也无论它们是属于系统本身还是可访问的用户日志。

因此,另一个答案在这里具有误导性。

  1. 由于某些文件分配、碎片化、反腐败措施,journalctl 的磁盘使用量很大(即大于具有可比信息级别的纯文本文件 - 即字段)。

“文件碎片/分配问题”

在我journalctl --version == "systemd 239[...]"的机器上,包含数据的日志文件以 8MiB 的倍数存在。因此,在我的系统日志文件中,即使只有一小部分(例如 56kiB)数据实际存储在其中,也会有 8MiB 大。

“反腐败问题,”据开发商珀特林一个journald,并systemd在该杂志被认为已成为被损坏的情况下journald,它不会被“固定”,而是保持原样,以防止进一步的问题。(见https://bugs.freedesktop.org/show_bug.cgi?id=64116#c3

这当然意味着未压缩的、几乎为空的日志二进制日志文件很有可能位于您的 var 日志中,这使得它实际上比正常的明文替代方案要大得多。