Linux 日志系统入门:/var/log 和 journalctl 怎么排查问题?
1. 前言
Linux 出问题时,日志是最重要的线索。
常见问题:
- 服务启动失败;
- SSH 登录失败;
- Nginx 返回 502/500;
- 程序突然退出;
- 磁盘满了;
- 系统被异常登录;
- 服务器重启原因不明。
Linux 常见日志入口有两个:
bash
/var/log
journalctl
本文重点讲解如何用它们排查问题。
2. /var/log 是什么
传统 Linux 日志通常存放在:
bash
/var/log
查看:
bash
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 分页查看
bash
less /var/log/syslog
常用按键:
| 按键 | 作用 |
|---|---|
| 空格 | 下一页 |
| b | 上一页 |
| /keyword | 搜索 |
| n | 下一个匹配 |
| q | 退出 |
3.2 tail 查看最后几行
bash
tail -n 100 /var/log/syslog
实时跟踪:
bash
tail -f /var/log/syslog
3.3 grep 搜索关键词
bash
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:
bash
/var/log/auth.log
CentOS/RHEL:
bash
/var/log/secure
查看 SSH 登录失败:
bash
grep "Failed password" /var/log/auth.log
查看登录成功:
bash
grep "Accepted" /var/log/auth.log
CentOS/RHEL:
bash
grep "Failed password" /var/log/secure
grep "Accepted" /var/log/secure
这类日志适合排查:
- SSH 暴力破解;
- 登录失败;
- sudo 使用记录;
- 认证异常。
5. Nginx 日志
常见路径:
bash
/var/log/nginx/access.log
/var/log/nginx/error.log
实时查看访问:
bash
tail -f /var/log/nginx/access.log
实时查看错误:
bash
tail -f /var/log/nginx/error.log
查找 500:
bash
grep " 500 " /var/log/nginx/access.log
查找错误:
bash
grep -i "error" /var/log/nginx/error.log
排查 502 时,优先看:
bash
tail -n 100 /var/log/nginx/error.log
常见原因:
- 后端服务没启动;
- upstream 地址错误;
- 端口不通;
- 后端超时;
- 权限不足。
6. dmesg:查看内核日志
查看内核日志:
bash
dmesg
查看最近日志:
bash
dmesg | tail
实时跟踪:
bash
dmesg -w
查找 OOM:
bash
dmesg | grep -i "killed process"
查找磁盘错误:
bash
dmesg | grep -i "error"
dmesg 常用于排查:
- 硬件识别;
- USB 插拔;
- 磁盘错误;
- 网卡异常;
- OOM Killer;
- 内核报错。
7. journalctl 是什么
现代 Linux 常用 systemd 管理服务。
systemd 的日志可以通过 journalctl 查看。
查看全部日志:
bash
journalctl
查看最近 100 行:
bash
journalctl -n 100
实时跟踪:
bash
journalctl -f
8. journalctl 查看服务日志
查看某个服务:
bash
journalctl -u nginx
实时查看:
bash
journalctl -u nginx -f
最近 100 行:
bash
journalctl -u nginx -n 100
查看 myapp 服务日志:
bash
journalctl -u myapp -n 100
journalctl -u myapp -f
这比单纯看 nohup.out 更适合正式服务排查。
9. 按时间筛选日志
查看今天:
bash
journalctl --since today
查看最近 1 小时:
bash
journalctl --since "1 hour ago"
指定时间段:
bash
journalctl --since "2026-05-18 10:00:00" --until "2026-05-18 11:00:00"
查看某服务某时间段:
bash
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 |
查看错误:
bash
journalctl -p err
查看 warning 及以上:
bash
journalctl -p warning
查看某服务错误:
bash
journalctl -u myapp -p err
11. 查看本次启动日志
当前启动周期:
bash
journalctl -b
上一次启动:
bash
journalctl -b -1
查看启动列表:
bash
journalctl --list-boots
这对排查"服务器为什么重启"很有用。
12. logrotate:日志轮转
日志不能无限增长。
Linux 通常使用 logrotate 做日志轮转。
配置位置:
bash
/etc/logrotate.conf
/etc/logrotate.d/
查看:
bash
ls /etc/logrotate.d/
轮转后可能出现:
text
access.log
access.log.1
access.log.2.gz
查看压缩日志:
bash
zcat access.log.2.gz
搜索压缩日志:
bash
zgrep "error" access.log.2.gz
13. 常见排查流程
13.1 服务启动失败
bash
systemctl status myapp
journalctl -u myapp -n 100
journalctl -u myapp -f
重点搜索:
text
error
failed
permission
not found
address already in use
13.2 SSH 登录失败
bash
grep "Failed password" /var/log/auth.log
journalctl -u ssh -n 100
或:
bash
journalctl -u sshd -n 100
13.3 程序突然被杀
bash
dmesg | grep -i "killed process"
journalctl -k | grep -i "killed process"
如果出现 OOM,说明内存不足。
13.4 磁盘满了
bash
df -h
du -sh /var/log/*
du -ah /var/log | sort -rh | head
不要随便 rm 正在写的日志文件。
可以清空:
bash
sudo truncate -s 0 /var/log/large.log
14. 日志分析常用命令
统计访问 IP:
bash
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
查找 500 错误:
bash
grep " 500 " access.log
统计接口访问次数:
bash
grep "/api/user" access.log | wc -l
实时查看错误:
bash
tail -f app.log | grep --line-buffered -i "error"
15. 小结
Linux 日志排查抓住两个入口:
text
/var/log:传统日志文件
journalctl:systemd 日志
常用命令:
bash
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
排查问题时,建议按这个顺序:
text
确认问题时间
找到相关服务
看 systemctl status
看 journalctl -u 服务名
看 /var/log 对应日志
搜索 error、failed、timeout、denied
结合端口、进程、磁盘、权限继续判断
掌握日志系统后,Linux 服务故障排查会从"猜问题"变成"按证据定位问题"。