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. 快速定位问题的通用流程#

  1. 明确现象与范围:时间、影响范围、错误表现(无法登录/服务不可用/性能异常)。
  2. 确定日志源:系统日志、服务日志、审计日志、内核日志。
  3. 时间对齐:校时与时区统一,按时间窗口筛选日志。
  4. 关键词过滤:error、failed、denied、timeout、oom、panic、segfault。
  5. 上下文关联:结合 PID、用户、IP、服务名定位调用链。
  6. 复现与验证:触发操作并对比日志差异,验证修复效果。

时间对齐与窗口查询示例

# 校验时间与时区
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. 练习(含步骤与预期)#

  1. 练习:定位SSH登录失败原因
    - 操作:尝试输入错误密码登录 2 次。
    - 命令:
    bash grep -i "Failed password" /var/log/auth.log | tail -n 5
    - 预期:出现 Failed password 记录,包含来源 IP 与用户。

  2. 练习:模拟服务配置错误并定位
    - 操作:在 nginx.conf 中故意写错一行,重启服务。
    - 命令:
    bash nginx -t systemctl restart nginx journalctl -u nginx -n 20 --no-pager
    - 预期:日志显示 config test failedinvalid parameter

  3. 练习:模拟磁盘紧张并识别
    - 操作:创建大文件占满 /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