日志分析是系统管理和故障排查的重要工作。以下是使用Linux命令行工具进行高效日志分析的方法和技巧。
# 查看完整日志
cat /var/log/syslog
# 分页查看日志
less /var/log/syslog
# 查看日志尾部内容
tail -n 100 /var/log/syslog
# 实时监控日志更新
tail -f /var/log/syslog
# 查看特定时间段的日志
sed -n '/2023-10-01 10:00/,/2023-10-01 11:00/p' /var/log/syslog
# 查看最近1小时的日志
journalctl --since "1 hour ago"
# 查找包含"error"的行
grep -i "error" /var/log/syslog
# 查找多个关键词
grep -E "error|fail|warning" /var/log/syslog
# 显示匹配行及其后5行
grep -A 5 "critical" /var/log/syslog
# 排除包含特定内容的行
grep -v "debug" /var/log/syslog
# 提取日志中的IP地址
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 统计HTTP状态码
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 计算平均响应时间
awk '{sum+=$10} END {print "Avg response:",sum/NR,"ms"}' /var/log/nginx/access.log
# 删除所有注释行
sed '/^#/d' /etc/nginx/nginx.conf
# 替换文本内容
sed 's/old/new/g' file.log
# 提取两个标记之间的内容
sed -n '/START/,/END/p' file.log
# 统计错误出现频率
grep "error" /var/log/syslog | cut -d ' ' -f 4- | sort | uniq -c | sort -nr
# 统计访问量最高的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
# 统计日志总行数
wc -l /var/log/syslog
# 统计错误数量
grep -i "error" /var/log/syslog | wc -l
# 查找特定时间段内的错误
sed -n '/Oct 10 10:00/,/Oct 10 11:00/p' /var/log/syslog | grep -i "error"
# 分析高延迟请求
awk '($10 > 1000){print $1, $7, $10}' /var/log/nginx/access.log | sort -k3 -nr | head
# 实时监控并统计HTTP状态码
tail -f /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c
# 实时监控错误并报警
tail -f /var/log/syslog | grep --line-buffered -i "error" | while read line; do echo "$line" | mail -s "Error Alert" admin@example.com; done
# 查看压缩日志
zcat /var/log/syslog.1.gz | grep "error"
# 分析多个归档日志
zgrep -h "error" /var/log/syslog* | sort | uniq -c | sort -nr
# 手动执行日志轮转
logrotate -vf /etc/logrotate.conf
# 测试logrotate配置
logrotate -d /etc/logrotate.d/nginx
# 生成访问量趋势图
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1,2 | uniq -c > traffic.dat
gnuplot -p -e 'plot "traffic.dat" using 2:1 with lines title "Requests per hour"'
# 将日志转换为CSV并分析
awk '{print $1","$7","$9","$10}' /var/log/nginx/access.log > access.csv
csvstat access.csv
csvcut -c status access.csv | csvsort | uniq -c
通过组合这些命令,您可以构建强大的日志分析流水线,快速定位系统问题并获取有价值的统计信息。