Linux 日志排查入门:journalctl、tail 与 dmesg

举报
vanseny 发表于 2026/11/11 09:43:04 2026/11/11
【摘要】 Linux 日志排查入门:journalctl、tail 与 dmesg服务突然挂了,服务器突然变慢,第一反应往往是重启。但重启之前先看一眼日志:系统和服务在出事之前,一般都已经把原因写下来了。日志排查就三个动作:journalctl 看系统和服务的记录,tail 盯着正在写的日志文件,dmesg 看内核的消息。学会这三步,出问题先找证据,再决定修哪里。 一、journalctl:先看系统...

Linux 日志排查入门:journalctl、tail 与 dmesg

服务突然挂了,服务器突然变慢,第一反应往往是重启。但重启之前先看一眼日志:系统和服务在出事之前,一般都已经把原因写下来了。日志排查就三个动作:journalctl 看系统和服务的记录,tail 盯着正在写的日志文件,dmesg 看内核的消息。学会这三步,出问题先找证据,再决定修哪里。

一、journalctl:先看系统和服务说了什么

用 systemd 的系统,服务日志都集中在 journal 里,journalctl 就是翻这本总账的工具。先看一个服务的最近记录:

journalctl -u nginx --since "1 hour ago"

这行是只看 nginx 这个服务最近一小时的日志。-u 指定服务名,–since 限定时间范围。服务刚挂,时间范围收得越窄,越快找到出事那一刻的记录。

日志太多,想只看报错,可以只翻错误级别以上的:

journalctl -p err --since today

-p err 是只显示错误和更严重的级别,–since today 是只看今天的。满屏的普通信息一下子被过滤掉,剩下的就是真正值得看的几行。

服务正在出问题、想实时看它在写什么,加 -f 跟随输出:

journalctl -u nginx -f

这行会一直盯着 nginx 的新日志,有新记录就实时打出来。复现一次故障,看着日志一行行冒出来,报错出现的位置就是故障发生的位置。看完按 Ctrl+C 退出。

二、tail:盯着正在写的日志文件

不是所有日志都在 journal 里,很多服务还把日志写进文件,比如 /var/log/nginx/error.log。看这种文件,tail 是最直接的工具。先看最后几十行:

tail -n 50 /var/log/nginx/error.log

这行是看文件最后 50 行。服务刚报错,原因一般就藏在文件尾巴这几十行里,不用从头翻到尾。

想实时盯着文件,等报错自己冒出来,加 -f:

tail -f /var/log/nginx/error.log

这行会一直等在文件尾部,有新内容写入就立刻显示。复现一次故障,报错出现的那一刻就能看到,不用事后猜时间点。

只关心报错行,可以先过滤再看:

tail -n 200 /var/log/nginx/error.log | grep -i error

这行是先取最后 200 行,再只留下带 error 的行。-i 是忽略大小写,Error、ERROR 都能抓到。日志文件动不动几万行,先过滤再读,比逐行翻快得多。

三、dmesg:看内核的消息

有些问题不在服务层,在更底层:磁盘报错、内存不足、网卡掉线,这些都写在内核日志里,dmesg 就是读它的工具。先看最近的内核消息:

dmesg | tail -n 30

这行是看内核日志的最后 30 行。磁盘读写报错、内存被耗尽杀进程(OOM),都会先出现在这里。

只看和磁盘有关的消息,可以过滤:

dmesg | grep -i -E "disk|sd[a-z]|I/O error"

这行是只留带磁盘关键词的行。磁盘刚出过错,这里会有明确的读写失败记录;服务层只会报超时,原因要到内核日志里找。

时间太久的内核消息不好定位,加 -T 显示人类可读的时间:

dmesg -T | tail -n 20

-T 是把内核启动后的相对秒数换算成日期时间。看到一条报错,先对一下它发生的时间,再去翻同一时间的服务日志,两边对上了,故障链条就完整了。

四、三个新手常踩的坑

第一,出问题只看报错那一行。单行报错常常只说结果不说原因,往上翻十几行,经常能看到真正的原因:比如服务重启前其实已经连不上数据库了。看到报错先往上翻,别只盯着最后一行。

第二,日志级别不分就全看。服务日志里九成是正常信息,全看等于大海捞针。先用级别过滤(-p err)或关键词过滤(grep),把范围收窄到报错附近,再精读那几十行。

第三,服务日志和系统日志只看一边。服务说连不上,可能是服务自己的配置错了,也可能是系统层面的磁盘满了、内存耗尽了。journalctl、tail、dmesg 三个都看过,互相印证,才算查完整;只看一边,很容易把系统问题当成服务问题修错方向。

journalctl 看系统和服务的记录,tail 盯着正在写的日志文件,dmesg 看内核的消息。三步走完,先找到出事那一刻的记录,再决定修哪里。服务下次再挂,先花一分钟翻一翻日志,再决定是重启、改配置,还是修底层的问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。