Linux journalctl命令用法详解(附带实例)
system.journal 文件是二进制形式的(中间的乱码是当前计算机的机器唯一ID,每个人的都不一样),使用 vim 查看是乱码,那么这个日志就只能使用对应的命令查看,这个命令就是 journalctl 命令。
journalctl 命令的基本格式如下:
journalctl 命令还可以按照时间查看日志,按照时间查看日志的选项相对较多,我们通过举例来详细讲解。
journalctl 命令查看的日志是分页显示的,可以在此页面中执行一下交互命令:
journalctl 命令的交互命令和 vim 的命令模式类似,相对好记忆。
journalctl 命令也可以通过“-n”选项,指定查看最新日志的条数,命令如下:
当然也可以依赖进程 PID 来查看指定的日志,具体命令如下:
日志级别所对应的数字越小,代表此日志的危险等级越高,我们要警惕 0 至 4 级别的日志,如果出现,那么一般需要人为排除相关故障。
笔者在写作时使用的是虚拟机做实验,没有找到 0 至 2 级别的报错日志,这是好事。但是,不幸的是,笔者在查询“err”(3)级别日志时,系统出现报错信息,具体命令如下:
通过这个小意外,相信大家能感受到 journalctl 日志的重要性。笔者建议,应通过脚本定期检测 journalctl 日志中的危险级别日志,如果发现了,就需要人为干预。
按照日期和时间查询日志在实际工作中还是比较实用的,因为服务器在一般情况下会有监控程序,用于监控服务器的日常运行。如果监控程序报警,我们就会明确地知道服务器是在哪个时间点出现的故障,这时再查看这段时间的日志,就可以分析到底是什么原因引起了这个故障。
journald 服务的配置文件保存在 /etc/systemd/journald.conf 中,这个文件主要用于日志的持久化存储,也就是永久保存在硬盘之中的。当前系统的 journald 服务的持久化存在一些小故障,笔者推荐还是使用 rsyslogd 服务来永久保存日志。这个配置文件,我们暂时不讲解了。
journalctl 命令的基本格式如下:
[root@localhost ~]# journalctl [选项] [匹配关键字]选项:
- -n 数字:查看最新的指定条数日志;
- -u 服务单元:按服务名称查看日志;
- _PID=n:按进程 PID 查看日志;
- -p n:按日志级别查看日志,n 为数字,代表日志级别,n 的范围为 0–7,分别代表 emerg(0)、alert(1)、crit(2)、err(3)、warning(4)、notice(5)、info(6)、debug(7);
- -r:按时间倒序查看日志,最新的日志排在最前;
- _UID=n:按用户 UID 查询相关日志;
- --since "时间":按起始时间查找日志;
- --until "时间":按结束时间查找日志。
journalctl 命令还可以按照时间查看日志,按照时间查看日志的选项相对较多,我们通过举例来详细讲解。
journalctl查看所有日志
在系统中,直接执行 journalctl 命令,可以查看 systemd-journald.service 服务记录的所有日志(当然只会记录此次启动之后产生的日志,重启系统之前的日志已经丢失了),具体命令如下:[root@localhost ~]# journalctl #查看所有日志 3 月 06 15:33:38 localhost kernel: Linux version 5.14.0-162.6.1.el9_1.0.1.x86_64 (mockbuild@dal1-prod-buildero01.bld.equ.rockylinux.org> 3 月 06 15:33:38 localhost kernel: The list of certified hardware and cloud instances for Enterprise Linux 9 can be viewed at the Red> 3 月 06 15:33:38 localhost kernel: Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-162.6.1.el9_1.0.1.x86_64 root=UUID=60ff6727-f0> 3 月 06 15:33:38 localhost kernel: x86/fpu: Supporting XSAVE feature 0x001: x87 floating point registers ...省略部分内容...
journalctl 命令查看的日志是分页显示的,可以在此页面中执行一下交互命令:
- 空格:向下翻页;
- u:向上翻页;
- g:快速返回文件首部;
- G:快速到文件尾部;
- /字符串:在日志中搜索字符串;
- n键:搜索下一个;
- N键:搜索上一个;
- q:退出。
journalctl 命令的交互命令和 vim 的命令模式类似,相对好记忆。
journalctl 命令也可以通过“-n”选项,指定查看最新日志的条数,命令如下:
[root@localhost ~]# journalctl -n 5 3 月 06 16:29:33 localhost.localdomain dnf[1310]: Rocky Linux 9-Extras 213 B/s | 2.9 kB 00:14 3 月 06 16:29:33 localhost.localdomain dnf[1310]: 元数据缓存已建立 3 月 06 16:29:33 localhost.localdomain systemd[1]: dnf-makecache.service: Deactivated successfully 3 月 06 16:29:33 localhost.localdomain systemd[1]: Finished dnf makecache 3 月 06 16:29:33 localhost.localdomain systemd[1]: dnf-makecache.service: Consumed 2.735s CPU time.
journalctl查看内核相关日志
journalctl 命令可以使用“-r”选项,查看内核相关日志,具体命令如下:[root@localhost ~]# journalctl -r 3 月 07 16:29:28 localhost.localdomain systemd[1]: Failed to start dnf makecache 3 月 07 16:29:28 localhost.localdomain systemd[1]: dnf-makecache.service: Failed with result 'exit-code' 3 月 07 16:29:28 localhost.localdomain dnf[1893]: - Curl error (6): Couldn't resolve host name for http://mirror.nju.edu.cn/rocky/9.> 3 月 07 16:29:28 localhost.localdomain dnf[1893]: Errors during downloading metadata for repository "baseos": 3 月 07 16:29:28 localhost.localdomain dnf[1893]: Rocky Linux 9-BaseOS 0.0 B/s | 0 B 00:13 3 月 07 16:29:14 localhost.localdomain systemd[1]: Starting dnf makecache... (其余内容省略)当然,在所有日志的结果中,刚刚学习过的日志交互命令都可以使用,如翻页、搜索等。
journalctl按照服务名或进程PID来查看日志
我们可以按照服务名,查看指定服务的日志,具体命令如下:[root@localhost ~]# journalctl -u sshd 3 月 06 15:33:43 localhost systemd[1]: Starting OpenSSH server daemon... 3 月 06 15:33:43 localhost sshd[675]: Server listening on 0.0.0.0 port 22 3 月 06 15:33:43 localhost sshd[675]: Server listening on :: port 22 3 月 06 15:33:43 localhost systemd[1]: Started OpenSSH server daemon 3 月 06 15:33:50 localhost.localdomain sshd[1058]: Accepted password for root from 192.168.112.1 port 57898 ssh2 3 月 06 15:33:50 localhost.localdomain sshd[1058]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
当然也可以依赖进程 PID 来查看指定的日志,具体命令如下:
[root@localhost ~]# journalctl _PID=1 3 月 06 15:33:39 localhost systemd[1]: Starting Create Volatile Files and Directories... 3 月 06 15:33:39 localhost systemd[1]: Finished Create Volatile Files and Directories 3 月 06 15:33:39 localhost systemd[1]: Finished Setup Virtual Console 3 月 06 15:33:39 localhost systemd[1]: dracut ask for additional cmdline parameters was skipped because all trigger condition checks failed 3 月 06 15:33:39 localhost systemd[1]: Starting dracut cmdline hook... (其余内容省略)
journalctl按照用户UID查看某用户产生的日志
可以按照用户的 UID 来查看指定用户产生的日志,具体命令如下:[root@localhost ~]# journalctl _UID=1000 3 月 07 16:12:42 localhost.localdomain passwd[1686]: pam_unix(passwd:chauthtok): authentication failure logname= uid=1000 euid=0 tty=> 3 月 07 16:12:53 localhost.localdomain passwd[1689]: pam_unix(passwd:chauthtok): authentication failure logname= uid=1000 euid=0 tty=> (其余内容省略)注意,日志尾部如果有“=>”,就代表日志一行没显示完整,可以通过小键盘“→”键查看剩余日志信息。
journalctl按照日志警告级别查看日志
使用 journalctl 命令的“-p”选项可以查看指定级别的日志,日志级别用 0 至 7 代表,分别表示:"emerg"(0)、"alert"(1)、"crit"(2)、"err"(3)、"warning"(4)、"notice"(5)、"info"(6)、"debug"(7)。日志级别所对应的数字越小,代表此日志的危险等级越高,我们要警惕 0 至 4 级别的日志,如果出现,那么一般需要人为排除相关故障。
笔者在写作时使用的是虚拟机做实验,没有找到 0 至 2 级别的报错日志,这是好事。但是,不幸的是,笔者在查询“err”(3)级别日志时,系统出现报错信息,具体命令如下:
[root@localhost ~]# journalctl -p 3 3 月 06 15:33:41 localhost kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!这个报错是系统内核没有正确加载“piix4_smbus”模块的驱动导致的,如果严重就会影响系统启动,是需要人为修复的错误。修复此错误不属于本章的内容,就不在这里演示了。
通过这个小意外,相信大家能感受到 journalctl 日志的重要性。笔者建议,应通过脚本定期检测 journalctl 日志中的危险级别日志,如果发现了,就需要人为干预。
journalctl按照日期和时间查看日志
journalctl 命令也可以按照日期和时间查看日志,几种常用的时间格式如下:[root@localhost ~]# journalctl --since "2024-3-6" # 指定日期之后 [root@localhost ~]# journalctl --since "2024-3-6 15:30:00" # 指定日期时间之后 [root@localhost ~]# journalctl --since "2024-3-6 12:00:00" --until "2024-3-6 15:30:00" # 指定时间段 [root@localhost ~]# journalctl --since yesterday # 昨天的日志按照日期和时间查询日志还是比较灵活的,可以形成各种时间组合,在系统帮助中也有一些例子,大家可以参考。
按照日期和时间查询日志在实际工作中还是比较实用的,因为服务器在一般情况下会有监控程序,用于监控服务器的日常运行。如果监控程序报警,我们就会明确地知道服务器是在哪个时间点出现的故障,这时再查看这段时间的日志,就可以分析到底是什么原因引起了这个故障。
journald 服务的配置文件保存在 /etc/systemd/journald.conf 中,这个文件主要用于日志的持久化存储,也就是永久保存在硬盘之中的。当前系统的 journald 服务的持久化存在一些小故障,笔者推荐还是使用 rsyslogd 服务来永久保存日志。这个配置文件,我们暂时不讲解了。