监控目录、主机、进程程序

1.主监控程序monitor.sh

#******************************************* #
# OS : HP-UX 11.23 #
# Remark : 调度系统监控 #
# FileName : /home/monitor/bin/monitor.sh #
# Author : sunzg #
# CreateTime : 2009-01-02 #
# Regenerator : yangdongxiao #
# UpdateTime : 2010-08-31 #
#*********************************************#

[@more@]


#*********************************************#
# 目录结构说明 #
# #
# 脚本 : /home/monitor/bin #
# 当次监控信息 : /home/monitor/data #
# 未入库的监控信息 : /home/monitor/hisdata #
# 日志 : /home/monitor/log #
#*********************************************#

echo '' >> /home/monitor/log/monitor.log
echo '----------------------start time '`date +%Y-%m-%d`' '`date +%H:%M:%S`'-------------------------------------' >> /home/monitor/log/monitor.log
echo '' >> /home/monitor/log/monitor.log


# 关键目录
/home/monitor/bin/dir.sh
/home/monitor/bin/load.sh dir


# 主机信息
/home/monitor/bin/host.sh
/home/monitor/bin/load.sh host


# 关键进程
#/home/monitor/bin/process.sh
#/home/monitor/bin/load.sh process


# 周边系统连通
#/home/monitor/bin/link.sh
#/home/monitor/bin/load.sh link


echo '' >> /home/monitor/log/monitor.log
echo '------------------------end time '`date +%Y-%m-%d`' '`date +%H:%M:%S`'-------------------------------------' >> /home/monitor/log/monitor.log
echo '' >> /home/monitor/log/monitor.log
2.目录监控程序dir.sh

#*******************************************#
# OS : HP-UX 11.23 #
# Remark : 监控关键目录 #
# FileName : /home/monitor/bin/dir.sh #
# Author : sunzg #
# CreateTime : 2008-12-15 #
# Regenerator : yangdongxiao #
# UpdateTime : 2010-08-31 #
#*******************************************#

#*******************************************#
# 目录结构说明 #
# #
# 脚本 : /home/monitor/bin #
# 当次监控信息 : /home/monitor/data #
# 未入库的监控信息 : /home/monitor/hisdata #
# 日志 : /home/monitor/log #
#*******************************************#

# 获取主机时间
SCANDATE=`date +%Y-%m-%d`
SCANTIME=`date +%H:%M:%S`

# 获取主机名
host_name=`hostname`

# 获取主机IP
host_ip=`cat /home/monitor/bin/ip.ini | grep $host_name | awk '{ print $2}'`

# 获取关键目录使用率
bdf | grep % | sed 's/%//g' | grep / | awk '{
dir_name = $NF
dir_all = $(NF-4)/(1024*1024)
dir_use = $(NF-3)/(1024*1024)
dir_free = dir_all-dir_use
use_rate = $(NF-1)/100

printf "'$SCANDATE' '$SCANTIME'|'$host_name'|'$host_ip'|%s|%s|%s|%s|0n", dir_name, dir_use, dir_free, use_rate

}' > /home/monitor/data/dir.dat
3.目录控制文件dir.ctl

LOAD DATA
INFILE "/home/monitor/data/dir.dat"
Append
INTO TABLE vgopdw.tdw_moni_sys_host_dir
FIELDS TERMINATED BY '|'
(
scan_time ,
host_name ,
host_ip ,
dir_name ,
dir_use ,
dir_free ,
dir_rate ,
flag
)
4.主机监控程序host.sh

#*******************************************#
# OS : HP-UX 11.23 #
# Remark : 监控主机信息 #
# FileName : /home/monitor/bin/host.sh #
# Author : sunzg #
# CreateTime : 2008-12-15 #
# Regenerator : yangdongxiao #
# UpdateTime : 2010-08-31 #
#*******************************************#

#*******************************************#
# 目录结构说明 #
# #
# 脚本 : /home/monitor/bin #
# 当次监控信息 : /home/monitor/data #
# 未入库的监控信息 : /home/monitor/hisdata #
# 日志 : /home/monitor/log #
#*******************************************#

# 获取主机时间
SCANDATE=`date +%Y-%m-%d`
SCANTIME=`date +%H:%M:%S`

# 获取主机名
host_name=`hostname`

# 获取主机IP
host_ip=`cat /home/monitor/bin/ip.ini | grep $host_name | awk '{ print $2}'`

# 获取主机cpu使用率、内存使用率
# HP-UX 的top命令必须使用参数[-f]指定文件才可以,如果使用重定向符[>],生成的文件内容都在一行。
# top命令无法取出系统真实物理内存大小,目前采用手动设置。主机具体配置如下,请根据具体情况修改。

