最近几天有一个问题一直困扰着我,就是我维护的一个网站最近几天总是在整点附近出问题,那时候数据库服务器cpu使用率超高,持续时间1-5分钟。
然后,我就开始各种查、各种记,出问题的时间点,数据库查询量很大,我把这些查询记录了下来,并做分析,然而并没有什么特别有规律的现象,因为这些查询非常分散,跟正常的查询一般无二,唯一区别就是量大。
同时,也去分析了web端的访问日志,截取出问题那几分钟的日志进行分析,过去两天一直都没有找到规律,跟数据库一样,非常分散,跟正常的访问一样,只是量大了一些。
我甚至怀疑是不是这台数据库服务器的硬件出现了问题,毕竟我们用的是腾讯云的机器,云主机存在资源共享的问题。所以,我还提交了工单,让售后去帮忙查,但无果。
今天,我再次分析日志时,发现了一些规律,那就是有三个ip访问量非常大。
这是一分钟内的统计数据,左边为ip的请求次数,一分钟一个正常的ip的请求数怎么可能超过1000次呢?甚至连100次都不应该超过才对。所以,直接把ip封掉。
也许这几天的问题跟ip访问量大没有直接关系,但既然今天发现了此问题,那就先解决再说。
考虑到后面还会有类似的ip访问,那我干脆直接写一个自动封ip的脚本,ip封了肯定需要自动解封,所以,我的脚本主要逻辑是:
1)每分钟查一下过去1分钟的日志,对ip进行分析,将访问量大于400的给封掉;
2)每隔半小时针对过去半小时以来的被封的ip进行分析,如果不再有数据包过来,则解封。 下面是脚本内容:
#! /bin/bash#定义1分钟以前的时间,用于过滤1分钟以前的日志t1=`date -d -1 min +%y:%h:%m`log=/var/log/nginx/access.logblock_ip(){ egrep $t1:[0-5]+ $log > /tmp/tmp_last_min.log #把1分钟内访问量高于400的ip记录到一个临时文件中 # 过滤掉白名单ip(81.123.35.171) awk '{print $1}' /tmp/tmp_last_min.log|grep -v '81.123.35.171' |sort -n |uniq -c|sort -n |awk '$1>400 {print $2}' > /tmp/bad_ip.list #计算ip的数量 n=`wc -l /tmp/bad_ip.list|awk '{print $1}'` #当ip数大于0时,才会用iptables封掉它 if [ $n -ne 0 ] then for ip in `cat /tmp/bad_ip.list` do /usr/sbin/iptables -i input -s $ip -j drop done #将这些被封的ip记录到日志里 echo `date` 封掉的ip有: >> /tmp/block_ip.log cat /tmp/bad_ip.list >> /tmp/block_ip.log fi}unblock_ip(){ #首先将包个数小于5的ip记录到一个临时文件里,把它们标记为白名单ip /usr/sbin/iptables -nvl input|sed '1d' |awk '$1 /tmp/good_ip.list n=`wc -l /tmp/good_ip.list|awk '{print $1}'` if [ $n -ne 0 ] then for ip in `cat /tmp/good_ip.list` do /usr/sbin/iptables -d input -s $ip -j drop done echo `date` 解封的ip有: >> /tmp/unblock_ip.log cat /tmp/good_ip.list >> /tmp/unblock_ip.log fi #当解封完白名单ip后,将计数器清零,进入下一个计数周期 /usr/sbin/iptables -z}#取当前时间的分钟数t=`date +%m`#当分钟数为00或者30时(即每隔30分钟),执行解封ip的函数,其他时间只执行封ip的函数if [ $t == 00 ] || [ $t == 30 ]then unblock_ip block_ipelse block_ipfi
然后写一个每分钟都执行的任务计划就可以啦。
为什么手机不能像电脑一样可以自己组装自己装系统
加利福尼亚谷地,每一块农田都装有传感器
工业路由器助力无人驾驶方案解析
外媒关注海信空调:获全球首个JQA新风认证
基于UM66TXX构建一个简单的音乐贺卡电路
分享一个自动封IP的脚本
工程师谈汽车电子标准路线及应用挑战
浅谈四种无线传感网络解决方案
王思聪微博嘲讽柯洁 网友怒了“狗不是以前的狗了”你还是一层不变
PLC外围设备接口介绍
mkp61是什么电容?
华为推出“鲲鹏920”芯片,7纳米,号称是业界性能最高的基于Arm架构的芯片
卫星干扰起因及改善的解决办法解析
从MySQL到ClickHouse实时复制与实现
新能源汽车连接器现有技术有哪些
LG将首发支持3D应用的Google TV
“数字孪生”十问十答
RFID工具管理系统的主要功能及应用场合
配线箱如何接线、导线如何选
一个DSP怪物的演化:具有大量DSP的UltraScale+ 和UItraScale全可编程器件