设置
在内核 4.19.62 上使用 systemd 244 (244.5+)。
我想将总日志存储大小设置为 100MB。 Journald 设置为易失性存储,因此日志最终会保存/run/log/journal/...
在运行时最大使用应用于设置存储配额,如下所示/etc/systemd/journald.conf:
[Journal]
Storage=volatile
RuntimeMaxUse=100M
RuntimeMaxFileSize=2M
通过调整这些配置值,日志日志大小和配额确实会发生变化,journalctl 中的启动消息也会显示变化。
在配置值更改之间,我停止 systemd-journald.service,删除system*
其下的所有文件/run/log/journal/...
并重新启动该服务。
笔记:当Storage=persistent
和 日志使用时/var/log/journal/
,相当于系统最大使用量得到正确的尊重。这似乎只是 volatile/RuntimeMaxUse 中的一个错误。
观察到的错误
运行时最大使用量(100M) 被忽略。期刊配额设置为64MB只要运行时最大文件大小小于32M。
如果运行时最大文件大小设置为超过 32M,则日志配额设置为该值的两倍。
运行最大使用量在这两种情况下似乎都被忽略。
这是 Journald/systemd 配置处理中的错误吗?为什么是运行时最大使用量忽略,值为 64M 或双倍运行时最大文件大小用作期刊配额?
我看到日志源中有几个地方可以将 max_use 设置为双倍 max_size:
- https://github.com/systemd/systemd/blob/v244/src/journal/journal-file.c#L3747
- https://github.com/systemd/systemd/blob/v244/src/journal/journal-file.c#L3772
错误示例
设置了 64M 的RuntimeMaxUse=100M
配额RuntimeMaxFileSize=2M
(而不是我请求的 100M),如日志启动消息中所示:
systemd-journald[20312]: Runtime Journal (/run/log/journal/...) is 2.0M, max 64.0M, 62.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 2.0M.
-- Maximum allowed usage is set to 64.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 64.0M, of which 62.0M are still available.
使用RuntimeMaxUse=100M
和RuntimeMaxFileSize=31M
,仍然使用 64M:
systemd-journald[20989]: Runtime Journal (/run/log/journal/...) is 8.0M, max 64.0M, 56.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 64.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 64.0M, of which 56.0M are still available.
使用RuntimeMaxUse=100M
和RuntimeMaxFileSize=33M
,配额最终为 66M:
systemd-journald[21557]: Runtime Journal (/run/log/journal/...) is 8.0M, max 66.0M, 58.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 66.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 66.0M, of which 58.0M are still available.
使用RuntimeMaxUse=100M
andRuntimeMaxFileSize=200M
我们突破了 100M 限制,400M 似乎来自 RuntimeMaxFileSize 200M 的两倍:
systemd-journald[25271]: Runtime Journal (/run/log/journal/...) is 8.0M, max 400.0M, 392.0M free.
-- Runtime Journal (/run/log/journal/...) is currently using 8.0M.
-- Maximum allowed usage is set to 400.0M.
-- Leaving at least 1.5G free (of currently available 31.2G of disk space).
-- Enforced usage limit is thus 400.0M, of which 392.0M are still available.
答案1
64M 来自我不知道的附加配置文件:/lib/systemd/journald.conf.d/00-systemd-conf.conf
.
删除附加设置后RuntimeMaxUse=64M
,我现在可以在 中设置所需的值/etc/systemd/journald.conf
。
提示:在journald启动时使用strace来查看它真正使用的配置文件以及它们的读取顺序。这就是/lib
配置文件最终被揭示的方式。