# da库(cp-da01,cp-da02)内存32g
# mccdb库(cp-mccdb01,cp-mccdb02)内存64g
# 应用服务器(cp-mcc01,cp-mcc02,cp-mcc03,cp-mcc04,cp-mcc05,cp-mcc06,cp-mcc07)内存16g

# ALL_MEN=33554432
ALL_MEN=16746160

# 获取主机cpu,内存使用率。
top -d 1 -f /home/monitor/data/host.tmp
grep -E 'avg|Memory' /home/monitor/data/host.tmp | sed 's/K//g' | awk '{
uer_cpu = $3
sys_cpu = $5
cpu_rate = (uer_cpu + sys_cpu) / 100

getline

free_Mem = $8
Mem_rate = ('$ALL_MEN'-free_Mem)/'$ALL_MEN'

printf "'$SCANDATE' '$SCANTIME'|'$host_name'|'$host_ip'|%s|%s|", cpu_rate, Mem_rate

}' > /home/monitor/data/host.dat

# 获取磁盘流量
iostat 2 5 | sed 's/'bps'//g' | sed 's/'msps'//g' | sed 's/'sps'//g' | awk '{io = io + $2} END{print io/5"|0n"}' >> /home/monitor/data/host.dat

# 删除临时文件host.tmp
rm /home/monitor/data/host.tmp
5.主机控制文件host.ctl

LOAD DATA
INFILE "/home/monitor/data/host.dat"
Append
INTO TABLE vgopdw.tdw_moni_sys_host
FIELDS TERMINATED BY '|'
(
scan_time ,
host_name ,
host_ip ,
cpu_rate ,
mem_rate ,
disk_i ,
flag
)
6.进程监控程序process.sh

#****************************************#
# OS : HP-UX 11.23 #
# Remark : 监控关键进程 #
# FileName : /monitor/bin/process.sh #
# Author : #
# CreateTime : 2008-12-15 #
#****************************************#

#****************************************#
# 目录结构说明 #
# #
# 脚本 : /monitor/bin #
# 当次监控信息 : /monitor/data #
# 未入库的监控信息 : /monitor/hisdata #
# 日志 : /monitor/log #
#****************************************#

# 获取主机时间
SCANDATE=`date +%Y-%m-%d`
DAY=`date +%Y%m%d`
SCANTIME=`date +%H:%M:%S`

# 获取当前时间分钟,为入库提供判断依
LOADFLG=`date +%M`

# 获取主机名
host_name=`hostname`

# 获取主机IP
host_ip=`cat /monitor/bin/ip.ini | grep $host_name | awk '{ print $2}'`

