- A+
所属分类:Shell
在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用nginx limit模块 对访问的Ip进行限制,然后可以分析日志。
配置nginx限制IP访问,可配置多个zone。
1 |
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; |
对产生的nginx日志进行分析 脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#!/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的分享!

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~