完全原创,自己写的一个脚本,Nginx前20个访问IP的抓取,执行脚本后,会不断的提取日志,直接你输入0后才会停止,否则会一直循环下去,时间可以自己定,脚本如下:
#!/bin/bash # date 2013-04-24 # Liuyang # nginx log file directory nginxlogdir="/opt/server/nginx/logs" nginxlog="$nginxlogdir/data.zgzcw.com.access.log" #Start collecting log start_time=$(date +"%F %X") factorial=1 echo "Start time:$start_time" tail -f $nginxlog | awk '{ print $1 }' > /root/nginx.log & while [ "$factorial" -le 10 ] do echo "please input the stop number:[0]" stty -echo read num stty echo if [ $num == 0 ]; then ps aux | grep "tail -f $nginxlog" | grep -v grep | awk '{ print $2 }' | xargs kill -9 factorial=11 fi done stop_time=$(date +"%F %X") echo " " echo "Stop time: $stop_time" echo " " echo "$start_time ~ $stop_time" echo " " #Most visted 20 IP echo "Most visted 20 IP:" printf "Frequency IP\n" cat /root/nginx.log |grep -v - | awk '{ print $1 }' | sort -n|uniq -c|sort -nr \ |head -20 | sed 's/^ *//g' | awk 'BEGIN {FS=" "}{printf("%d\t%s\n",$1,$2)}'