AIX主机监控脚本
上一篇 / 下一篇 2008-03-19 08:42:54 / 个人分类:经典脚本
#!/bin/sh
#
K:AE(g%d+`z0# 该脚本的作用是检查主机的负载情况,对于超出阀值的项目,发送短信告警到相关人员的手机。ITPUB个人空间s*o+{V^%@e/?y\
# 当前网管系统实际上已经具备这样的功能,但有误告或不告的情况,故以此脚本作为补充。
5l.d&B(Vcd:PW Y0# 作者:niyl
^n!d5QB,EAV(V0# 日期:2008-03-05
UT7d1n2?0Hr4^0#
#ITPUB个人空间qej,b(dggN
# 首先载入配置文件,如果配置文件不存在,则退出ITPUB个人空间:VL
]L!A'?9m
# 配置文件中包含相关资源的阀值定义以及Oracle用户的环境变量设置
,XMV
JGt F0# 如果有其他的环境变量需要设置,也可以在此配置文件中进行设置ITPUB个人空间uW@8a F e
#
oETW_v3V0HOME_DIR=/home/niyl/smsalert
SOURCE=$HOME_DIR/env.confITPUB个人空间3`5FS:}\AE-N,DXi
check_source()
)E)YE#fw9z|Z1E0{ITPUB个人空间e5@F:R;E4epi
if [ -r $SOURCE ]; thenITPUB个人空间`
m3d6m8w$\%T]'f
. $SOURCEITPUB个人空间sF"p5tI"}
elseITPUB个人空间[{%M%u4a? yFS
echo "$(basename $0): Cannot locate the default setting file."ITPUB个人空间 n-G
{L6j `*W
exit 1
pq2l?#NX:J0fiITPUB个人空间W/Duu:S4Q
}
#
B%E]-@1{!}-dF0# 定义一个发送告警短信的函数,函数调用格式: sendmessage "短信内容"
/[2s_/Z.jt V6M0# 该函数将读取手机列表配置文件phone.conf中的手机号码,逐个发送告警短信。
o/O7Tsh7vU@?-I0#ITPUB个人空间U S6L m;rF
sendmessage() {
oP-tlq/H?0cd $HOME_DIR
kk*e1K[+p6]@0cat phone.conf | grep -v ^# | while read line
1I+Z8I)}i9U0doITPUB个人空间
U#Wh&I:f9b
./send_msg $line "$1"ITPUB个人空间_6YOZ%`1\K$c:|
doneITPUB个人空间}HP7M:Gi1["x;[Gs
}
#ITPUB个人空间x&ae"x~K
# 获取主机的IP地址
x{eHy5]/I9c0#ITPUB个人空间K&PX&u%~
EN_NUM=$(netstat -rn | grep default | awk '{print $6}')
[!l+vxFi)C0HOSTIP=$(ifconfig $EN_NUM | sed -n '2p' |awk '{print $2}')
#
}HW8a%r;}0# 定义报表头ITPUB个人空间0`@ik:eeu:iy
#
;y9?8z|-Q/s7e]0report_header()ITPUB个人空间{!R'vydT/QL
{
+sql {:m
vy{(v0HOSTNAME=$(hostname)
,tX"B*M)]}0USER=`whoami`
DW ey n#iM2Lh0cat<<!ITPUB个人空间#M|-r[v k
H
*****************************************************************************************ITPUB个人空间 wyo^4K
* Hostname: $HOSTNAME Server: $HOSTIP
tI)]&z`&h%T
Aw0* User: $USER Time: $(date +%Y'-'%m'-'%d' '%H':'%M':'%S)
Re:BEF"f5?J
g4p Aj$~0* ITPUB个人空间7}d?;e(f_(akQ
* SYSTEM CHECK REPORTITPUB个人空间#Z7l:E3z8_3Q(N
* ===================ITPUB个人空间UnuE.k
e0{
*****************************************************************************************ITPUB个人空间2]H$?3u+i"A3VmD.j
!ITPUB个人空间+L8X(i%T&p.^
}
ITPUB个人空间4B[^ Dbe)Z5^
#ITPUB个人空间T
@.Q/p|;YUpd
# 定义脚本输出的临时目录,如果不存在,则自动创建一个新的目录ITPUB个人空间G y'd$x.i ?1_ku:z0J3H
#
%?t5?*}9eA.Ky0TEMP_DIR=$HOME_DIR/tmpITPUB个人空间t3W F6c4d:Y1L
N d,P
if [ -d $TEMP_DIR ];then
1\
[9IO]0 :ITPUB个人空间$_3q,VVi
elseITPUB个人空间s(XaU9j
mkdir $TEMP_DIRITPUB个人空间
V,?/VJ~FE
fi
#
J(b g,MZq/dj"L3IT0# 载入环境设置
%V1T9qfG OaF0#
f,dpQB
~1Y0check_source
#
~enZ$F-G9_0# 输出报表头信息
uXqv#s!}-lr0#
/`R'g8g |;X&u
BRr0report_header
#
0q HEy'DK0# 检查 CPU的使用情况,这里使用vmstat命令ITPUB个人空间JJ3SB1Mz/UsQ+Z0f
#
jn9S3FJ3O-Z9KB0echoITPUB个人空间]+W3F4a+p0c8{5YF8aS
echo "---------------------------- Check CPU Useage ----------------------------"
v4}EJ&mFRv8u0vmstat 1 10 | awk '{print $0;if($1 ~ /^[0-9].*/) (totalcpu+=$16);(avecpu=100-totalcpu/10)}; END {print "The average usage of cpu is :"avecpu}' >$TEMP_DIR/cpu_infoITPUB个人空间-X0Z)S)Op A~e:Q2g2?/b
cat $TEMP_DIR/cpu_infoITPUB个人空间
Sy:`8m$_C
cpu_used_pct=`cat $TEMP_DIR/cpu_info | grep "The average usage of cpu is" |awk -F ":" '{print $2}' `
3z"m?w,S3p7Z,W.A0if [ "$cpu_used_pct" -gt "$CPU_VALUE" ] ; thenITPUB个人空间Ill5Ms$s2g
echo "LOG-Warnning:`date +%Y'-'%m'-'%d' '%H':'%M':'%S`, The CPU load is up to ${cpu_used_pct}%.Please check!!"ITPUB个人空间8bw+S2Rn8`DM
sendmessage "Host:$HOSTIP The CPU load is up to ${cpu_used_pct}%.Please check!"ITPUB个人空间'Ce$dw)R[MO
else
br5hL`X0 echo "\t\t\t\t The CPU load is OK."
!g~eF&};l0fi
#ITPUB个人空间M@-x4^6X
# 内存使用监控,包括交换区的使用情况监控
K-I.m ^3v dl)btK2g0#
)i4k8^+s[%A)k
QU0echo
F g9e3b6T/@0echo "---------------------------- Check Memory Useage ----------------------------"ITPUB个人空间dFF@!pE
svmon -G >$TEMP_DIR/mem_info
:wmz+u1f6{o0cat $TEMP_DIR/mem_infoITPUB个人空间4|j{.nE8xw
TOTAL_MEM=$(cat $TEMP_DIR/mem_info |grep "memory" |awk '{print $2}')
q9dDE)Rm~-d!_\
G0INUSE_MEM=$(cat $TEMP_DIR/mem_info |grep "memory" |awk '{print $3}')ITPUB个人空间
{e.u*{)Y
MEM_PCT=$((100*$INUSE_MEM/$TOTAL_MEM))
[0sZrX&u-T;f0echo $MEM_PCTITPUB个人空间{gQg.`
if [ "$MEM_PCT" -gt "$MEM_VALUE" ]; thenITPUB个人空间zN`rm/C#A0W
echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`, The memory load is up to ${MEM_PCT}%.Please check!!"
L6[.c;iClNt9Vg0 sendmessage "Host:$HOSTIP The memory load is up to ${MEM_PCT}%.Please check!"ITPUB个人空间.zQAE E7Y
elseITPUB个人空间Jh'j
n8n r6Dksm
echo "\t\t\t\t The Memory load is OK."
'~X(V-A[oj rP0fi
TOTAL_SWAP=$(cat $TEMP_DIR/mem_info |grep "pg space" |awk '{print $3}')