在Linux系统中,日志分析是故障排查的重要手段。以下是使用命令行工具进行日志分析的详细方法:
系统主日志:
/var/log/syslog # Debian/Ubuntu
/var/log/messages # RHEL/CentOS
特定服务日志:
/var/log/auth.log # 认证相关
/var/log/kern.log # 内核日志
/var/log/boot.log # 启动日志
/var/log/nginx/ # Nginx日志
/var/log/mysql.log # MySQL日志
tail - 实时监控日志
tail -f /var/log/syslog # 实时跟踪
tail -n 50 /var/log/nginx/access.log # 查看最后50行
grep - 关键信息过滤
grep "error" /var/log/syslog # 简单过滤
grep -i "connection refused" /var/log/syslog # 忽略大小写
grep -A 5 -B 3 "fail" /var/log/messages # 显示匹配前后内容
less/more - 分页查看
less /var/log/long-file.log # 支持搜索(/keyword)和翻页
awk - 字段提取
awk '{print $1,$4}' /var/log/nginx/access.log # 提取IP和时间
awk '/error/ {count++} END {print count}' syslog # 错误计数
sed - 流编辑器
sed -n '/Jan 10 14:00/,/Jan 10 15:00/p' /var/log/syslog # 时间范围过滤
cut - 列提取
cut -d' ' -f1 /var/log/nginx/access.log | sort | uniq -c # 统计IP访问
频率分析:
cat /var/log/auth.log | grep "Failed password" | awk '{print $9}' | sort | uniq -c | sort -nr
时间范围分析:
journalctl --since "2023-01-01" --until "2023-01-02"
多文件搜索:
zgrep "error" /var/log/syslog*
journalctl (systemd系统):
journalctl -xe # 查看完整日志
journalctl -u nginx --since today # 服务特定日志
journalctl -p err -b # 本次启动的错误
logrotate 配置检查:
cat /etc/logrotate.conf
大日志处理:
grep "error" large.log | head -100 # 限制输出
使用临时文件:
grep "critical" /var/log/*.log > /tmp/critical.log
时间戳转换:
date -d @$(awk '{print $1}' /path/to/log)
简单监控脚本:
#!/bin/bash
LOGFILE="/var/log/syslog"
KEYWORD="error"
while true; do
if grep -q "$KEYWORD" "$LOGFILE"; then
echo "$(date): Error detected" >> /var/log/monitor.log
# 添加报警动作
fi
sleep 300
done
logrotate
管理日志大小tee
记录分析结果
bash
dmesg | tee dmesg-analysis.txt | less
bash
chmod 640 /var/log/auth.log
通过组合这些工具和技术,可以高效地分析系统日志,快速定位问题根源。对于复杂场景,建议考虑ELK等专业日志分析系统。