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

systemd入门10:修改journald的配置文件实战

编程初学者 2021-09-20
2744

话接上回,我和大家做了一个约定,是说要以实际操作的结果,来证明一下 --disk-usage 参数是不是会包含内存中的日志文件。那么思路就是:通过修改 systemd-journald.service 的配置文件,让 journald 将新生成的日志,全部写入到 /run/log/journal/ 中去。然后我们对比一下3样东西在修改前,及修改后有什么不同之处。


  • /run/log/journal/的路径容量大小,存放内存中的日志文件

  • /var/log/journal/的路径容量大小,存放硬盘中的日志文件

  • journalctl --disk-usage的输出结果,最后我们来看看,输出的结果是不是前2者的总和


以下是修改前的3者状态,先放在这里,以便后续进行对比:


如果新出的日志仍旧计算到了 journalctl --disk-usage 当中,那么就说明它既计算了硬盘中的日志,同样还包含了内存中的日志。


那么让我们开始吧。诶?去哪里改我们的日志来着?我发现每当我有疑惑无法解决时,一定是我的礼数不到位啊。


man journald.conf
复制


手册列出了所有 journald 的配置文件:


好家伙,这么多文件,都快赶上我头发的数量了。别担心,顺着文件往下看:


从这里看到的是:/etc/ 是留给本地管理员的,那个人就是我。

属于 /etc/ 路径的配置文件有以下3项:


  • /etc/systemd/journald.conf

  • /etc/systemd/journald.conf.d/*.conf

  • /etc/systemd/journald@NAMESPACE.conf


其中,/etc/systemd/journald.conf 是默认的示范文件,里面全都是注释掉的选项。就像写代码一样,注释掉的内容只不过是给开发者看的,并不会对程序起到什么作用。那么,为什么会存放一个没有实际作用的文件呢?


其实,journald 守护进程的默认配置,是在Linux分发版构建时,就已经写在操作系统中的,也就是说,有没有配置文件,并不影响 journald 的默认配置。但是,为了方便管理员和开发者能够以最直观的方式,了解journald的默认配置的各个选项及其对应的默认值,同时清楚地知晓journald的配置文件的结构,所以才会把一个只有注释的文件放在这里。不过倒也不是完全没用,因为如果把注释按需解除,那么这个文件中的配置仍旧会生效。只是到时候管理员想要再恢复默认设置的话,就需要花大力气去寻找默认值是什么了。另外,这么多配置都集中在一个文件当中,journald又涉及到整个操作系统的所有程序的日志处理,这样维护起来必定会造成麻烦。所以并不推荐修改这个文件来达到对 journald 配置的目的。


其次,/etc/systemd/journald@NAMESPACE.conf 是留给管理非默认的命名空间的实例的。说人话就是,它不是默认的 systemd-journald.service 实例所使用的配置文件。


那么就只剩下 /etc/systemd/journald.conf.d/*.conf 了。


那我随便在 /etc/systemd/journald.conf.d/ 路径下创建一个以 .conf 为后缀的配置文件,就完事了呗。事情倒也没有那么朴素。


因为配置文件可以有很多,一旦多个文件中出现相同的选项,而选项值不同时,哪个文件的优先级高,哪个文件中的选项就会生效。那么如何来排定优先级的高低呢?答案是:文件名的字典顺序。简便起见,官方还给出了配置文件的命名规范:

以2位数字和横杠构成文件名前缀,中间可以是任意内容,以 .conf 结尾。


比如我们将文件名命名为01-storage.conf:


编辑配置文件输入以下内容:


[Journal]
Storage=volatile
复制


由于 systemd-journald.service 并不支持配置文件的重载,即无法使用:


sudo systemctl reload systemd-journald
复制

在保持 systemd-journald.service 不中断工作的情况下,直接重载配置文件。


所以,我们只能够通过


sudo systemctl restart systemd-journald
复制

的方式,先中断 systemd-journald.service ,然后重启服务,实现新编辑的配置文件生效的效果。


接下来,检查一下 journald 服务有没有因为配置文件错误,而导致重启失败:


sudo systemctl status systemd-journald
复制


从上图可以看到,服务不仅正常运行,且日志路径也已成功切换为 /run/log/journal/ 下了。


最后,让我们来看看 journald 往内存写入日志之后,--disk-usage 参数展示的结果是否会包含内存中的文件大小。


如图所示,内存路径下,容量不再是0,而是达到了9M;磁盘路径下,容量与修改配置之前,完全相同。而 --disk-usage 展示的结果,则正好多了 9M。


所以我们得到的结论是:journalctl --disk-usage 不论日志是存放在硬盘中,还是存放在内存中,都会一丝不苟地进行计算加总,并在结果中,将总容量展示出来。


欢迎关注我并与我私信交流。祝各位中秋快乐!


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

评论