如何在不重启的情况下在systemd-journald中启用持久日志记录
如何在不重新启动节点或者重新启动" 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
中。
在操作完成之前,该调用不会返回