Shell分析Nginx日志 找出被阻止的IP

ttBoy ShellShell分析Nginx日志 找出被阻止的IP已关闭评论13,7406字数 1576阅读5分15秒阅读模式

在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用nginx limit模块 对访问的Ip进行限制,然后可以分析日志。

配置nginx限制IP访问,可配置多个zone。

    limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;

对产生的nginx日志进行分析 脚本。

#!/bin/bash
# Author:ttBoy
# website:www.ttlsa.com

##提供默认日志路径和名称
logsFile="日志名称"
##配置多个zoneName
zoneName="allips name2 name3"
##生产临时文件存放目录
mkdir ./cache$$

##日志分析函数
fenxi(){
for zone in $zoneName;
do
    printf "\n当前报告是{ $zone }限制产生的:\n"
    grep "$zone" $logFile > ./cache$$/$zone.log
    
    printf "%-7s|%-12s|%-19s|%-20s|%-36s|%s\n" "序号" "次数" "IP地址" "IP归属" "时间范围"
    
    ucount=0;
    ##过滤出访问的IP地址并排序去重,保证结果是由访问次数高到低排序
    ip_list=$(egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" cache$$/$zone.log |sort |uniq -c |sort -n -r |awk '{print $2}')
    
    for ip in $ip_list;
    do
        grep $ip cache$$/$zone.log > ./cache$$/temp.$$.log
        tstart=`cut -c-19 ./cache$$/temp.$$.log | head -1`
        tend=`cut -c-19 ./cache$$/temp.$$.log|tail -1`
        let ucount++
        Attempts=`cat ./cache$$/temp.$$.log |wc -l`
        time_range="$tstart"--"$tend"
        ##通过138找到ip地址归属
        ip138=`curl -s "http://ip138.com/ips138.asp?ip=$ip&action=2"| iconv -f gb2312 -t utf-8 |grep '' | awk -F '[<> ]+' '{print substr($7,6)}'`
        ipwhere=`echo $ip138 |awk '{print $7}'`
        printf "%-5s|%-10s|%-17s|%-20s|%-33s|%s\n" "$ucount" "$Attempts" "$ip" "$ipwhere" "$time_range"
    done
done
}

##可以手动输入日志文件或者执行默认分析
if [ "$1" = "" ];then
    for logFile in $logsFile;
    do
        if [ -f "$logFile" ]
        then
        printf "\n#############################################################\n"
        printf "\n当前分析的日志文件: $logFile ,以下是生成的报告:\n"
        else
        echo "日志文件出错,请检查文件"
        fi
        echo "当前日志分析时间: `date`"
        fenxi
    done
else
    logFile=$1
    printf "\n################################################################\n"
    printf "\n当前分析的日志文件: $logFile ,以下是生成的报告:\n"
    echo "当前日志分析时间: `date`"
    fenxi
fi
rm -rf cache$$/

感谢ttBoy的分享!文章源自运维生存时间-https://www.ttlsa.com/shell/shell-analysis-nginx-ip-find-out-blocked-ip/

文章源自运维生存时间-https://www.ttlsa.com/shell/shell-analysis-nginx-ip-find-out-blocked-ip/文章源自运维生存时间-https://www.ttlsa.com/shell/shell-analysis-nginx-ip-find-out-blocked-ip/
weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
ttBoy
  • 本文由 投稿,于09/10/2016 11:10:19发表
  • 转载请务必保留本文链接:https://www.ttlsa.com/shell/shell-analysis-nginx-ip-find-out-blocked-ip/