Linux下awk解析日志生成可视化报告

59 阅读2分钟

微信图片_20230808094553.png在Linux环境下,HTTP服务日志是分析用户行为与系统健康的关键数据源。通过awk工具快速提取并统计HTTP错误码(如404、500),结合Shell脚本生成可视化报告,可直观定位问题页面或服务异常。

awk日志解析原理****

awk是Linux文本处理的瑞士军刀,支持按列提取、条件过滤与聚合计算。HTTP服务日志(如Nginx/Apache的access.log)通常遵循标准格式:

 192.168.1.1 - - [10/Oct/2023:13:55:36 +0800] "GET /notfound.html HTTP/1.1" 404 207 "-" "Mozilla/5.0"

通过awk可精准提取第9列的HTTP状态码:

bash

 awk '{print $9}' /var/log/nginx/access.log

错误码统计脚本实现****

以下脚本可统计各错误码的出现次数,并按降序排列:

bash

 #!/bin/bash
  
 LOG_FILE="/var/log/nginx/access.log"
 OUTPUT_FILE="/tmp/http_error_report.txt"
  
 # 提取并统计错误码(4xx/5xx)
 awk '9 ~ /^[45]/ {count[9]++}
 END {for (code in count) printf "%-5s %d\n", code, count[code]}' $LOG_FILE\
 sort -k2,2nr > $OUTPUT_FILE
  
 # 生成Markdown格式报告(可转换为HTML)
 echo "# HTTP错误码统计报告" > report.md
 echo "生成时间: $(date)" >> report.md
 echo "" >> report.md
 echo "错误码数量" >> report.md
 echo "--------------" >> report.md
 awk '{printf "%-5s%d\n", 1,1, 2}' $OUTPUT_FILE >> report.md
  
 echo "报告已生成至: $(pwd)/report.md"

脚本说明:****

1. 条件过滤:$9 ~ /^[45]/仅匹配4xx/5xx错误码。

2. 聚合统计:count[$9]++按错误码分组计数。

3. 排序输出:sort -k2,2nr按数量降序排列。

4. 格式化报告:生成Markdown表格,可通过Pandoc等工具转为HTML。

可视化增强方案****

1. 终端图表:使用gnuplot或vt100库生成ASCII柱状图:

2. 

bash

3. 

4. 

|   | awk '{print 2,2, 1}' $OUTPUT_FILE | gnuplot -p -e "set boxwidth 0.5; plot '-' using 2:xtic(1) with boxes" | | - | ------------------------------------------------------------------------------------------------------------- |

5. 

6. Web报告:结合flot.js或ECharts,将Markdown数据转为交互式图表。

7. 实时监控:通过cron定时任务每小时生成报告,并邮件推送。

典型应用场景****

· 故障排查:发现大量502错误时,检查后端服务(如PHP-FPM)是否宕机。

· SEO优化:批量处理404页面,避免搜索引擎降权。

· 容量规划:监控503错误增长趋势,提前扩容服务。

通过awk与Shell脚本的组合,可高效实现HTTP错误码的自动化统计与可视化,为运维决策提供数据支撑。