返回介绍

18.4 systemd-journald.service 简介

发布于 2020-11-10 06:52:43 字数 20418 浏览 932 评论 0 收藏 0

18.4 systemd-journald.service 简介

过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之后,登录文件才会开始记录。所以,核心还得要自己产生一个 klogd 的服务, 才能将系统在开机过程、启动服务的过程中的信息记录下来,然后等 rsyslogd 启动后才传送给它来处理~

现在有了 systemd 之后,由于这玩意儿是核心唤醒的,然后又是第一支执行的软件,它可以主动调用 systemd-journald 来协助记载登录文件~ 因此在开机过程中的所有信息,包括启动服务与服务若启动失败的情况等等,都可以直接被记录到 systemd-journald 里头去!

不过 systemd-journald 由于是使用于内存的登录文件记录方式,因此重新开机过后,开机前的登录文件信息当然就不会被记载了。 为此,我们还是建议启动 rsyslogd 来协助分类记录!也就是说, systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所以数据到磁盘文件中,方便未来进行查询喔!

Tips 虽然 systemd-journald 所记录的数据其实是在内存中,但是系统还是利用文件的型态将它记录到 /run/log/ 下面! 不过我们从前面几章也知道, /run 在 CentOS 7 其实是内存内的数据,所以重新开机过后,这个 /run/log 下面的数据当然就被刷新,旧的当然就不再存在了!

18.4.1 使用 journalctl 观察登录信息

那么 systemd-journald.service 的数据要如何叫出来查阅呢?很简单!就通过 journalctl 即可!让我们来瞧瞧这个指令可以做些什么事?

[[email protected] ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional
选项与参数:
默认会秀出全部的 log 内容,从旧的输出到最新的讯息
-n  :秀出最近的几行的意思~找最新的信息相当有用
-r  :反向输出,从最新的输出到最旧的数据
-p  :秀出后面所接的讯息重要性排序!请参考前一小节的 rsyslogd 信息
-f  :类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!)
--since --until:设置开始与结束的时间,让在该期间的数据输出而已
_SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已
_COMM=bash :只输出与 bash 有关的信息
_PID=pid   :只输出 PID 号码的信息
_UID=uid   :只输出 UID 为 uid 的信息
SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来调用出正确的数据!

范例一:秀出目前系统中所有的 journal 日志数据
[[email protected] ~]# journalctl
-- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 00:01:01 CST. --
Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max 
 142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max
 142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpuset
Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpu
.....(中间省略).....
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19268]: finished 0anacron
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19270]: starting 0yum-hourly.cron
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19274]: finished 0yum-hourly.cron
# 从这次开机以来的所有数据都会显示出来!通过 less 一页页翻动给管理员查阅!数据量相当大!

范例二:(1)仅显示出 2015/08/18 整天以及(2)仅今天及(3)仅昨天的日志数据内容
[[email protected] ~]# journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00"
[[email protected] ~]# journalctl --since today
[[email protected] ~]# journalctl --since yesterday --until today

范例三:只找出 crond.service 的数据,同时只列出最新的 10 笔即可
[[email protected] ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10

范例四:找出 su, login 执行的登录文件,同时只列出最新的 10 笔即可
[[email protected] ~]# journalctl _COMM=su _COMM=login -n 10

范例五:找出讯息严重等级为错误 (error) 的讯息!
[[email protected] ~]# journalctl -p err

范例六:找出跟登录服务 (auth, authpriv) 有关的登录文件讯息
[[email protected] ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10
# 更多关于 syslog_facility 的数据,请参考 18.2.1 小节的内容啰!

基本上,有 journalctl 就真的可以搞定你的讯息数据啰!全部的数据都在这里面耶~再来假设一下,你想要了解到登录文件的实时变化, 那又该如何处置呢?现在,请开两个终端机,让我们来处理处理!

# 第一号终端机,请使用下面的方式持续侦测系统!
[[email protected] ~]# journalctl -f
# 这时系统会好像卡住~其实不是卡住啦!是类似 tail -f 在持续的显示登录文件信息的!

# 第二号终端机,使用下面的方式随便发一封 email 给系统上的帐号!
[[email protected] ~]# echo "testing" | mail -s 'tset' dmtsai
# 这时,你会发现到第一号终端机竟然一直输出一些讯息吧!没错!这就对了!

如果你有一些必须要侦测的行为,可以使用这种方式来实时了解到系统出现的讯息~而取消 journalctl -f 的方法,就是 [crtl]+c 啊!

18.4.2 logger 指令的应用

上面谈到的是叫出登录文件给我们查阅,那换个角度想,“如果你想要让你的数据储存到登录文件当中”呢?那该如何是好? 这时就得要使用 logger 这个好用的家伙了!这个家伙可以传输很多信息,不过,我们只使用最简单的本机信息传递~ 更多的用法就请您自行 man logger 啰!

[[email protected] ~]# logger [-p 服务名称.等级] "讯息"
选项与参数:
服务名称.等级 :这个项目请参考 rsyslogd 的本章后续小节的介绍;

范例一:指定一下,让 dmtsai 使用 logger 来传送数据到登录文件内
[[email protected] ~]# logger -p user.info "I will check logger command"
[[email protected] ~]# journalctl SYSLOG_FACILITY=1 -n 3
-- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 18:03:17 CST. --
Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29710]: starting 0yum-hourly.cron
Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29714]: finished 0yum-hourly.cron
Aug 19 18:03:17 study.centos.vbird dmtsai[29753]: I will check logger command

