我们的生活是多么美好呀!!!!
全部博文(225)
分类: LINUX
2008-09-25 16:21:22
监控项目---流量控制模块
流量控制模块相对于其它模块功能稍多,具体参数有:
alarm_traffic_in_up 10 入流量上限报警阀值
alarm_traffic_out_below 30 出流量下限报警阀值
alarm_traffic_out_up 80 出流量上限报警阀值
alarm_traffic_out_time_below 10 22 入流量上线报警时间区间
alarm_traffic_times 3 流量报警次数
流量取值即以IP为目录下的in out文件,由中心服务器取各服务器串值得出..脚本名为:
Module_Traffic_Alarm.sh 内容如下:
注:参数配置优先为各IP目录下alarm_conf目录下的个性参数配置,以参数名为文件名,内存参数值..默认配置为default.conf存所有参数默认值...每行二列分别为参数名,参数值...
当连续到达报警次数后,脚本会启动报邮件/短信报警程序,即alarm.sh.由报警程序根据送来的报警串来选择报警优先级,及相关处理人..报警程序后文将介绍...
#!/bin/sh
if [ $# -ne 1 ];then
/bin/echo "Usage: $0 IP"
exit 1
fi
MONITOR_DIR=/performance_center/performance_monitor
DEFAULT_CONF_DIR=$MONITOR_DIR/default_conf
DATA_DIR=/cacti/idctraffic/hosttraffic
CONF_DIR=$DEFAULT_CONF_DIR
DATE=`date +%Y%m%d--%T`
#check data validity
IP=$1
if [[ -f $DATA_DIR/$IP/out && -f $DATA_DIR/$IP/in ]];then
CURRENTLY_TRAFFIC=`/bin/cat $DATA_DIR/$IP/out`
CURRENTLY_TRAFFIC_IN=`/bin/cat $DATA_DIR/$IP/in`
else
/bin/echo $DATE "$IP traffic in or out is no data_file" >> $MONITOR_DIR/logs/Traffic_error.log
$MONITOR_DIR/scripts/Alarm.sh "$IP traffic in or out is no data_file" 2>>$MONITOR_DIR/logs/Traffic_error.log 1>/dev/null
exit 1
fi
if [[ $CURRENTLY_TRAFFIC -lt 0 || $CURRENTLY_TRAFFIC -gt 100 ]];then
/bin/echo $DATE "$IP traffic_out is illegal $CURRENTLY_TRAFFIC M" >> $MONITOR_DIR/logs/Traffic_error.log
#$MONITOR_DIR/scripts/Alarm.sh "$IP traffic is illegal $CURRENTLY_TRAFFIC M" 2>$MONITOR_DIR/logs/Traffic_error.log 1>/dev/null
exit 1
fi
MD5_FILENAME_UP=`/bin/echo "$IP traffic_out is over" -n | /usr/bin/md5sum | /bin/awk '{print $1}'`
MD5_FILENAME_BELOW=`/bin/echo "$IP traffic_out is low" -n | /usr/bin/md5sum | /bin/awk '{print $1}'`
MD5_FILENAME_IN=`/bin/echo "$IP traffic_in is over" -n | /usr/bin/md5sum | /bin/awk '{print $1}'`
#set conf
if [ -d $DATA_DIR/$IP/alarm_conf ];then
CONF_DIR=$DATA_DIR/$IP/alarm_conf
if [ -f $CONF_DIR/alarm_traffic_times ];then
TRAFFIC_ALARM_TIMES=`/bin/cat $CONF_DIR/alarm_traffic_times`
else
TRAFFIC_ALARM_TIMES=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_times" | /bin/awk '{print $2}'`
fi
if [ -f $CONF_DIR/alarm_traffic_out_up ];then
TRAFFIC_ALARM_VALUE_UP=`/bin/cat $CONF_DIR/alarm_traffic_out_up`
else
TRAFFIC_ALARM_VALUE_UP=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_up" | /bin/awk '{print $2}'`
fi
if [ -f $CONF_DIR/alarm_traffic_out_below ];then
TRAFFIC_ALARM_VALUE_BELOW=`/bin/cat $CONF_DIR/alarm_traffic_out_below`
else
TRAFFIC_ALARM_VALUE_BELOW=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_below" | /bin/awk '{print $2}'`
fi
if [ -f $CONF_DIR/alarm_traffic_in_up ];then
TRAFFIC_ALARM_VALUE_IN=`/bin/cat $CONF_DIR/alarm_traffic_in_up`
else
TRAFFIC_ALARM_VALUE_IN=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_in_up" | /bin/awk '{print $2}'`
fi
if [ -f $CONF_DIR/alarm_traffic_out_time_below ];then
BELOW_TIME_UP=`/bin/cat $CONF_DIR/alarm_traffic_out_time_below | /bin/awk '{print $1}'`
BELOW_TIME_DOWN=`/bin/cat $CONF_DIR/alarm_traffic_out_time_below | /bin/awk '{print $2}'`
else
BELOW_TIME_UP=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_time_below" | /bin/awk '{print $2}'`
BELOW_TIME_DOWN=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_time_below" | /bin/awk '{print $3}'`
fi
else
TRAFFIC_ALARM_TIMES=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_times" | /bin/awk '{print $2}'`
TRAFFIC_ALARM_VALUE_UP=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_up" | /bin/awk '{print $2}'`
TRAFFIC_ALARM_VALUE_BELOW=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_below" | /bin/awk '{print $2}'`
TRAFFIC_ALARM_VALUE_IN=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_in_up" | /bin/awk '{print $2}'`
BELOW_TIME_UP=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_time_below" | /bin/awk '{print $2}'`
BELOW_TIME_DOWN=`/bin/cat $DEFAULT_CONF_DIR/default.conf | /bin/grep "alarm_traffic_out_time_below" | /bin/awk '{print $3}'`
fi
#alarm check
if [ $CURRENTLY_TRAFFIC -gt $TRAFFIC_ALARM_VALUE_UP ];then
if [ ! -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP ];then
/bin/echo 1 > $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
/bin/echo "$IP traffic_out is over $TRAFFIC_ALARM_VALUE_UP:$CURRENTLY_TRAFFIC M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
else
CUR_ALARM_TIMES_UP=`/bin/cat $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP | /bin/sed -n '{1p}'`
CUR_ALARM_TIMES_UP=`/usr/bin/expr $CUR_ALARM_TIMES_UP + 1`
if [ $CUR_ALARM_TIMES_UP -ge $TRAFFIC_ALARM_TIMES ];then
$MONITOR_DIR/scripts/Alarm.sh "$IP traffic_out is over $TRAFFIC_ALARM_VALUE_UP:$CURRENTLY_TRAFFIC M" 2>$MONITOR_DIR/logs/Traffic_error.log 1>/dev/null &
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
else
/bin/echo $CUR_ALARM_TIMES_UP > $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
/bin/echo "$IP traffic_out is over $TRAFFIC_ALARM_VALUE_UP:$CURRENTLY_TRAFFIC M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
fi
fi
else
if [ -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP ];then
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_UP
fi
fi
if [ $CURRENTLY_TRAFFIC_IN -gt $TRAFFIC_ALARM_VALUE_IN ];then
if [ ! -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN ];then
/bin/echo 1 > $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
/bin/echo "$IP traffic_in is over $TRAFFIC_ALARM_VALUE_IN:$CURRENTLY_TRAFFIC_IN M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
else
CUR_ALARM_TIMES_IN=`/bin/cat $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN | /bin/sed -n '{1p}'`
CUR_ALARM_TIMES_IN=`/usr/bin/expr $CUR_ALARM_TIMES_IN + 1`
if [ $CUR_ALARM_TIMES_IN -ge $TRAFFIC_ALARM_TIMES ];then
$MONITOR_DIR/scripts/Alarm.sh "$IP traffic_in is over $TRAFFIC_ALARM_VALUE_IN:$CURRENTLY_TRAFFIC_IN M" 2>$MONITOR_DIR/logs/Traffic_error.log 1>/dev/null &
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
else
/bin/echo $CUR_ALARM_TIMES_IN > $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
/bin/echo "$IP traffic_in is over $TRAFFIC_ALARM_VALUE_IN:$CURRENTLY_TRAFFIC_IN M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
fi
fi
else
if [ -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN ];then
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_IN
fi
fi
if [[ `/bin/date +%H | sed s/^0//g` -lt $BELOW_TIME_UP || `/bin/date +%H | sed s/^0//g` -ge $BELOW_TIME_DOWN ]];then
exit 0
fi
if [ $CURRENTLY_TRAFFIC -lt $TRAFFIC_ALARM_VALUE_BELOW ];then
if [ ! -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW ];then
/bin/echo 1 > $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
/bin/echo "$IP traffic_out is low $TRAFFIC_ALARM_VALUE_BELOW:$CURRENTLY_TRAFFIC M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
else
CUR_ALARM_TIMES_BELOW=`/bin/cat $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW | /bin/sed -n '{1p}'`
CUR_ALARM_TIMES_BELOW=`/usr/bin/expr $CUR_ALARM_TIMES_BELOW + 1`
if [ $CUR_ALARM_TIMES_BELOW -ge $TRAFFIC_ALARM_TIMES ];then
$MONITOR_DIR/scripts/Alarm.sh "$IP traffic_out is low $TRAFFIC_ALARM_VALUE_BELOW:$CURRENTLY_TRAFFIC M" 2>$MONITOR_DIR/logs/Traffic_error.log 1>/dev/null &
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
else
/bin/echo $CUR_ALARM_TIMES_BELOW > $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
/bin/echo "$IP traffic_out is low $TRAFFIC_ALARM_VALUE_BELOW:$CURRENTLY_TRAFFIC M" >> $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
fi
fi
else
if [ -f $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW ];then
/bin/rm -rf $MONITOR_DIR/alarm_info/$MD5_FILENAME_BELOW
fi
fi
exit 0