在Linux服务器上排查问题时,我打开最多的命令不是top,也不是ps,而是journalctl。这个命令是systemd日志系统的查询入口,几乎所有用户态服务、内核日志、启动信息都会汇总到这里。无论是服务起不来、磁盘被写满、还是某个进程半夜崩溃,先跑一条journalctl,往往比翻遍/var/log/目录更快定位到问题。这篇内容我会从原理、常用操作、存储机制、实战排查几个方面展开,把我实际踩过的坑和积累的经验一起整理出来。
1. journalctl 到底是什么,它解决的问题又是什么
1.1 日志碎片化,是运维中最头疼的事
接触systemd之前的Linux,日志系统是分散的。syslog/rsyslog负责接收一部分系统日志,写入/var/log/messages或/var/log/syslog;有些应用会自己往/var/log目录里写文件,比如nginx的access.log、error.log;还有一些服务干脆把日志输出到stdout,如果没有额外重定向,重启之后什么都没有。
这就带来一个很现实的问题:当某个服务出问题,你首先得想它把日志写到哪里去了。也许是/var/log/nginx/error.log,也许是/var/log/audit/audit.log,也许它根本没写文件只是把日志打到了系统日志里,甚至只是输出到了终端。排查时间一大半都耗在“找日志”上。
systemd设计的目标之一,就是统一管理所有服务的生命周期和日志。由systemd拉起的服务,只要往标准输出和标准错误输出写内容,systemd-journald这个守护进程就会自动收集,并打上来源服务名、PID、时间戳等元数据,集中存储。journalctl就是用来查询这些集中存储日志的命令行工具。
1.2 journald 和 journalctl 的分工
两者很容易混淆,我说个简单的比喻。systemd-journald是前台的服务员,负责接收、分类、登记所有日志信息,按规矩存到仓库里;journalctl是你手里的查询窗口,你告诉它要看哪一个时间段、哪一个服务、什么级别的日志,它就能快速帮你翻出来。
默认情况下,journald会把日志先写进内存目录/run/log/journal/。这意味着系统重启后日志就没了。很多刚接触的人第一次遇到“重启之前还能看到的日志,重启后查不到”就是这个原因。要解决持久化,需要手动创建/var/log/journal目录,这个后面详细讲。
journalctl还有一个很顺手的能力,就是能直接把内核日志一起查出来。以前要看内核日志得用dmesg命令,现在通过journalctl -k就能看到,还能和普通服务日志放在同一条时间线上,排查启动慢、硬件异常时特别方便。
1.3 日志里那些下划线字段是什么来头
第一次跑journalctl,很多人会看到类似下面这样的输出:
bash复制Jan 11 10:24:16 hostname nginx[12345]: [error] client 192.168.1.10 connected ...
这是默认输出格式,看起来和传统syslog差不多。但是带上-o verbose选项后,你会发现每条日志背后还跟着一堆字段:
bash复制__CURSOR=...
__REALTIME_TIMESTAMP=...
_SYSTEMD_UNIT=nginx.service
_PID=12345
_COMM=nginx
_EXE=/usr/sbin/nginx
_HOSTNAME=hostname
MESSAGE=...
这些字段是journald自动为每条日志打上的“身份证”。比如_SYSTEMD_UNIT表示这条日志来自哪个systemd服务单元,_PID是进程号,_HOSTNAME是主机名,SOURCE_REALTIME_TIMESTAMP是应用打日志的时间。正是因为有这些结构化字段,journalctl才能做到按服务过滤、按PID过滤、按可执行文件名过滤。
这些字段是排查问题时的利器。比如你想看某个进程在某个时间段内做了什么,不需要翻完整份日志,直接用字段过滤,效率能提升好几倍。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. journalctl 最常用的几个操作
2.1 查看服务日志:-u 参数是核心
排查某个服务的问题时,最常用的就是按unit过滤。unit可以理解为systemd管理的一个服务单元,比如nginx.service、docker.service、ssh.service。
bash复制journalctl -u nginx.service
这条命令会把nginx.service的所有日志都列出来,从服务启动到现在的完整记录。我排查问题时第一步基本就是这条命令,然后配合-n指定行数:
bas复制
