Linux 系统日志排查:journalctl 与 /var/log 从入门到实战
Linux 系统日志排查:journalctl 与 /var/log 从入门到实战
服务挂了、接口报错、系统半夜告警,日志往往是第一现场。Linux 上的日志分两大块:systemd 管的 journal 日志,和传统的 /var/log 文本日志。会查这两处,大多数故障都能快速定位。
一、先看 journalctl:systemd 的日志入口
用 systemd 的系统,服务日志都在 journal 里,先学会这几个命令:
journalctl -u nginx.service # 只看 nginx 服务的日志
journalctl -u nginx.service -f # 实时跟踪,相当于 tail -f
journalctl -u nginx.service --since "2026-11-09 08:00" # 看某个时间点之后的
journalctl -p err -b # 只看本次开机以来的错误级别日志
-p 是日志级别,从高到低是 emerg、alert、crit、err、warning、notice、info、debug。查故障先看 err 和 warning,别一上来就翻 info。
服务起不来的时候,这条最管用:
systemctl status nginx.service
journalctl -u nginx.service -n 50 # 看最后 50 行,报错原因一般在尾巴上
二、/var/log 里的文本日志
没走 systemd 的服务、或者历史日志,都在 /var/log 里:
ls -lh /var/log/ # 看都有哪些日志文件
tail -f /var/log/messages # 实时看系统日志
tail -n 100 /var/log/nginx/error.log # 看 nginx 错误日志最后 100 行
常见的几个文件要认得:
| 文件 | 内容 |
|---|---|
| /var/log/messages 或 syslog | 系统通用日志 |
| /var/log/secure 或 auth.log | 登录、认证、sudo 记录 |
| /var/log/nginx/access.log、error.log | Nginx 访问与错误日志 |
| /var/log/mysql/error.log | MySQL 错误日志 |
| /var/log/cron | 定时任务执行记录 |
三、定位问题:grep 是主力
日志量大的时候别逐行翻,用 grep 过滤:
grep -i "error" /var/log/nginx/error.log | tail -20 # 只看带 error 的行
grep "2026-11-09 09:" /var/log/messages | grep -i "fail" # 按时间加关键词过滤
journalctl -u myapp.service --since today | grep -i "exception" # 今天的异常
查“什么时候开始出问题”,可以按时间二分:先看最近一小时有没有,再扩大到今天、昨天,报错第一次出现的时间点,往往就是故障起点。
四、登录异常:secure 日志
服务器被暴力破解、账号被盗,secure 日志里都有痕迹:
grep "Failed password" /var/log/secure | tail -20 # 看失败登录
grep "Accepted" /var/log/secure | tail -20 # 看成功登录,核对是不是你本人
last # 看最近登录记录,包括登录 IP 和时间
短时间内大量 Failed password,基本就是有人在扫 SSH 端口,这时要考虑改端口、禁密码登录改密钥、或者上 fail2ban。
五、日志太多怎么办:轮转与瘦身
日志不清理,迟早把磁盘撑爆。先看 journal 占了多少:
journalctl --disk-usage # 看 journal 日志总量
journalctl --vacuum-size=500M # 只保留最近 500M
journalctl --vacuum-time=7d # 只保留最近 7 天
文本日志靠 logrotate 自动轮转,检查规则是否生效:
cat /etc/logrotate.d/nginx
logrotate -d /etc/logrotate.d/nginx # 调试模式,看轮转规则是否生效
六、排查流程
| 现象 | 先查 | 工具 |
|---|---|---|
| 服务起不来 | 服务日志最后几十行 | journalctl -u 服务名 -n 50 |
| 接口报错 | 应用与 Nginx 错误日志 | grep error、tail |
| 登录异常 | 认证日志 | grep Failed password、last |
| 磁盘被日志占满 | 日志大小与轮转 | du、journalctl --disk-usage |
| 不知道何时开始坏 | 按时间过滤 | journalctl --since、grep 时间 |
小结
日志排查的关键是先定位再细看:先用 journalctl 和 status 确认是哪个服务、什么级别的错,再用 grep 按时间和关键词缩小范围,最后才逐行读关键段落。把日志级别、时间过滤和轮转这三件事用熟,半夜被告警叫醒的时候,就不用再从头翻几万行日志了。
- 点赞
- 收藏
- 关注作者
评论(0)