Nginx 分析日志后 5分钟内访问次数 超过1500次,记录下ip 地址和次数 并采用邮件形式报警。

#!/bin/bash

#日志变量
logfile=/usr/home/tomcat-settle/logs/settle/sys/trade.log
tmplogfile=/tmp/log_tmp.log
tmpsortfile=/tmp/tmp_sort.log

##报警联系人
#手机139
zdb=******@139.com
xyy=******@139.com

#qq-mail
zdbqq=******@******.com
xyyqq=******@******.com

#开始时间
start_time=date -d"10 minutes ago" +"%H:%M:%S"

#结束时间
stop_time=date +"%H:%M:%S"

#取出日志
tac $logfile | awk -v st=”$start_time” -v et=”$stop_time” ‘
BEGIN{
# print “\n——————————-“;
# print “开始时间:”st;
# print “结束时间:”et;
# print “在这个时间段(1分钟内)的日志如下:”
# print “———————————\n”
}

{
#第4列的时间数据,然后按:冒号进行分割出时间
#split($4,i,”:”);

#组合时间 例: 14:37:49
#t=sprintf(“%s:%s:%s”,i[2],i[3],i[4]);

#第4列的时间数据,取出时:分:秒
t=substr($2,RSTART+1,8);

#判断在st与et之间的时间
if(t>=st && t<=et)
{print $0}
}
END{
print
}
‘>$tmplogfile

#one=awk '{print $1}' $tmplogfile | sort | uniq -c | sort -n -k 1 -r | head -1 | awk '{print $1}'
#one_ip=awk '{print $1}' $tmplogfile | sort | uniq -c | sort -n -k 1 -r | head -1 | awk '{print $2}'
#echo $one
#echo $one_ap

#################################################################################################
#echo -e “各位运维的同事:\n” >$tmpsortfile #
#echo ” 通过脚本对线上NGINX最近五分钟内($start_time–$stop_time)访问” >>$tmpsortfile #
#echo “日志的统计分析,得出其中IP $one_ip 五分钟内的访问次数最” >>$tmpsortfile #
#echo “多,达到 $one 次,大于 1500 次的脚本报警阀值触发报警,请各位运维” >>$tmpsortfile #
#echo -e “同事知晓并及时处理,其他前 10 位的访问IP及次数如下:\n” >>$tmpsortfile #
#################################################################################################
#awk ‘{print $1}’ $tmplogfile | sort | uniq -c | sort -n -k 1 -r | head -n 10 >>$tmpsortfile

#定义邮件及短信报警函数

#sendmail(){
#echo “******你好!线上NGINX告警详见公司邮箱.” | mutt $zdb -s “警告:$one_ip–$one”
#echo “******你好!线上NGINX告警详见公司邮箱.” | mutt $bjb -s “警告:$one_ip–$one”
#echo “******你好!线上NGINX告警详见公司邮箱.” | mutt $xyy -s “警告:$one_ip–$one”

#mutt -s “线上NGINX告警,最近五分钟最大值$one次” $bjbqq <$tmpsortfile
#mutt -s “线上NGINX告警,最近五分钟最大值$one次” $xyyqq <$tmpsortfile
#mutt -s “线上NGINX告警,最近五分钟最大值$one次” $wxfqq <$tmpsortfile
#mutt -s “线上NGINX告警,最近五分钟最大值$one次” $zdbqq <$tmpsortfile
#}

#if [ $one -gt 12000 ];then
#iptables -I INPUT -s $one_ip -j DROP
#fi

#判断报警阀值
#if [ $one -gt 1500 ];then
#sendmail
#fi

Leave a Reply

Your email address will not be published. Required fields are marked *