什么是journal?

前言

网上查了不少有关journal文章,比较零散,自己整理总结下,以便后续翻阅。

  1. journal什么呢?
    journal是centos7中systemd的一个组件,由journald处理。捕获系统日志信息、内核日志信息,以及来自原始RAM磁盘的信息,早期启动信息以及所有服务中写入STDOUT和STDERR数据流的信息。可以说是为Linux服务器打造的一种新系统日志方式,这些日志信息写入到二进制文件,使用journalctl阅读,默认存放在/run/log/下。
  2. 这跟之前rsyslog有啥区别或又有啥关系呢?
    systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
    rsyslog.service:主要登录系统与网络等服务的讯息;

    CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志管理功能喔!他使用的是 systemd-journald.service 这个服务来支持的。基本上,系统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给 rsyslog.service 作进一步的记载。
    systemd-journald.service 的记录主要都放置于内存中,因此在存取方面性能比较好。我们也能够通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的登录文件! 这有个好处,就是日志文件可以随着个别服务让你查阅,在单一服务的处理上面,要比跑到 /var/log/messages 去大海捞针来的简易很多!

journalctl使用

上面了解概念之后,记录下如何使用journalctl。日志记录在/run/log/journal/,如下
image.png

  1. 常用命令

    journalctl               #查看所有日志
    journalctl -n 5          #查看最后5条日志
    journalctl -p err        #查看err类型的日志
    journalctl -f            #不断输出最后10条日志
    journalctl --since today #查看今天的日志
    journalctl --since "2020-05-12 08:00:00" --until "2020-05-12 09:00:00"
    journalctl -o verbose    #查看日志详细信息
    journalctl --disk-usage  #检查当前journal使用磁盘量
    journalctl --vacuum-time=2d #只保存2天的日志
    journalctl --vacuum-size=500M #最大500M
    journalctl --verify      #检查journal是否运行正常以及日志文件是否完整无损坏
  2. 持久保存日志

    1. 由于journald默认是保存在内存中,一旦服务器重启,就会丢失,作为生成环境,管理员必须保证系统任何日志不能丢失,通过修改配置文件做持久保存。
    2. 同时,systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf 的内容,详细的参数可以参考 man 5 journald.conf 的数据,下面介绍下storage参数.
    "`volatile`" 表示仅保存在内存中, 也就是仅保存在`/run/log/journal`目录中(将会被自动按需创建)。 "`persistent`" 表示优先保存在磁盘上, 也就优先保存在`/var/log/journal`目录中(将会被自动按需创建), 但若失败(例如在系统启动早期"/var"尚未挂载), 则转而保存在`/run/log/journal`目录中(将会被自动按需创建)。 "`auto`"(默认值) 与 "`persistent`" 类似, 但不自动创建`/var/log/journal`目录, 因此可以根据该目录的存在与否决定日志的保存位置。 "`none`" 表示不保存任何日志(直接丢弃所有收集到的日志), 但日志转发不受影响。 默认值是 "`auto`"

总结

看了鸟哥写的,我也有同样的想法。既然有 rsyslog.service 和logrotate(本编没有介绍,可以看鸟哥写的) 的存在,因此这个 systemd-journald.service 产生的日志文件, 最好还是放到 /run/log 的内存当中,以加快存取的速度! 那么也没有必要再保存一份 journal 日志文件到系统当中了。
初次编写,不是很详细,其它细节就不一一解释,争取下次写的更好~

阅读 220

推荐阅读