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"}]
Nginx日志分析

更多基础巡检