脚本设计思路:
通过各种检查命令,将指令的执行结果与设置的告警上限对比后,将超限的指标放入一个日志文件中,然后读取该文件并调用短信接口通过短信将文件中内容发给相应的电话号码
一、检查数据库实例open状态,表空间使用率,以及会话数、process数的oracle监控脚本
#!/bin/sh #—————————————————————- #【功能】 数据库检查脚本 #【参数】 #【被调用】 crontab #【调用】 #【位置】 ${HOME}chk_sys/chk_tdb.sh #【修改】Modify by wangmf@20170615 #【说明】 ##监测对象: # 1:实例open状态 # 2:session数 # 3:表空间使用率 #可以根据现场实际应用进行添加 # #—————————————————— #—————————————————— source ${HOME}.bash_profile set -x cd ${HOME}chk_sys # 设置环境变量 WORK_DIR=${HOME}chk_sys CFG_FILE=${HOME}chk_sys/mobino_db.cfg LOG_FILE=${HOME}chk_sys/logs/chk_tdb.date '+%Y-%m-%d'.log ##### 清空输出文件(如有短信可清空数据) cat /dev/null >$WORK_DIR/chk_tdb.out echo “” >>$LOG_FILE echo “===(date '+%Y-%m-%d %T') Start chk_tdb” >> $LOG_FILE sqlplus -s dzgd/”Insp#798″@134.32.114.1:1521/dzgddb >$WORK_DIR/logs/dzgd_inst_stat.log <$WORK_DIR/logs/dzgd_session.log < $WORK_DIR/logs/dzgd_tablespace.log < $WORK_DIR/logs/zhwg_inst_stat.log < $WORK_DIR/logs/zhwg_session.log < $WORK_DIR/logs/zhwg_tablespace.log < >$WORK_DIR/chk_tdb.out fi; cat $WORK_DIR/logs/dzgd_inst_stat.log|while read instance status do if [ $status != ‘OPEN’ -a x$status != x ] ; then echo “‘DZGD $instance status is—-$status'” >>$WORK_DIR/chk_tdb.out fi done cat $WORK_DIR/logs/dzgd_tablespace.log|while read tablespace used do if [ $used -ge 85 -a x$used != x ] ; then echo “‘DZGD tablespace $tablespace is used—-$used%'” >>$WORK_DIR/chk_tdb.out fi done zhwg_session=cat $WORK_DIR/logs/zhwg_session.log|awk '{print $1}' if [ $zhwg_session -ge 2000 ] ; then echo “‘ZHWG session count is—-$zhwg_session'” >>$WORK_DIR/chk_tdb.out fi; cat $WORK_DIR/logs/zhwg_inst_stat.log|while read instance status do if [ $status != ‘OPEN’ -a x”$status” != x ] ; then echo “‘ZHWG $instance status is—-$status'” >>$WORK_DIR/chk_tdb.out fi done cat $WORK_DIR/logs/zhwg_tablespace.log|while read tablespace used do if [ $used -ge 90 -a x”$used” != x ] ; then echo “‘ZHWG tablespace $tablespace is used—-$used%'” >>$WORK_DIR/chk_tdb.out fi done # 检查输出结果 cat $WORK_DIR/chk_tdb.out >>$LOG_FILE num=wc -l $WORK_DIR/chk_tdb.out |awk '{print $1}' if [ $num -ge 1 ];then #调用134.32.20.132上短信发送程序 echo ” (date '+%Y-%m-%d %T') Start Send SMS” >> $LOG_FILE cat $WORK_DIR/chk_tdb.out|while read content do for line in grep -v "^#" $CFG_FILE do mobino=echo $line|cut -d, -f 1 rsh -l tmn 134.32.20.132 /u1/tmn/newtmn/bin/sdunicom/bin/send.sh $mobino $content & if [ $? -ne 0 ];then echo “!!!(date '+%Y-%m-%d %T') Send SMS Fail!” >> $LOG_FILE fi done done fi cd $WORK_DIR find ${HOME}chk_sys/logs -mtime +30 -type f -name “chk_tdb.*log” -exec rm {} \; & echo “===(date '+%Y-%m-%d %T') Complete chk_tdb” >> $LOG_FILE
二、检查各服务器磁盘、内存、CPU的脚本
#!/bin/sh set -x #—————————————————————- #【功能】 主机系统检查脚本 #【参数】 #【被调用】 crontab #【调用】 #【位置】 ${HOME}/chk_sys/chk_sys.sh #【说明】 ##监测对象: # 1:网络通断 # 2:服务器磁盘空间 # 3:服务器CPU、内存 # 4:进程数 #可以根据现场实际应用进行添加 #—————————————————— #—————————————————— cd ${HOME}/chk_sys # 设置环境变量 WORK_DIR=${HOME}/chk_sys TELL=$WORK_DIR/mobino.cfg SER_CFG=$WORK_DIR/server.cfg case $# in 0) zhuji=all ;; 1) zhuji=$1 ;; *) echo “Usage : chk_sys.sh zhuji” exit 1 ;; esac ##### 清空输出文件(如有短信可清空数据) cat /dev/null >$WORK_DIR/chk_sys.out # 从配置文件中逐行读取主机信息,并进行检查 echo ” ” echo “===(date '+%Y-%m-%d %T') Start chk_sys” for sline in grep -v "^#" $SER_CFG do sname=echo $sline |cut -d, -f1 if [ $zhuji = all -o $zhuji = $sname ];then echo “(date '+%Y-%m-%d %T') Start chk_sys [$sname]” server_IP=echo $sline |cut -d, -f2 server_OS=echo $sline |cut -d, -f3 fsmx=echo $sline |cut -d, -f4 cpumx=echo $sline |cut -d, -f5 memmx=echo $sline |cut -d, -f6 jcsmx=echo $sline |cut -d, -f7 # ping检查 ping -c 3 $server_IP >/dev/null if [ $? -eq 0 ];then ……………此处省略部分代码 #************************************************************************** #进程数量 #************************************************************************** ##### count=ssh $server_IP -l tmn ps -ef|wc |awk '{print $1}' if [ $server_OS = ‘linux’ ];then count=ssh $server_IP -l metarnop ps -ef|wc |awk '{print $1}' else count=ssh $server_IP -l tmn ps -ef|wc |awk '{print $1}' fi if [ $count -gt $jcsmx ] then echo “‘date +%T $server_IP $count Thread sum abnormal!'” >>$WORK_DIR/chk_sys.out else echo “‘date +%T $server_IP $count Thread sum normal!'” fi else # 如无法ping通,等待10秒后,再次ping sleep 10 ping -c 5 $server_IP >/dev/null if [ $? -ne 0 ];then echo “HOST$sname $server_IP PING ERROR!” >>$WORK_DIR/chk_sys.out fi fi fi done # 检查输出结果 cat $WORK_DIR/chk_sys.out num=wc -l $WORK_DIR/chk_sys.out |awk '{print $1}' if [ $num -ge 1 ];then #调用137.0.6.108上短信发送程序 echo ” (date '+%Y-%m-%d %T') Start Send SMS” cat $WORK_DIR/chk_sys.out|while read content do for line in grep -v "^#" $TELL do mobino=echo $line|cut -d, -f 1 ssh metarnop@137.0.6.108 “/usr/bin/python ${HOME}/smsmor/sendSMS.py $mobino $content ” & if [ $? -ne 0 ];then echo “!!!(date '+%Y-%m-%d %T') Send SMS Fail!” fi done done fi cd $WORK_DIR find ${HOME}/chk_sys/logs -mtime +30 -type f -name “chk_sys.*log” -exec rm {} \; & echo “===(date '+%Y-%m-%d %T') Complete chk_sys”
三、chk_sys.sh的检查服务器的配置文件server.cfg内容
#主机名,IP,操作系统类型,FS门限值,CPU门限,MEM门限,进程数>#主机名,IP,操作系统类型,FS门限值,CPU门限,MEM门限,进程数 SDCRNOPAPP1,137.0.6.6,linux,80,60,60,500 SDCRNOPAPP2,137.0.6.7,linux,80,60,60,500
四、电话号码配置文件(直接存放电话号码,每个号码占一行)
15689695625
文章评论