#********************************************
#** 函 数 名: get_mon_days()
#** 函数功能: 返回月份的天数
#** 输入参数: 查看月份
#********************************************
get_mon_days()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`

ra=`expr $Y % 4`
rb=`expr $Y % 100`
rc=`expr $Y % 400`

case $M in
01|03|05|07|08|10|12) days=31;;
04|06|09|11) days=30;;
esac
if [ $M -eq 02 ]
then
if [ $ra -eq 0 -a $rb -ne 0 -o $rc -eq 0 ]
then
days=29
else
days=28
fi
fi
#echo $days
}

#********************************************
#** 函 数 名: get_before_date()
#** 函数功能: 获取昨天的日期
#** 输入参数: 查看日期
#********************************************
get_before_date()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
YY=`expr $Y - 1`
MM=`expr $M - 1`
DD=`expr $D - 1`
MM=`printf "%02d" $MM`
DD=`printf "%02d" $DD`
dd=$Y$MM
dad=`get_mon_days $dd`
be_date=$Y-$M-$DD
if [ $D -eq 01 ]
then
if [ $M -ne 01 ]
then
be_date=$Y-$MM-$dad
fi
if [ $M -eq 01 ]
then
be_date=$YY"-12-31"
fi
fi
echo $be_date
}


# 清空数据文件
> /monitor/data/process.dat

# 清空临时文件
> /monitor/bin/process.tmp

# 得到昨天的日期
BEFDAY=$(get_before_date $DAY)

# 修改配置文件/monitor/bin/process.ini 中的进程启动时间
while read local_name process_name process_sdate process_stime
do
if [ $local_name = $host_name ]
then

pstat=`UNIX95= ps -eo stime,comm | grep -c $process_name`

echo $process_name -- $pstat

if [ $pstat = 1 ]
then
# 正在运行的进程,获取实际启动时间
UNIX95= ps -eo stime,comm |
grep $process_name |
awk '{
old_cfg="'$local_name' '$process_name' '$process_sdate' '$process_stime'"
new_cfg="'$local_name' '$process_name' '$SCANDATE' "$1

if ($1 ~ /[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/ && $1 < "'SCANTIME'" && $1 != "'$process_stime'" && "'$process_sdate'" != "'$SCANDATE'")
{
system("echo "new_cfg" >> /monitor/bin/process.tmp ")
}else
{
system("echo "old_cfg" >> /monitor/bin/process.tmp ")
}
getline
getline
getline
}'
fi
if [ $pstat != 1 ]
then
old_cfg="$local_name $process_name $process_sdate $process_stime"
echo $old_cfg >> /monitor/bin/process.tmp
getline
getline
getline
fi
fi
done < /monitor/bin/process.ini

echo "end reading file"

# 刷新信息表进程启动时间
cat /monitor/bin/process.tmp > /monitor/bin/process.ini

# 读取配置文件/monitor/bin/process.ini 中的系统连通信息
while read local_name process_name process_sdate process_stime
do
if [ $local_name = $host_name ]
then
UNIX95= ps -eo stime,comm |
grep -c $process_name |
awk '{ if ($0 != 0 )
{
printf "'$SCANDATE' '$SCANTIME'|'$host_name'|'$host_ip'|'$process_sdate' '$process_stime'|'$process_name'|0|0n"
}else
{
printf "'$SCANDATE' '$SCANTIME'|'$host_name'|'$host_ip'|'$process_sdate' '$process_stime'|'$process_name'|1|0n"
}
}' >> /monitor/data/process.dat
fi
done < /monitor/bin/process.ini

# 进程监控脚本,在正常情况下,每5分钟入库一次。
case $LOADFLG in
# 若为分钟各位为5,或0执行下面脚本
[0-5][0,5]) /monitor/bin/load.sh process;;
# 其它时间时,执行下面脚本(为了满足出现异常是立即入库,周期为1分钟)
*) cat /monitor/data/process.dat | awk 'BEGIN{FS="|"; i = 0; } {if ($6 == 1) {i = i + 1}} END{ if (i > 0) system("/monitor/bin/load.sh process")}'
esac

7.进程控制文件process.ctl

LOAD DATA
INFILE "/home/monitor/data/process.dat"
Append
INTO TABLE vgopdw.tdw_moni_sys_process
FIELDS TERMINATED BY '|'
(
scan_time ,
host_name ,
host_ip ,
start_time ,
process_name ,
process_state ,
flag
)
8.入ORACLE数据库程序load.sh

#*******************************************#
# OS : HP-UX 11.23 #
# Remark : 数据入库 #
# FileName : /home/monitor/bin/load.sh #
# Author : sunzg #
# CreateTime : 2009-01-01 #
# Regenerator : yangdongxiao #
# UpdateTime : 2010-08-31 #
#*******************************************#

#*******************************************#
# 目录结构说明 #
# #
# 脚本 : /home/monitor/bin #
# 当次监控信息 : /home/monitor/data #
# 未入库的监控信息 : /home/monitor/hisdata #
# 日志 : /home/monitor/log #
#*******************************************#

. /home/monitor/.profile


# 取系统时间
SCANDATE=`date +%Y-%m-%d`
SCANTIME=`date +%H:%M:%S`

ORA_USRID="vgopdw/"`/home/monitor/jiemi/jiemi.sh DA vgopdw`"@DA"

# 主机信息监控
if [ $1 = "host" ]
then

#---------------------------- CPU & MEM ----------------------------------------

# 删除上次入库生成的日志文件
rm /home/monitor/log/host.log
# 删除上次历史数据入库生成的日志文件
rm /home/monitor/log/host_his.log

#------入库历史监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/host.ctl data=/home/monitor/hisdata/host_his.dat log=/home/monitor/log/host_his.log bad=/home/monitor/log/host_his.bad

# 判断历史数据是否入库成功
if [ -e /home/monitor/log/host_his.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/host_his.log` != "0" ]
then
# 日志存在但入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load host_his.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
# 历史数据入库成功,清空历史数据文件
> /home/monitor/hisdata/host_his.dat
echo $SCANDATE' '$SCANTIME' || load host_his.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明历史数据入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load host_his.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

#------入库当次监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/host.ctl data=/home/monitor/data/host.dat log=/home/monitor/log/host.log bad=/home/monitor/log/host.bad

# 判断当次监控数据入库是否成功
if [ -e /home/monitor/log/host.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/host.log` != "0" ]
then
# 日志存在但入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/host.dat >> /home/monitor/hisdata/host_his.dat
echo $SCANDATE' '$SCANTIME' || load host.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
echo $SCANDATE' '$SCANTIME' || load host.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/host.dat >> /home/monitor/hisdata/host_his.dat
echo $SCANDATE' '$SCANTIME' || load host.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

# 关键目录监控
elif [ $1 = "dir" ]
then

#---------------------------- DISK ---------------------------------------------

# 删除上次入库生成的日志文件
rm /home/monitor/log/dir.log
# 删除上次历史数据入库生成的日志文件
rm /home/monitor/log/dir_his.log

#------入库历史监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/dir.ctl data=/home/monitor/hisdata/dir_his.dat log=/home/monitor/log/dir_his.log bad=/home/monitor/log/dir_his.bad

# 判断历史数据是否入库成功
if [ -e /home/monitor/log/dir_his.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/dir_his.log` != "0" ]
then
# 日志存在但入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load dir_his.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
# 历史数据入库成功,清空历史数据文件
> /home/monitor/hisdata/dir_his.dat
echo $SCANDATE' '$SCANTIME' || load dir_his.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明历史数据入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load dir_his.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

