Linux 日志查看入门:journalctl 与 /var/log

举报
yd_254412059 发表于 2026/10/28 09:40:51 2026/10/28
【摘要】 服务器出问题先看日志:本文介绍 journalctl 按服务、时间和级别查日志的方法,以及 /var/log 文本日志的 tail、grep、轮转查看方法,并给出网站 502 的排查顺序和新手常见坑。

服务器出问题时,第一反应不应该是重启,而是先看日志。日志会告诉你服务是什么时候停的、为什么停的、以及停之前最后做了什么。本文介绍 Linux 上最常用的两条日志查看路线:systemd 的 journalctl,以及传统的 /var/log 文本日志。

一、先分清两类日志

使用 systemd 的系统(现在大多数发行版,如 Ubuntu、Debian、CentOS 7 及之后版本都是)会把系统服务、内核和应用输出统一收进 journal,由 journald 管理,用 journalctl 查看。

与此同时,很多程序仍会把日志写成普通文本文件,放在 /var/log 下面,例如 /var/log/messages、/var/log/syslog、/var/log/nginx/error.log、/var/log/mysql/error.log 等。

一个实用的判断方法是:先用 journalctl 查服务,再去 /var/log 查该程序自己的文件,两边对照,基本不会漏掉关键信息。

二、journalctl:按服务、按时间查

查看某个服务的全部日志:

journalctl -u nginx

只看最近的 100 行,并持续跟随新日志(类似 tail -f):

journalctl -u nginx -n 100 -f

只看今天、只看某个时间段的日志:

journalctl --since today
journalctl --since "2026-10-28 08:00" --until "2026-10-28 09:00"

只看报错级别以上的日志,快速定位故障:

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

查看上一次启动(重启前)的日志,这对排查“重启后问题消失、但原因不明”的情况特别有用:

journalctl -b -1 -p err

注意:journalctl 默认输出可能经过分页,直接在终端里按 q 退出;如果想一次性输出给脚本处理,可以加 --no-pager。

三、/var/log:直接看文本文件

先列出目录,确认有哪些日志文件:

ls -lh /var/log

看文件尾部最新内容,服务刚出问题时最常用:

tail -n 100 /var/log/messages
tail -f /var/log/nginx/error.log

在文件里搜索关键词,例如 error、failed、denied、timeout:

grep -i "error" /var/log/messages | tail -n 50
grep -i "failed" /var/log/nginx/error.log | tail -n 50

日志文件会被轮转(logrotate),旧日志常以 .gz 结尾,例如 messages-20261027.gz,查看时用 zcat 或 zgrep:

zcat /var/log/messages-20261027.gz | grep -i error | tail -n 50

四、一个真实的排查顺序

假设网站突然打不开,服务状态显示 nginx 正常,但页面返回 502,可以按这个顺序走:

  1. 先看 nginx 自身的错误日志,确认是不是上游不通:
tail -n 100 /var/log/nginx/error.log
  1. 再看上游应用(例如后端服务)的 journal 日志,确认它是否崩溃、端口是否被占用:
journalctl -u myapp -n 100 --no-pager
  1. 如果怀疑是系统层面问题,再看内核与系统日志:
journalctl -k -p err --since "30 min ago"
dmesg | tail -n 50
  1. 把时间点对齐:先记下故障发生的大致时间,再用 --since 和 --until 把三处日志限定在同一时间窗口,避免被无关旧日志带偏。

五、新手常踩的坑

第一,只看最后一行。很多错误的前因在几十行之前,例如配置加载失败、依赖服务先挂了,最后一行只是结果。

第二,只看一种日志。journalctl 里没有,不代表程序没记日志;反过来,/var/log 里没有,也可能是程序只输出到了 journal。

第三,忽略权限。普通用户可能看不到全部 journal 或某些系统日志,必要时用 sudo 查看,但不要把日志文件权限改成所有人可读。

第四,日志量太大时不加过滤。直接 journalctl 或 cat 大文件会刷屏,先用 -n、-p、–since 和 grep 缩小范围。

六、总结

日常运维记住两条路线就够了:查服务用 journalctl -u 服务名,查程序文件用 tail 和 grep 看 /var/log 下对应的日志。先定时间窗口,再按级别过滤,最后把服务日志、程序日志和系统日志的时间点对齐,多数“服务突然不可用”的问题都能在日志里找到第一条线索。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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