监控软件: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创建项目过程中指定,在触发器定义中,可以根据返回值定义触发条件
有不足之处,还望大家补充说明。