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 |