在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", 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 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错误码的自动化统计与可视化,为运维决策提供数据支撑。