插件窝 干货文章 如何使用Linux命令行工具分析应用程序日志?

如何使用Linux命令行工具分析应用程序日志?

分析 日志 count ERROR 82    来源:    2025-04-14

分析应用程序日志是运维和开发中的常见任务。Linux提供了丰富的命令行工具来高效完成这项工作。以下是系统化的日志分析方法:

  1. 基础查看工具

- tail -f /path/to/log 实时追踪日志尾部变化(生产环境常用) - less +F /path/to/log 交互式实时查看(支持回翻) - grep "ERROR" /var/log/app.log 快速过滤关键错误

  1. 高级分析组合
# 时间范围分析
sed -n '/2023-10-01 14:00/,/2023-10-01 15:00/p' app.log | grep -C 3 "Exception"

# 多条件统计
cat app.log | awk '/WARNING/{warn++} /ERROR/{err++} END{print "Warnings:",warn,"Errors:",err}'

# 高频错误TOP10
grep -oE '[A-Z]+_[A-Z]+' error.log | sort | uniq -c | sort -nr | head
  1. 结构化日志分析(JSON示例)
# 使用jq解析JSON日志
jq '. | select(.level == "ERROR") | {time: .timestamp, msg: .message}' app.json

# 统计不同服务的错误数
jq -r '.service + " " + .level' logs/*.json | awk '$2=="ERROR"{count[$1]++} END{for(s in count) print s,count[s]}'
  1. 性能分析技巧
# 响应时间百分位统计
awk '/response_time/{gsub("ms",""); sum+=$NF; count++; vals[count]=$NF} 
     END{asort(vals); print "95th:", vals[int(count*0.95)], "Avg:", sum/count}' access.log

# 慢请求分析
awk '$NF > 1000 {print $0}' nginx.log | cut -d' ' -f1,7 | sort | uniq -c
  1. 可视化分析
# 生成错误频率时序图(需安装gnuplot)
grep "ERROR" app.log | awk '{print $1}' | uniq -c | 
  gnuplot -p -e 'set xdata time; set timefmt "%Y-%m-%d"; plot "-" using 2:1 with lines title "Errors"'
  1. 日志轮转监控
# 对比轮转前后的错误变化
diff <(zcat app.log.1.gz | grep "ERROR") <(grep "ERROR" app.log)

专业建议: 1. 对于大型日志文件,先用head/tail采样确认格式 2. 复杂分析建议分阶段处理,中间结果存临时文件 3. 高频分析任务应该建立日志收集系统(ELK/Splunk) 4. 关键应用日志应该配置实时告警规则

这些命令可以组合使用,例如实时监控错误并统计:

tail -f app.log | grep --line-buffered "ERROR" | 
  awk '{count++; print "Total errors:", count; system("")}'

掌握这些工具组合可以应对90%以上的日志分析场景,建议根据具体日志格式调整字段提取方式。