#------入库当次监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/dir.ctl data=/home/monitor/data/dir.dat log=/home/monitor/log/dir.log bad=/home/monitor/log/dir.bad

# 判断当次监控数据入库是否成功
if [ -e /home/monitor/log/dir.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/dir.log` != "0" ]
then
# 日志存在但入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/dir.dat >> /home/monitor/hisdata/dir_his.dat
echo $SCANDATE' '$SCANTIME' || load dir.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
echo $SCANDATE' '$SCANTIME' || load dir.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/dir.dat >> /home/monitor/hisdata/dir_his.dat
echo $SCANDATE' '$SCANTIME' || load dir.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

# 周边系统连通
elif [ $1 = "link" ]
then

#---------------------------- LINK ---------------------------------------------

# 删除上次入库生成的日志文件
rm /home/monitor/log/link.log
# 删除上次历史数据入库生成的日志文件
rm /home/monitor/log/link_his.log

#------入库历史监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/link.ctl data=/home/monitor/hisdata/link_his.dat log=/home/monitor/log/link_his.log bad=/home/monitor/log/link_his.bad

# 判断历史数据是否入库成功
if [ -e /home/monitor/log/link_his.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/link_his.log` != "0" ]
then
# 日志存在但入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load link_his.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
# 历史数据入库成功,清空历史数据文件
> /home/monitor/hisdata/link_his.dat
echo $SCANDATE' '$SCANTIME' || load link_his.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明历史数据入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load link_his.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

#------入库当次监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/link.ctl data=/home/monitor/data/link.dat log=/home/monitor/log/link.log bad=/home/monitor/log/link.bad

# 判断当次监控数据入库是否成功
if [ -e /home/monitor/log/link.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/link.log` != "0" ]
then
# 日志存在但入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/link.dat >> /home/monitor/hisdata/link_his.dat
echo $SCANDATE' '$SCANTIME' || load link.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
echo $SCANDATE' '$SCANTIME' || load link.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/link.dat >> /home/monitor/hisdata/link_his.dat
echo $SCANDATE' '$SCANTIME' || load link.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

# 关键进程
elif [ $1 = "process" ]
then

#---------------------------- PROCESS ---------------------------------------------

# 删除上次入库生成的日志文件
rm /home/monitor/log/process.log
# 删除上次历史数据入库生成的日志文件
rm /home/monitor/log/process_his.log

#------入库历史监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/process.ctl data=/home/monitor/hisdata/process_his.dat log=/home/monitor/log/process_his.log bad=/home/monitor/log/process_his.bad

# 判断历史数据是否入库成功
if [ -e /home/monitor/log/process_his.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/process_his.log` != "0" ]
then
# 日志存在但入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load process_his.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
# 历史数据入库成功,清空历史数据文件
> /home/monitor/hisdata/process_his.dat
echo $SCANDATE' '$SCANTIME' || load process_his.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明历史数据入库失败,等待下次入库
echo $SCANDATE' '$SCANTIME' || load process_his.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

#------入库当次监控数据
sqlldr userid=$ORA_USRID control=/home/monitor/bin/process.ctl data=/home/monitor/data/process.dat log=/home/monitor/log/process.log bad=/home/monitor/log/process.bad

# 判断当次监控数据入库是否成功
if [ -e /home/monitor/log/process.log ]
then
if [ `grep -i -c 'SQL*Loader-' /home/monitor/log/process.log` != "0" ]
then
# 日志存在但入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/process.dat >> /home/monitor/hisdata/process_his.dat
echo $SCANDATE' '$SCANTIME' || load process.dat || failed . || ---- Cause : load database error .' >> /home/monitor/log/monitor.log
else
echo $SCANDATE' '$SCANTIME' || load process.dat || success .' >> /home/monitor/log/monitor.log
fi
else
# 日志不存在则说明入库失败,保存当次监控数据,等待下次入库
cat /home/monitor/data/process.dat >> /home/monitor/hisdata/process_his.dat
echo $SCANDATE' '$SCANTIME' || load process.dat || failed . || ---- Cause : sqlldr error .' >> /home/monitor/log/monitor.log
fi

else

echo " --------------------------------------------------------&gt>> please enter : host or link or process!"

fi

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7490392/viewspace-1039639/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7490392/viewspace-1039639/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值