是一个比较简单的脚本用来nginx的access日志简单处理,主要实现以下三个功能:
- 统计几分钟之内,请求最多的前几个ip(默认是3分钟,前10个ip)
- 统计几分钟之内,请求最多的接口(默认是3分钟,前10个接口)
- 统计前几ip,分别请求的前几个接口
具体脚本下:
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
|
#输出日志访问量排名前top_num条数据,可自定义
top_num=10
time=$(date)
analyze_dir=/home/ap/nginx
access_log=/usr/local/openresty/nginx/logs/access.log
top_ip_file=$analyze_dir/ngx_log_top_ip.txt
top_dest_url_file=$analyze_dir/ngx_log_top_dest_url.txt
log_file=$analyze_dir/minago_ngx_log.txt
mkdir -p $analyze_dir
#截取最近3分钟的日志文件,时间可修改
tac $access_log| awk 'BEGIN{ "date -d \"-3 minute\" +\"%H:%M:%S\"" | getline min3ago } { if (substr($4, 14) > min3ago) print $0;else exit }' | tac >$log_file
#获取最活跃IP
cat $log_file | awk '{print $1}' | sort | uniq -c | sort -rn | head -${top_num} > $top_ip_file
#获取请求最多的url
cat $log_file | awk '{print $7}' | sort | uniq -c | sort -rn | head -${top_num} > $top_dest_url_file
simple(){
echo "+-+-+-+-+-+- 下面是${time}的日志分析内容 +-+-+-+-+-+-"
#获取最活跃IP
printf "最活跃的前${top_num}个访问IP: \n"
cat $top_ip_file
echo ""
#获取请求最多的url
printf "请求最多的前${top_num}个url: \n"
cat $top_dest_url_file
echo ""
echo '-----------------------------------------------'
cat /home/ap/nginx/ngx_log_top_ip.txt | while read line
do
ip=$(echo $line | cut -d ' ' -f2)
count=$(echo $line | cut -d ' ' -f1)
printf "${ip}请求最多的10个接口如下:\n"
grep $ip $log_file |awk '{print $7}'|grep -v 'images\|js\|css\|png\|fonts\|html\|jpg'|sort |uniq -c |sort -rn |head -n 10
echo '-----------------------------------------------'
done
}
simple
exit 0
|