Linux systemd-journald 服务说明
systemd-journald 服务简介
systemd-journald
服务是 systemd init
系统提供的收集系统日志的服务。它会根据从内核、用户进程、标准输入和系统服务错误收到的日志记录信息,维护结构化的索引日记,并以此方式来收集和储存日志记录数据。systemd-journald
服务默认处于启用状态。
默认情况下,systemd-journald
在 /run/log/journal/
中储存日志数据。由于 /run/
目录具有易失本性,因此,在重引导时会丢失日志数据。要永久保存日志数据,/var/log/journal/
目录必须存在且具有正确的所有权和权限,如此,systemd-journald
服务便可在其中储存其数据。
要在终端中查看日志信息,可以使用命令 journalctl
systemd-journald 服务常用配置
持久化日志存储
默认情况下,日志位于 /run/log/journal/
,重启后日志会丢失,为了持久化日志,可按照以下 2 种方法之一配置
方法 1
- 以
root
身份打开/etc/systemd/journald.conf
进行编辑vi /etc/systemd/journald.conf
- 将包含
Storage=
的行取消注释,并将它更改为Storage=persistent
/etc/systemd/journald.conf [Journal]
Storage=persistent
Compress=yes
SystemMaxUse=50M
[...] - 重启
systemd-journald
之后日志会持久化存储于systemctl restart systemd-journald
/var/log/journal
。这些数据最多会占用/var/log/journal
所在文件系统空间的 10%,要更改此限制,可以修改选项SystemMaxUse=50M
- 以
- 方法 2
- 创建目录
/var/log/journal
- 重启日志服务
systemd-journald.service
- 创建目录
journalctl 命令查看日志
不带任何选项时,journalctl
输出所有的日志。
journalctl |
日常使用中,需要配合各种匹配策略类匹配具体的日志。我们可以通过 FIELD=VALUE
的格式来匹配具体的日志记录,通过 man 7 systemd.journal-fields
可以查看所有可用的 match
字段
日志匹配
通过字段 _SYSTEMD_UNIT=cron.service
可以查看服务 cron.service
的日志,等同于选项 -u cron.service
journalctl -u crond |
可以同时添加多个字段进行匹配,它们之间是 与 的关系,就是同时符合多个条件的记录才会被匹配,比如添加 PRIORITY
字段的匹配条件:
journalctl _SYSTEMD_UNIT=crond.service PRIORITY=6 |
注意各个字段的取值,比如为 PRIORITY
设置 debug
、info
是不工作的,必须设置为对应的数字。可以通过 -F
选项来查看某个字段的可选值:
journalctl -F PRIORITY |
对同一个字段使用多个字段匹配时,相当于 或 的关系,匹配的字段都会输出
journalctl _SYSTEMD_UNIT=cron.service _SYSTEMD_UNIT=prometheus.service |
此时 cron.service
和 prometheus.service
的日志都会输出。
使用 +
号可以对多个匹配字段执行 或 操作:
journalctl _SYSTEMD_UNIT=cron.service + _PID=28097 |
上面的命令会输出 cron.service
的日志和进程 28097 的日志。
下面是一个更复杂的例子:
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service |
前面的两个条件是 与 的关系,最后一个条件与前面的两个条件是 或 的关系,也就是相当于用小括号把前面的两个条件括起来。
查看指定时间段的日志
利用 --since
与 --until
选项设定时间段,二者分别负责指定给定时间之后与之前的日志记录,时间格式可以使用多种,如:YYYY-MM-DD HH:MM:SS
,格式中的某些组成部分未进行填写,系统会直接进行默认填充。例如,如果日期部分未填写,则会直接显示当前日期。如果时间部分未填写,则缺省使用 00:00:00
(午夜)。秒字段亦可留空,默认值为 “00”
journalctl _SYSTEMD_UNIT=cron.service --since "2018-03-27" --until "2018-03-27 01:00" |
查看系统启动日志
如果 systemd-journald
配置了日志持久化存储 ,使用选项 --list-boots
会列出系统每次启动时的日志记录信息
journalctl --list-boots |
要查看某次系统启动的详细信息,可以使用 -b
选项指定
journalctl -b 488e152a3e2b4f6bb86be366c55264e7 |
查看系统内核日志
使用选项 -k
可以查看系统内核相关日志。如果 systemd-journald
配置了日志持久化存储,使用 -b
选项可以查看以前系统的内核日志,比如想要查看本次系统启动的前一次启动的内核日志,可以使用以下命令
journalctl -k -b -1 |