在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用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$$/
|
文章转载来自:ttlsa.com