暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

systemd入门9:浅尝journald的配置文件

编程初学者 2021-09-18
741

在上一篇文章中,我们提到了journal文件不仅会存在于 /var/log/journal/ 当中,还可能会存在于 /run/log/journal/ 当中。那么为什么默认情况下,在 /run/log/journal/ 路径下,看起来并没有所谓的日志存在呢?今天就结合journald的配置来讲解一下这个问题。


首先,一定是有一个程序来写日志,并且,它会决定:把日志写入哪个路径。我们追根溯源的话,可以问自己一个问题:journal日志是谁写的?在之前的文章中,其实略有带过,那就是:systemd-journald.service 这个服务。


接着,它又是如何来判断,把日志写到哪里去的呢?答案是:配置文件。单元文件服务通常都会有自己的配置文件,决定了服务的某些行为。


程序员礼节不能忘:

man journald.conf
复制


诶?手册命令man还可以用于配置文件?嘿嘿,没错,man的用途非常广泛,并不是只能用于应用程序。因为Linux本身是一个开源的超级大家庭,只要人人都献出一份爱,什么资源都会有。并且这些社区维护的资源很可能被集成到利于Ubuntu这类分发版中,安装到千家万户的机器上。可谓现代版“旧时王谢堂前燕”。


顺着文件往下看,看到描述这块儿。可以看到手册上方所列的文件,配置了systemd 日志服务,即systemd-journald.service的各种参数。

那这就说明这确实是我们所需要寻找的配置文件。


再顺着手册往下看,选项中的第一个就是


Storage=
复制

这个选项控制了日志数据存储在哪里。有四个值可以选:"volatile", "persistent", "auto", "none"。


"volatile":日志数据只会存储在内存中,也就是说,存储在 /run/log/journal 的路径结构下。


"persistent":数据会优先存储在硬盘上,也就是存储在 /var/log/jouranl 的路径结构下。在启动过程的初始阶段,如果硬盘还不可写的话,/run/log/journal 会成为备选方案。


"auto":和 "persistent" 类似,但是路径 /var/log/journal 路径不会自动创建,所以这个路径是否存在,决定了日志数据的何去何从。


"none":关闭所有存储活动,所有收集到的日志数据都会被丢弃。不过转发给其它目标的数据会被保留,比如控制台,内核日志缓存,syslog套接字等仍旧会运作。


默认的journal命名空间下,默认值是 "auto",即对于系统自带的 journald 来说,Storage= 的默认值是 "auto",其它命名空间下的默认值都是 "persistent"。


读到这里,大部分的疑惑我们都已经解开了。/var/log/journal/ 和 /run/log/journal/ 都会存放日志,关键看几点:

  • 1、journald 的配置文件中,Storage= 选项是否被修改过。

  • 2、如果没有被修改过,那么 /var/log/journal/ 路径是否存在。如果存在,则往这个路径写入日志。

  • 3、如果不存在,则往 /run/log/journal 写入日志。

我的系统上都是默认配置,且路径 /var/log/journal/ 存在,所以日志都会写入这个路径结构。这也就是为什么,/var/log/journal/ 的路径大小 和 journalctl --disk-usage 返回的大小极为接近。这也解释了为什么,在有些问答区,回答”如何在硬盘上保留日志“的时候,解决方案竟然是创建一个文件夹,什么配置都不用改。

不过,上一篇文章还留下了另一个悬念:如果日志写在内存中,也就是说,写在路径 /run/log/journal 下,journalctl --disk-usage 命令会把这个路径下的文件也计算在内么?


我们将以实际行动来解答这个问题。


本文由矻矻来福Krave原创,欢迎关注,带你一起长知识!


文章转载自编程初学者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论