Nginx日志分析脚本
分析Nginx访问日志,统计访问量、Top IP、Top URL、状态码分布、爬虫识别
详细内容
#!/bin/bash
# ==========================================
# Nginx日志分析脚本
# 用途:快速分析Nginx访问日志,输出统计报告
# 使用方法:bash nginx_log_analyzer.sh /path/to/access.log
# ==========================================
LOG_FILE="$1"
if [ -z "$LOG_FILE" ] || [ ! -f "$LOG_FILE" ]; then
echo "用法: $0 /path/to/access.log"
exit 1
fi
echo "========== Nginx日志分析报告 =========="
echo "日志文件: $LOG_FILE"
echo "分析时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# 总请求数
TOTAL=$(wc -l < "$LOG_FILE")
echo "【总请求数】 $TOTAL"
echo ""
# 状态码分布
echo "【状态码分布】"
awk '{print $9}' "$LOG_FILE" | sort | uniq -c | sort -rn | awk '{printf " %s: %s (%.1f%%)\n", $2, $1, $1/'"$TOTAL"'*100}'
echo ""
# Top10 访问IP
echo "【Top10 访问IP】"
awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -rn | head -10 | awk '{printf " %2d. %-20s %s次\n", NR, $2, $1}'
echo ""
# Top10 访问URL
echo "【Top10 访问URL】"
awk '{print $7}' "$LOG_FILE" | sort | uniq -c | sort -rn | head -10 | awk '{printf " %2d. %s次 %s\n", NR, $1, $2}'
echo ""
# Top10 User-Agent(识别爬虫)
echo "【Top10 User-Agent】"
awk -F'"' '{print $6}' "$LOG_FILE" | sort | uniq -c | sort -rn | head -10 | awk '{printf " %2d. %s次 %s\n", NR, $1, substr($0, index($0,$2))}'
echo ""
# 爬虫统计
echo "【爬虫访问统计】"
BOT_COUNT=$(grep -ciE "bot|spider|crawler|slurp|bingpreview" "$LOG_FILE")
echo " 爬虫请求数: $BOT_COUNT (占比: $(awk "BEGIN{printf "%.1f%%", $BOT_COUNT/$TOTAL*100}"))"
echo ""
# 4xx/5xx错误请求详情
echo "【最近20条错误请求(4xx/5xx)】"
awk '$9 ~ /^[45]/ {print $1, $9, $7, $4}' "$LOG_FILE" | tail -20 | sed 's/^/ /'
echo ""
# 请求时间范围
echo "【时间范围】"
FIRST=$(head -1 "$LOG_FILE" | awk '{print $4}' | tr -d '[]')
LAST=$(tail -1 "$LOG_FILE" | awk '{print $4}' | tr -d '[]')
echo " 从: $FIRST"
echo " 到: $LAST"
echo ""
echo "========== 分析完成 =========="
适配环境
适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+
依赖环境:bash 4.0+
参数说明
[{"name": "LOG_FILE", "label": "\u65e5\u5fd7\u6587\u4ef6\u8def\u5f84", "default": "/var/log/nginx/access.log"}]