分享两个脚本,简单监控oracle或主机使用状况,通过短信…[by wangmf]

2017年6月18日 426点热度 0人点赞 0条评论

脚本设计思路:
通过各种检查命令,将指令的执行结果与设置的告警上限对比后,将超限的指标放入一个日志文件中,然后读取该文件并调用短信接口通过短信将文件中内容发给相应的电话号码

一、检查数据库实例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

liking

我是雪人

文章评论