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 #
#*********************************************#
#*********************************************#
# 目录结构说明 #
# #
# 脚本 : /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 " -------------------------------------------------------->>> please enter : host or link or process!"
fi
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7490392/viewspace-1039639/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7490392/viewspace-1039639/