Linux服务器系统日志分析实操指南
为什么要分析Linux服务器系统日志
无论是新装的服务器还是运行多年的业务,系统日志都是最重要的排错线索。日志记录了内核、服务、登录、硬件等几乎一切状态变化。
当你遇到网站打不开、SSH连不上、磁盘报警时,第一个该去的地方就是日志。
准备工作:先确认能访问日志
- 你至少需要一台Linux服务器(本文以CentOS 7/8、Ubuntu 20.04为例)
- 拥有普通sudo权限或root权限(大部分日志默认只有管理员可看)
- 确认
systemd-journald工作正常:
systemctl status systemd-journald
如果没有运行,先启动:sudo systemctl start systemd-journald
三个最常用的日志查看方法
1. 最通用:/var/log/ 目录下的文件
传统的日志存储在/var/log/下,常见文件包括:
/var/log/messages(大多数系统消息,CentOS 6及更早版本)/var/log/syslog(Ubuntu、Debian)/var/log/secure(认证与安全日志)/var/log/maillog(邮件服务)/var/log/cron(计划任务)
查看最新50行:
sudo tail -50 /var/log/messages
实时跟踪新增日志:
sudo tail -f /var/log/messages
按关键词过滤:
sudo grep "error" /var/log/messages
结合less分页查看:
sudo less /var/log/messages
(按/输入关键词搜索,按n跳转下一个匹配)
2. 现代系统首选:journalctl
journald(systemd的日志组件)把日志集中管理,格式更友好。
查看所有日志:journalctl
查看本次启动以来的日志:
journalctl -b
只显示指定服务:
journalctl -u nginx.service
查看指定时间段的日志:
journalctl --since "2025-04-01 10:00:00" --until "2025-04-01 11:00:00"
实时跟踪(类似tail -f):
journalctl -f
3. 内核日志专用:dmesg
硬件、驱动、内核模块的信息通常用dmesg查看:
dmesg | less
查看最后20条:
dmesg | tail -20
过滤磁盘相关:
dmesg | grep -i sda
高频问题与解决思路
问题1:/var/log/messages 文件巨大,打不开
- 原因:日志积累过多,未轮转。
- 临时处理:用
tail -200只看尾部,或grep配合时间范围。 - 根本解决:检查
logrotate配置(/etc/logrotate.conf和/etc/logrotate.d/),确认轮转周期并强制轮转:sudo logrotate -f /etc/logrotate.conf
问题2:journalctl 报错 “Cannot set file group: Operation not permitted”
- 解决方案:当前用户没有权限。使用
sudo journalctl即可。
问题3:SSH登录失败,想查原因
- 查看
/var/log/secure(或auth.log)中的Failed password记录:
sudo grep "Failed password" /var/log/secure
- 或使用journalctl专门过滤sshd:
sudo journalctl -u sshd --since today | grep "Failed password"
避坑指南
- 时间同步很重要——日志时间是排查的基准。务必运行
timedatectl set-ntp true,并用chronyc sources -v检查同步状态。 - 不要直接删除日志文件——直接
rm会导致写日志的进程失去文件句柄,可能崩溃。正确做法是::> /var/log/messages(清空内容)或使用logrotate。 - 区分“系统日志”与“应用日志”——比如Nginx的错误日志在
/var/log/nginx/error.log,MySQL在/var/log/mysql/error.log。系统日志只记录OS层面的问题,应用问题需要看各自日志。 - 日志太多时优先用
grep -i error或journalctl -p err,只显示警告级别以上的消息,节省时间。
效果验证:确认刚才的操作有效
执行以下命令,验证你已掌握基础分析能力:
# 查看最近5次系统重启记录
last reboot | head -5
# 查看当前内核启动日志中是否有硬件错误
dmesg --level=err | tail -10
# 查看sshd服务昨天是否被爆破
sudo journalctl -u sshd --since yesterday --until today | grep "Failed password" | wc -l
如果输出数字不为0,说明你成功定位到了不安全登录尝试。
下一步可以配置Fail2ban或修改SSH端口来加固。
如果你正在处理Linux服务器系统日志分析,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。