如何在不重启的情况下在systemd-journald中启用持久日志记录

时间:2020-01-09 10:38:16  来源:igfitidea点击:

如何在不重新启动节点或者重新启动" systemd-journald"服务的情况下在" systemd-journald"中启用持久性登录。
默认情况下,systemd日志配置为仅将日志存储在/run/log/journal中的小环形缓冲区中。

journald.conf中的默认存储类型为"自动"。
在自动存储类型中,日记日志将不会持久保存,并且不会在重新启动后继续存在。

journald.conf支持的不同存储类型

  • 存储类型值是使用/etc/systemd/journald.conf文件控制的。

Journal下,我们可以修改存储类型。

  • 支持的值为" volatile"," persistent"," auto"和" none"

  • 默认存储类型配置为"自动"

  • 如果为" volatile",则日志日志数据将仅存储在内存中,即在/run/log/journal层次结构(根据需要创建)下方

  • 如果为" persistent",则数据将最好存储在磁盘上,即在/var/log/journal层次结构下,并在早期引导阶段回退到/run/log/journal,并且磁盘不可写

  • auto值将配置journald以将日记日志数据存储在目录/var/log/journal /中。
    但是,该目录必须已经存在并且设置了适当的权限。
    如果不存在,则日记数据将存储在易失性的/run/log/journal /目录中,并且在系统关闭时会删除这些数据。

  • "none"关闭所有存储,所有接收到的日志数据将被丢弃。

另请阅读:

了解在带有日志日志文件的systemd-journald的RHEL 7中日志记录和logrotate的工作方式

在systemd-journald中启用永久日志记录

方法1:现在,如果我们当前的存储类型是/etc/systemd/journald.conf中的auto,在这种情况下,auto值将配置journald将日志日志数据存储在/var/log/journal /目录。
但是,该目录必须已经存在并且设置了适当的权限。
如果不存在,则日记数据将存储在易失性的/run/log/journal /目录中,并且在系统关闭时会删除这些数据。

现在,在这种情况下,要在systemd-journald中启用持久日志记录,我们只需要创建目录/var/log/journal /,然后systemd-journald将开始将日志日志文件写入磁盘,而不是内存中。

进行此更改后,日志将变为永久日志,并且在重新启动后不会被删除

应遵循的单个步骤

# mkdir -p /var/log/journal

无需重新启动systemd-journald服务或者重新启动节点。
一旦可访问此目录,systemd-journald将开始在此路径下写入日志

# ls -l /var/log/journal/3a0d751560f045428773cbf4c1769a5c/
total 8192
-rw-r----- 1 root root 8388608 Sep  4 08:15 system.journal

方法2:使用方法1中的步骤没有问题,但是再次要正确地在systemd-journal中启用持久日志,我们必须将Storage类型更改为persistent。
在这种情况下,我们无需手动创建/var/log/journal目录。

Storage = persistent替换存储类型

# sed -i 's/#Storage.*/Storage=persistent/' /etc/systemd/journald.conf

接下来,我们可以重新启动" systemd-journald"服务

# systemctl restart systemd-journald.service

警告:

随着服务的重新启动,我们将失去当前会话的所有日志记录。
因此建议使用killall -USR1 systemd-journald
这样,内存日志以及所有后续事件将被复制到新磁盘位置。

如果使用持久存储选项,则数据最好存储在磁盘上,即在/var/log/journal层次结构下(如果需要创建),并回退到/run/log/journal(如果需要则创建) (在需要的情况下),早期启动期间以及磁盘是否不可写。

我们始终可以使用flush将日志日志文件从/run/log/journal移至/var/log/journal

# journalctl --flush

如果启用了持久性存储,则此命令要求Journal守护程序将存储在/run/log/journal中的所有日志数据刷新到/var/log/journal中。
在操作完成之前,该调用不会返回