目前,在大多数主流 Linux 发行版中,systemd 已取代传统的 SysVinit 成为默认的初始化系统。其最大的优势之一在于统一、高效的日志管理系统。
-
传统模式(syslog) :日志分散在
/var/log/下多个纯文本文件中,分析时需频繁组合grep,awk,tail等命令,操作繁琐。 -
现代模式(systemd-journald) :日志被集中收集并以二进制格式结构化存储,通过
journalctl这一单一命令,即可提供强大的查询、过滤和实时监控能力,大大提升了系统管理员排错和审计的效率。
1.核心概念
-
journald :
systemd套件中的日志收集守护进程。它负责从内核、系统服务、应用程序等各类来源接收日志消息,并写入到系统日志中。 -
journalctl :用于与
journald交互的命令行工具。它是查询、分析和操作这些集中式日志的核心利器。
2.确认日志服务已启用
部分桌面发行版可能默认不持久化存储日志。请按以下步骤验证和启用:
(1)检查日志目录
确认 /var/log/journal/ 目录是否存在。若不存在,需要手动创建并设置正确权限(通常系统会自动处理),如下命令:
sudo mkdir -p /var/log/journal
sudo chown root:systemd-journal /var/log/journal
sudo chmod 755 /var/log/journal
示例:
[root@yyzcdb81 ~]# mkdir -p /var/log/journal
[root@yyzcdb81 ~]# chown root:systemd-journal /var/log/journal
[root@yyzcdb81 ~]# chmod 755 /var/log/journal
[root@yyzcdb81 ~]#
(2)检查配置文件
编辑 /etc/systemd/journald.conf,确保 Storage= 选项设置为 persistent(永久存储):
[Journal]
Storage=persistent

(3)重启 journald 服务
[root@yyzcdb81 ~]# systemctl restart systemd-journald
[root@yyzcdb81 ~]#
(4)验证目录是否被使用
[root@yyzcdb81 ~]# ls -la /var/log/journal/
总用量 8
drwxr-xr-x 3 root systemd-journal 46 1月 16 11:48 .
drwxr-xr-x. 20 root root 4096 1月 16 11:42 ..
drwxr-xr-x 2 root root 206 1月 16 11:48 763d2caf072f43a4838ece68a2b5010a
[root@yyzcdb81 ~]#

3.基础操作:查看与导航日志
3.1 查看完整日志
journalctl
默认按时间顺序(从旧到新)显示所有日志,并使用 less 分页器进行浏览。
关于 less 的快捷键功能如下:
| 快捷键 | 功能 |
|---|---|
空格键 或 Page Down |
向下翻一页 |
b 或 Page Up |
向上翻一页 |
g |
跳转到第一行 |
G |
跳转到最后一行 |
/关键词 |
向下搜索 |
?关键词 |
向上搜索 |
n / N |
跳转到下一个/上一个匹配项 |
q |
退出 |
3.2基本显示控制
(1)反转顺序(最新优先):
journalctl -r

(2)仅查看最新 N 行:
journalctl -n 10

(3)禁用分页,直接输出:
journalctl --no-page
它适用于脚本中或需要重定向时。
(4)实时跟踪日志:
journalctl -f

功能类似 tail -f,按 Ctrl+C 终止。
4.进阶技巧:精准过滤日志
journalctl 的真正威力在于其强大的过滤能力。
4.1 按时间过滤
(1)使用自然语言:
journalctl --since "yesterday"
journalctl --since "today"
journalctl --since "2 hours ago" --until "1 hour ago"
(2)使用精确时间戳:
journalctl --since "2026-01-14 09:00:00" --until "2026-01-15 20:00:00"
(3)显示 UTC 时间:
journalctl --utc
4.2 按系统组件过滤
(1)按服务(Unit)
journalctl -u sshd -u nginx.service
(2)按进程ID
journalctl _PID=1111
(3)按用户/组ID
journalctl _UID=1000 _GID=1000
(4)仅内核消息
journalctl -k

4.3 按优先级(日志等级)过滤
系统日志按严重程度分为以下等级(数字越小越严重):
| 优先级数字 | 名称 | 说明 |
|---|---|---|
| 0 | emerg | 系统不可用 |
| 1 | alert | 必须立即采取措施 |
| 2 | crit | 严重情况 |
| 3 | err | 错误 |
| 4 | warning | 警告 |
| 5 | notice | 普通但重要的事件 |
| 6 | info | 信息性消息 |
| 7 | debug | 调试信息 |
查看特定级别及以上 :journalctl -p err (显示所有错误、严重、警报和紧急消息)
查看级别范围 :journalctl -p warning..info 或 journalctl -p 4..6
4.4 按系统启动周期过滤
(1)列出所有启动记录:
journalctl --list-boots
[root@yyzcdb81 ~]# journalctl --list-boots
0 fb70ee73675940929779319e7d577041 五 2025-12-19 02:10:49 CST---五 2026-01-16 12:20:01 CST
[root@yyzcdb81 ~]#
(2)查看特定启动周期的日志:
journalctl -b -0 # 当前启动周期
journalctl -b -1 # 上一次启动周期
journalctl -b -2 # 上上次启动周期
5.综合应用:解决实际问题的命令示例
5.1 查看 SSH 服务从今早开始出现的错误
journalctl -u ssh --since "today" -p err
5.2 系统刚刚启动失败,查看上次启动的所有内核和关键错误
journalctl -b -1 -k -p crit..err
5.3 实时监控 Nginx 服务的访问日志(info级别)
journalctl -u nginx -f _TRANSPORT=journal PRIORITY=6
5.4 经典排错命令
常用于系统服务启动失败后,立即查看详细的错误上下文。
journalctl -xe
-
-e:直接跳转到日志末尾。 -
-x:提供额外的解释信息和可能的解决方案链接(如果存在)。
6.系统维护与资源管理
6.1 检查日志占用的磁盘空间
journalctl --disk-usage
[root@yyzcdb81 ~]# journalctl --disk-usage
Archived and active journals take up 272.0M on disk.
[root@yyzcdb81 ~]#
6.2清理历史日志(谨慎操作)
# 清理早于指定时间的日志
journalctl --vacuum-time=2weeks
# 或将日志总体积限制到指定大小
journalctl --vacuum-size=500M
[root@yyzcdb81 ~]# journalctl --vacuum-time=2weeks
Deleted archived journal /var/log/journal/763d2caf072f43a4838ece68a2b5010a/system@ec908698112d428d9c82876cf1f78404-0000000000000001-0006463de16e9c8a.journal (128.0M).
Deleted archived journal /var/log/journal/763d2caf072f43a4838ece68a2b5010a/system@ec908698112d428d9c82876cf1f78404-000000000002392b-0006467d60845bf4.journal (128.0M).
Vacuuming done, freed 256.0M of archived journals on disk.
[root@yyzcdb81 ~]# journalctl --disk-usage
Archived and active journals take up 16.0M on disk.
[root@yyzcdb81 ~]#
[root@yyzcdb81 ~]# journalctl --vacuum-size=500M
Vacuuming done, freed 0B of archived journals on disk.
[root@yyzcdb81 ~]#
journalctl 是 systemd 时代不可或缺的日志分析工具。掌握其核心过滤语法(按时间、服务、优先级)是高效运维的关键。对于复杂问题,应善用组合过滤条件缩小排查范围。