Linux 日志系统入门:/var/log 和 journalctl 怎么排查问题?

1. 前言

Linux 出问题时,日志是最重要的线索。

常见问题:

  • 服务启动失败;
  • SSH 登录失败;
  • Nginx 返回 502/500;
  • 程序突然退出;
  • 磁盘满了;
  • 系统被异常登录;
  • 服务器重启原因不明。

Linux 常见日志入口有两个:


/var/log
journalctl

本文重点讲解如何用它们排查问题。


2. /var/log 是什么

传统 Linux 日志通常存放在:


/var/log

查看:


ls /var/log

常见日志:

路径 作用
/var/log/syslog 系统综合日志,Ubuntu 常见
/var/log/messages 系统综合日志,CentOS/RHEL 常见
/var/log/auth.log 登录认证日志,Ubuntu 常见
/var/log/secure 安全认证日志,CentOS/RHEL 常见
/var/log/dmesg 内核启动日志
/var/log/nginx/ Nginx 日志
/var/log/mysql/ MySQL 日志
/var/log/apt/ apt 安装日志

不同发行版日志文件名可能不同。


3. 查看日志的基础命令

3.1 less 分页查看

less /var/log/syslog

常用按键:

按键 作用
空格 下一页
b 上一页
/keyword 搜索
n 下一个匹配
q 退出
3.2 tail 查看最后几行

tail -n 100 /var/log/syslog

实时跟踪:


tail -f /var/log/syslog

3.3 grep 搜索关键词

grep -i "error" /var/log/syslog
grep -n "failed" /var/log/syslog
grep -C 3 "timeout" /var/log/syslog

参数含义:

参数 作用
-i 忽略大小写
-n 显示行号
-C 3 显示上下文 3 行

4. 登录认证日志

Ubuntu/Debian:


/var/log/auth.log

CentOS/RHEL:


/var/log/secure

查看 SSH 登录失败:


grep "Failed password" /var/log/auth.log

查看登录成功:


grep "Accepted" /var/log/auth.log

CentOS/RHEL:


grep "Failed password" /var/log/secure
grep "Accepted" /var/log/secure

这类日志适合排查:

  • SSH 暴力破解;
  • 登录失败;
  • sudo 使用记录;
  • 认证异常。

5. Nginx 日志

常见路径:


/var/log/nginx/access.log
/var/log/nginx/error.log

实时查看访问:


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

实时查看错误:


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

查找 500:


grep " 500 " /var/log/nginx/access.log

查找错误:


grep -i "error" /var/log/nginx/error.log

排查 502 时,优先看:


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

常见原因:

  • 后端服务没启动;
  • upstream 地址错误;
  • 端口不通;
  • 后端超时;
  • 权限不足。

6. dmesg:查看内核日志

查看内核日志:


dmesg

查看最近日志:


dmesg | tail

实时跟踪:


dmesg -w

查找 OOM:


dmesg | grep -i "killed process"

查找磁盘错误:


dmesg | grep -i "error"

dmesg 常用于排查:

  • 硬件识别;
  • USB 插拔;
  • 磁盘错误;
  • 网卡异常;
  • OOM Killer;
  • 内核报错。

7. journalctl 是什么

现代 Linux 常用 systemd 管理服务。
systemd 的日志可以通过 journalctl 查看。

查看全部日志:


journalctl

查看最近 100 行:


journalctl -n 100

实时跟踪:


journalctl -f


8. journalctl 查看服务日志

查看某个服务:


journalctl -u nginx

实时查看:


journalctl -u nginx -f

最近 100 行:


journalctl -u nginx -n 100

查看 myapp 服务日志:


journalctl -u myapp -n 100
journalctl -u myapp -f

这比单纯看 nohup.out 更适合正式服务排查。


9. 按时间筛选日志

查看今天:


journalctl --since today

查看最近 1 小时:


journalctl --since "1 hour ago"

指定时间段:


journalctl --since "2026-05-18 10:00:00" --until "2026-05-18 11:00:00"

查看某服务某时间段:


journalctl -u myapp --since "2026-05-18 10:00:00" --until "2026-05-18 11:00:00"


10. 按级别筛选日志

日志级别:

级别 名称
0 emerg
1 alert
2 crit
3 err
4 warning
5 notice
6 info
7 debug

查看错误:


journalctl -p err

查看 warning 及以上:


journalctl -p warning

查看某服务错误:


journalctl -u myapp -p err


11. 查看本次启动日志

当前启动周期:


journalctl -b

上一次启动:


journalctl -b -1

查看启动列表:


journalctl --list-boots

这对排查“服务器为什么重启”很有用。


12. logrotate:日志轮转

日志不能无限增长。
Linux 通常使用 logrotate 做日志轮转。

配置位置:


/etc/logrotate.conf
/etc/logrotate.d/

查看:


ls /etc/logrotate.d/

轮转后可能出现:


access.log
access.log.1
access.log.2.gz

查看压缩日志:


zcat access.log.2.gz

搜索压缩日志:


zgrep "error" access.log.2.gz


13. 常见排查流程

13.1 服务启动失败

systemctl status myapp
journalctl -u myapp -n 100
journalctl -u myapp -f

重点搜索:


error
failed
permission
not found
address already in use

13.2 SSH 登录失败

grep "Failed password" /var/log/auth.log
journalctl -u ssh -n 100

或:


journalctl -u sshd -n 100

13.3 程序突然被杀

dmesg | grep -i "killed process"
journalctl -k | grep -i "killed process"

如果出现 OOM,说明内存不足。

13.4 磁盘满了

df -h
du -sh /var/log/*
du -ah /var/log | sort -rh | head

不要随便 rm 正在写的日志文件。
可以清空:


sudo truncate -s 0 /var/log/large.log


14. 日志分析常用命令

统计访问 IP:


awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

查找 500 错误:


grep " 500 " access.log

统计接口访问次数:


grep "/api/user" access.log | wc -l

实时查看错误:


tail -f app.log | grep --line-buffered -i "error"


15. 小结

Linux 日志排查抓住两个入口:


/var/log:传统日志文件
journalctl:systemd 日志

常用命令:


tail -f /var/log/syslog
tail -f /var/log/nginx/error.log
grep -i "error" app.log
journalctl -u nginx -f
journalctl -u myapp -n 100
journalctl --since "1 hour ago"
journalctl -p err
dmesg | tail

排查问题时,建议按这个顺序:


确认问题时间
找到相关服务
看 systemctl status
看 journalctl -u 服务名
看 /var/log 对应日志
搜索 error、failed、timeout、denied
结合端口、进程、磁盘、权限继续判断

掌握日志系统后,Linux 服务故障排查会从“猜问题”变成“按证据定位问题”。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