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

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 服务故障排查会从"猜问题"变成"按证据定位问题"。

相关推荐
Linux系统运维工程师_郭主任13 分钟前
运维人还在被拒offer?现在能考的,只有 RHCE 10.0。
linux
自养Agent24 分钟前
MCP Server Boundary Audit Report
linux·服务器·人工智能·windows·大模型·llm
Coisinier1 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
A心有千千结2 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github
书生执笔画浮沉2 小时前
Linux 内核模块为什么不能自己解决兼容性问题?
linux·c·kernel·update·灵感
15Moonlight2 小时前
Linux网络(03):Socket 编程 TCP
linux·网络·tcp/ip
广州灵眸科技有限公司3 小时前
单芯片同时跑 Linux 与 RT-Thread:RV1126B的AMP异构方案完整拆解
linux·运维·服务器
小雪崩3 小时前
嵌入式学习:Linux驱动开发总结
linux·驱动开发·学习
C++ 老炮儿的技术栈3 小时前
std::atomic 是什么
linux·c语言·网络·c++·visual studio
2401_862880823 小时前
input 子系统框架 、platform 驱动框架
linux·驱动开发·嵌入式硬件