1.6.5 常见日志分析与排错流程
常见日志分析与排错流程#
1. 典型日志类别与定位入口#
- 系统日志:
/var/log/messages、/var/log/syslog、/var/log/kern.log - 认证与安全:
/var/log/auth.log、/var/log/secure、/var/log/audit/audit.log - 启动与服务:
journalctl、/var/log/boot.log、systemd unit 日志 - 计划任务:
/var/log/cron、/var/log/cron.log - 应用日志:应用自定义目录(
/var/log/nginx/、/var/log/mysql/等)
日志排错链路示意图
2. 快速定位问题的通用流程#
- 明确现象与范围:时间、影响范围、错误表现(无法登录/服务不可用/性能异常)。
- 确定日志源:系统日志、服务日志、审计日志、内核日志。
- 时间对齐:校时与时区统一,按时间窗口筛选日志。
- 关键词过滤:error、failed、denied、timeout、oom、panic、segfault。
- 上下文关联:结合 PID、用户、IP、服务名定位调用链。
- 复现与验证:触发操作并对比日志差异,验证修复效果。
时间对齐与窗口查询示例
# 校验时间与时区
timedatectl status
# 查看最近10分钟sshd日志
journalctl -u sshd --since "10 min ago" --no-pager
# 查看指定时间窗口内系统日志
journalctl --since "2024-08-10 13:50:00" --until "2024-08-10 14:10:00" --no-pager
3. 常用分析命令与技巧(含命令解释)#
- journalctl:systemd日志查询
# 解释:-u 指定服务,-p 过滤级别
journalctl -u sshd -p warning --since "1 hour ago" --no-pager
- grep/egrep:关键词过滤
# 解释:-i 忽略大小写,-E 支持扩展正则
grep -iE "error|fail|denied|timeout" /var/log/messages
- tail/less:实时追踪
# 解释:-f 持续跟随,+F less 跟随并支持搜索
tail -f /var/log/syslog
less +F /var/log/auth.log
- awk:按时间段过滤
# 解释:筛选包含指定时间段的行
awk '$0 ~ "Aug 10 14:"' /var/log/messages
- dmesg:内核日志查看
# 解释:-T 转换为可读时间,-l 指定级别
dmesg -T -l err,crit,alert,emerg
4. 常见问题与排错示例(含可执行命令与预期)#
4.1 无法登录#
# 查看认证日志
grep -iE "failed|pam|sshd|invalid" /var/log/auth.log
# 预期:出现 Failed password 或 PAM 错误
# Failed password for root from 1.2.3.4 port 51234 ssh2
排错动作:
# 确认sshd配置语法
sshd -t
# 查看服务状态
systemctl status sshd --no-pager
4.2 服务启动失败#
# 查看服务状态与最近日志
systemctl status nginx --no-pager
journalctl -u nginx -n 50 --no-pager
排错动作:
# 配置检查(以nginx为例)
nginx -t
# 预期:nginx: configuration file /etc/nginx/nginx.conf test is successful
4.3 磁盘空间异常#
# 确认磁盘占用
df -h
# 查找日志中磁盘错误
grep -iE "No space left|I/O error" /var/log/messages
排错动作:
# 查找大文件
du -ah /var/log | sort -rh | head -n 10
4.4 内存溢出/进程被杀#
# OOM日志
journalctl -k | grep -i oom
# 预期:Out of memory: Killed process 1234 (java)
排错动作:
# 查看进程内存占用
ps aux --sort=-%mem | head -n 5
4.5 网络异常#
# 系统日志中网络事件
grep -iE "link down|timeout|reset|unreachable" /var/log/messages
排错动作:
# 查看接口状态
ip link show
# 查看路由
ip route
5. 日志关联分析方法(含操作示例)#
- 时间线法:锁定异常前后 5-10 分钟
# 以系统日志为主线
journalctl --since "2024-08-10 14:00:00" --until "2024-08-10 14:10:00" --no-pager
- 交叉验证:系统日志 + 应用日志 + 监控告警
# 同时对比应用错误与系统异常
grep -iE "error|timeout" /var/log/nginx/error.log
grep -iE "oom|i/o error" /var/log/messages
- 定位源进程:通过 PID/用户建立链路
# 以PID 1234为例,查找相关日志
grep "1234" /var/log/messages
journalctl _PID=1234 --no-pager
- 对比正常节点:同版本、同配置对比
# 简单对比配置与日志关键项
diff -u /etc/nginx/nginx.conf /mnt/healthy/nginx.conf
6. 规范化排错输出记录(模板)#
问题现象:
- 时间:
- 影响范围:
- 错误表现:
关键日志片段:
- 文件路径:
- 时间段:
- 片段内容:
初步结论:
复现步骤:
修复方案:
验证结果:
预防措施:
7. 练习(含步骤与预期)#
-
练习:定位SSH登录失败原因
- 操作:尝试输入错误密码登录 2 次。
- 命令:
bash grep -i "Failed password" /var/log/auth.log | tail -n 5
- 预期:出现Failed password记录,包含来源 IP 与用户。 -
练习:模拟服务配置错误并定位
- 操作:在nginx.conf中故意写错一行,重启服务。
- 命令:
bash nginx -t systemctl restart nginx journalctl -u nginx -n 20 --no-pager
- 预期:日志显示config test failed或invalid parameter。 -
练习:模拟磁盘紧张并识别
- 操作:创建大文件占满/var/log所在分区。
- 命令:
bash dd if=/dev/zero of=/var/log/bigfile bs=1M count=1024 df -h grep -i "No space left" /var/log/messages
- 预期:df -h显示空间耗尽,日志出现No space left on device。