如何實時監視系統運行狀況並在異常發生的時候自動發郵件到管理員的郵箱或在嚴重錯誤的時候發短信給管理員?其實,利用HP-UX系統工具和自帶的sendmail郵件發送功能,就能實現配置一個比較通用的監視系統! 以下為HP-UX11.00環境下配置的詳細過程。 HP-UX11.00
如何實時監視系統運行狀況並在異常發生的時候自動發郵件到管理員的郵箱或在嚴重錯誤的時候發短信給管理員?其實,利用HP-UX系統工具和自帶的sendmail郵件發送功能,就能實現配置一個比較通用的監視系統! 以下為HP-UX11.00環境下配置的詳細過程。
HP-UX11.00系統安裝時也會安裝Sendmail,版本大概是8.9.x!這個版本的Sendmail應該也算穩定的,但是我這裡配置時會出現sendmail.cf文件版本太舊的錯誤!於是干脆download一個新版的算了!在這裡可以下載到HP-UX特別版的Sendmail 8.11.1:http://www.software.hp.com/ISS_products_list.html(需要填一些個人和公司信息,不一定填真實的:p,就可以下載了,大概1.3M吧,也算夠新的了!如果你想用更新的版本,可以到http://www.sendmail.org去下載8.12.6的,不過安裝起來麻煩得多也比較容易出問題)。文件下載下來以後是一個叫做Sendmail8111.depot的文件,好家伙,能用swinstall輕松搞定!!!把它ftp到你的HP-UX系統吧,注意需要用binary的模式傳輸,否則安裝時會出現錯誤。完了,可以安裝了,假如你ftp到/tmp下,那麼用: #swinstall –s /tmp/Sendmail8111.depot ,按提示完成即可。
假如你的系統配置了DNS服務,那麼配置Sendmail會簡單一點,否則就稍微麻煩一點(其實也沒麻煩多少)。我們先假設一些前提:HP-UX系統主機名:hosta,IP地址:192.168.0.1 (C類網址,下同),默認網關: 192.168.0.2;假設公司郵件
服務器是hostb(很少直接用sendmail直接做公司業務郵件服務器的哦),IP地址:192.168.1.5,域名是myhpux.com,hostb允許為hosta提供郵件代理服務。
具體步驟:
# vi /etc/hosts
192.168.1.5 hostb myhpux.com
192.168.0.1 hosta hosta.myhpux.com
…
如果存在/etc/nsswitch.conf ,那麼直接修改該文件;如果不存在,則需要拷貝一個:
#cp -p /usr/newconfig/etc/nsswitch.files /etc/nsswitch.conf
#vi /etc/nsswitch.conf
hosts: files
…
#nslookup
Using /etc/hosts on : hosta
>myhpux.com
沒問題的話,繼續;有問題則不能怪我了,看看自己上面做對了沒有!!!(IP地址、網關、域名和hostname等需要替換成你自己的)
#vi /etc/mail/sendmail.cf
找到:#Dj$w.Foo.COM 這行,並在下面增加一行:
Dj$w.sysinfo (發送郵件時,系統默認發信人是:
[email protected] )
然後,找到DS 行,改成:
DShostb
存盤退出!
可以測試了:
#/sbin/init.d/sendmail stop
#/sbin/init.d/sendmail start
#sendmail –v
[email protected] <輸入郵件內容>
.
(注意,最後一行的“.”號結束郵件內容輸入)
正常系統和網絡都沒問題的話,你的
[email protected]就會收到
[email protected]發給你的郵件了!這只是通常的情況,假如你需要發郵件到Inte
.net,如
[email protected]:
1、假如你的HP-UX主機沒有直接Internet連接,需要通過hostb代理,則:
# vi /etc/hosts
192.168.1.5 hostb vip.sina.com
然後就可以發了:
#mailx –s “test”
[email protected] 2、假如你的HP-UX有直接Internet連接,則:
#vi /etc/hosts
202.101.111.222 sinahost vip.sina.com
#vi /etc/mail/sendmail.cf
修改DShostb 為DSsinahost
#/sbin/init.d/sendmail stop
#/sbin/init.d/sendmail start
測試:
#mailx –s “Test”
[email protected] 說明,202.101.111.222是#ping vip.sina.com得到的IP地址。
好,郵件服務搞定,接下來寫監視腳本!!!
根據我自己的實際狀況,我需要監視的系統運行狀況主要有文件系統空間、網絡和數據庫服務!先說明文件系統的監視。文件系統空間不同掛起點設定的臨界值是不一樣的,比如/var,可以設定警告線是80%,錯誤線是95%,而數據庫/oradb的警告線可能是60%,錯誤線80%,由此必須設定一個文件系統臨界線設置文件:比如/etc/fs.sysmon (/etc下系統默認配置文件沒有.sysmon結尾的,放心使用不會影響系統的)。/etc/fs.sysmon文件結構是這樣的:注釋的行不考慮,分3段,分別是掛起點、警告線、錯誤線。具體例子如下:
##############################################################
# Which mount point must be monitored and how to monitored. #
# | Mount Point | % Warning | % Error | #
# Attention: /lvol1 is incorrect , it should be lvol1 #
##############################################################
# lvol1 90 95
/ 50 60
mfg1 60 75
stand 70 80
var 60 70
usr 70 80
users 50 80
tmp 70 80
opt 70 80
mfg8 70 80
mfg7 70 80
database 40 90
臨界值隨時可以改,監測腳本以這個文件的臨界值為准判斷文件系統是否出問題。
系統監視腳本fsmon,內容大致如下:
#!/usr/bin/sh
##Check file system usage!
# $mntpt --- Mount point
# $usdpct --- %used (bdf output)
# $usdamt --- %used * 100 (If usdpct = 63% then usdamt = 63 )
# $wpect --- Max Warning Percentage
# $epct ---Max Error Percentage
# Check if fsswitch exists ------
if [[ ! -f /etc/fs.sysmon ]]
then
echo "The configuration file /etc/fs.sysmon does not exist!"
exit
fi
touch $$.rslt
bdf |grep -iv filesystem |awk '{print $6" "$5}' |while read mntpt usdpct
do
mntpt=`echo $mntpt |tr -d "/"`
if [[ $mntpt = "" ]]
then
mntpt="/"
fi
usdamt=`echo $usdpct |tr -d "%"`
wpct=`more /etc/fs.sysmon|grep -v "#"|grep "$mntpt"|awk '{print $2}'`
epct=`more /etc/fs.sysmon|grep -v "#"|grep "$mntpt"|awk '{print $3}'`
if [[ "$wpct" = "" ]]
then
wpct=90
fi
if [[ "$epct" = "" ]]
then
epct=95
fi
if [[ $mntpt != "/" ]]
then
mntpt="/"$mntpt
fi
if [[ $usdamt -gt $epct ]]
then
echo "Error:$mntpt file system's usage is ${usdamt}%." >>$$.rslt
else
if [ $usdamt -gt $wpct ]
then
echo "Warning:$mntpt file system's usage is ${usdamt}%." >>$$.rslt
fi
fi
done
if [[ -s ./$$.rslt ]]
then
if grep "Error:" ./$$.rslt >/dev/null
then
mailx -s "Fs-Err" -r "fs@$(hostname)"
[email protected] <$$.rslt
else
mailx -s "Fs-Wrn" -r "fs@$(hostname)"
[email protected] <$$.rslt
fi
fi
rm $$.rslt
unset mntpt
unset usdpct
unset usdamt
unset wpct
unset epct
關於網絡監視方面,可以挑選幾個重要的主機來測試網絡連通性(由此達到以點代面的目的,當然,可以象Openview那樣全面監測那更好)。主機列表放在文件/etc/ho.sysmon裡,比如:
######################################################################
# Host list whom this host can connect to. #
# Please input the host's IP address. #
######################################################################
#192.168.0.1
127.0.0.1
192.168.1.5
192.168.2.1
192.168.3.1
網絡監視腳本如下(netmon):
#!/usr/bin/sh
# Monitor Network Connection from Host List: ./rhosts
# phost --- Ping host
# prslt --- Ping Result
if [[ ! -f /etc/ho.sysmon ]]
then
echo "Host list file do not exist."
exit
fi
touch $$.net
more /etc/ho.sysmon|grep -v "#" |while read phost
do
prslt=`ping $phost -n 5 |grep loss|awk '{ print $7}'`
prslt=`echo $prslt|tr -d "%"`
if [[ $prslt -ne 0 ]]
then
if [[ $prslt -eq 100 ]]
then
echo "Error: Can't connect to host:$phost." >> $$.net
else
echo "Warn: Connect to host:$phost problem." >>$$.net
fi
fi
done
if [[ -s ./$$.net ]]
then
if grep "Error:" ./$$.net >/dev/null
then
mailx -s "Net-Err" -r "net@$(hostname)"
[email protected] <$$.net
else
mailx -s "Net-Wrn" -r "net@$(hostname)"
[email protected] <$$.net
fi
fi
rm $$.net
unset phost
unset prslt
如果以上內容都能理解了,那麼監視數據庫是否在運行就很簡單了,比如
if ps –ef |grep “_orasrv” |grep “mydb”
then
else
fi
假如數據庫mydb已經通過_orasrv進程啟動,那麼執行相關動作,否則重啟數據庫並發信心給管理員。
補充一點,假如你想在系統異常是收到短信通知,只要對收費郵箱(比如
[email protected])設置郵件到達短信通知即間接實現。