现在,让我们来瞧一瞧,如果我们之前写的 backup.service 服务中,如果使用手动的方式来备份,亦即是使用 "/backups/backup.sh log" 来执行备份时, 那么就通过 logger 来记录备份的开始与结束的时间!该如何是好呢?这样作看看!

[[email protected] ~]# vim /backups/backup.sh
#!/bin/bash

if [ "${1}" == "log" ]; then
        logger -p syslog.info "backup.sh is starting"
fi
source="/etc /home /root /var/lib /var/spool/{cron,at,mail}"
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[ ! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log
if [ "${1}" == "log" ]; then
        logger -p syslog.info "backup.sh is finished"
fi

[[email protected] ~]# /backups/backup.sh log
[[email protected] ~]# journalctl SYSLOG_FACILITY=5 -n 3
Aug 19 18:09:37 study.centos.vbird dmtsai[29850]: backup.sh is starting
Aug 19 18:09:54 study.centos.vbird dmtsai[29855]: backup.sh is finished

通过这个玩意儿,我们也能够将数据自行处置到登录文件当中啰!

18.4.3 保存 journal 的方式

再强调一次,这个 systemd-journald.servicd 的讯息是不会放到下一次开机后的,所以,重新开机后,那之前的记录通通会遗失。 虽然我们大概都有启动 rsyslogd 这个服务来进行后续的登录文件放置,不过如果你比较喜欢 journalctl 的存取方式,那么可以将这些数据储存下来喔!

基本上,systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf 的内容,详细的参数你可以参考 man 5 journald.conf 的数据。 因为默认的情况下面,配置文件的内容应该已经符合我们的需求,所以这边鸟哥就不再修改配置文件了。只是如果想要保存你的 journalctl 所读取的登录文件, 那么就得要创建一个 /var/log/journal 的目录,并且处理一下该目录的权限,那么未来重新启动 systemd-journald.service 之后, 日志登录文件就会主动的复制一份到 /var/log/journal 目录下啰!

# 1\. 先处理所需要的目录与相关权限设置
[[email protected] ~]# mkdir /var/log/journal
[[email protected] ~]# chown root:systemd-journal /var/log/journal
[[email protected] ~]# chmod 2775 /var/log/journal

# 2\. 重新启动 systemd-journald 并且观察备份的日志数据!
[[email protected] ~]# systemctl restart systemd-journald.service
[[email protected] ~]# ll /var/log/journal/
drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a

你得要注意的是,因为现在整个日志登录文件的容量会持续长大,因此你最好还是观察一下你系统能用的总容量喔!避免不小心文件系统的容量被灌爆! 此外,未来在 /run/log 下面就没有相关的日志可以观察了!因为移动到 /var/log/journal 下面来啰!

其实鸟哥是这样想的,既然我们还有 rsyslog.service 以及 logrotate 的存在,因此这个 systemd-journald.service 产生的登录文件, 个人建议最好还是放置到 /run/log 的内存当中,以加快存取的速度!而既然 rsyslog.service 可以存放我们的登录文件, 似乎也没有必要再保存一份 journal 登录文件到系统当中就是了。单纯的建议!如何处理,依照您的需求即可喔!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文