监控软件:zabbix
需求分析:从系统层面的监控看,现在CPU持续超过80%会报警,流量曲线达到阀值才会报警,但是流量在短时间内起伏很大,肯定是有问题的,目前主要还是依靠人看,肯定有滞后性,如果能定一个规则出来,根据短时间流量变化的百分比,判断并发出报警提醒,就能够提前发现业务异常或者攻击
一、获取流量脚本
#!/bin/bash # while true;do LN=`ifstat -T 1 1 | sed -n '3p' | awk '{print $(NF-1)}'` OUT=`ifstat -T 1 1 | sed -n '3p' | awk '{print $NF}'` # echo $LN,$OUT echo "$LN+$OUT" | bc > /usr/local/zabbix/net.if/totalnet.txt done
此脚本用ifstat获取当前流量,保存至totalnet.txt中,以便以后引用
(分析众多获取流量工具,最后选择ifstat,因为其不区分网卡,具有通用性,再则数据比较容易处理)
补充:此脚本需后台执行,同时需要安装ifstat工具
二、流量处理脚本
#!/bin/bash # n=`cat /usr/local/zabbix/net.if/totalnet.txt` # echo $n old1=`cat /usr/local/zabbix/net.if/1.txt` old2=`cat /usr/local/zabbix/net.if/2.txt` old3=`cat /usr/local/zabbix/net.if/3.txt` old4=`cat /usr/local/zabbix/net.if/4.txt` # echo $n,$old1,$old2,$old3,$old4 P1=`echo "scale=2;$n/$old1*100" | bc |awk -F. '{print $1}'` P2=`echo "scale=2;$n/$old2*100" | bc |awk -F. '{print $1}'` P3=`echo "scale=2;$n/$old3*100" | bc |awk -F. '{print $1}'` # echo $P1,$P2,$P3 echo $n > /usr/local/zabbix/net.if/1.txt echo $old1 > /usr/local/zabbix/net.if/2.txt echo $old2 > /usr/local/zabbix/net.if/3.txt echo $old3 > /usr/local/zabbix/net.if/4.txt if [[ $P1 -gt $1 && $P2 -gt $1 && $P3 -gt $1 ]];then echo 1 elif [[ $P1 -lt $2 && $P2 -lt $2 && $P3 -lt $2 ]];then echo 1 else echo 0 fi
此脚本从total.net中取数据,同之前三次的数据进行对比,如果比值不在预期范围内,则返回1,否则返回0,脚本中$1 $2为预期波动范围,可以根据实际需要在zabbix创建项目过程中指定,在触发器定义中,可以根据返回值定义触发条件
有不足之处,还望大家补充说明