NFS掛載腳本的代碼實(shí)現(xiàn)
今天們主要講解一下NFS掛載腳本的內(nèi)容。這個(gè)在監(jiān)控系統(tǒng)中是常見(jiàn)的問(wèn)題。那么具體的nagios監(jiān)控腳本是監(jiān)控NFS是否被掛載上的腳本信息,讓們從下文來(lái)了解一下吧。先說(shuō)下寫(xiě)這個(gè)NFS掛載腳本的初衷吧,事情還是因?yàn)樯洗尉W(wǎng)絡(luò)部調(diào)整服務(wù)器機(jī)柜位置引起的,當(dāng)時(shí)自信滿滿的認(rèn)為服務(wù)器上已經(jīng)配置好了自動(dòng)掛載NFS,所以根本不用擔(dān)心NFS掛載腳本的情況,當(dāng)服務(wù)器啟動(dòng)恢復(fù)后,的nagios給發(fā)了一個(gè)recovery的郵件,就想當(dāng)然的認(rèn)為好了,也就沒(méi)管。第二天開(kāi)發(fā)人員居然找到,問(wèn)昨天是不是有兩臺(tái)機(jī)器重啟了,說(shuō)是呀,他們就說(shuō)NFS沒(méi)有掛載上,當(dāng)時(shí)還很強(qiáng)調(diào)說(shuō)不可能呢,結(jié)果手動(dòng)重啟了一下昨天的機(jī)器,發(fā)現(xiàn)真的沒(méi)有自動(dòng)掛載上,讓很是郁悶。
沒(méi)有自動(dòng)掛載到還不是讓人最郁悶,那個(gè)已經(jīng)通過(guò)技術(shù)問(wèn)題解決了,郁悶的是有了問(wèn)題居然不是nagios***時(shí)間通知。由于之前使用的是nagios的check_disk這個(gè)腳本,在NFS磁盤(pán)有問(wèn)題,不可讀寫(xiě)或空間不足的時(shí)候給報(bào)過(guò)警,但經(jīng)過(guò)測(cè)試發(fā)現(xiàn),這個(gè)腳本只能監(jiān)控本地磁盤(pán)(包括掛載好的NFS)可用性,而不管是否NFS掛載是否正確了,所以才有了今天這個(gè)腳本。
腳本名稱:check_nfsmount
腳本作用:
1,檢查NFS磁盤(pán)是否被掛載
2,報(bào)告哪些NFS沒(méi)有被掛載
使用方法:
1,將需要mount的NFS磁盤(pán)寫(xiě)入到fstab,如下
# cat /etc/fstab
/dev/VolGroup00/LogVol00 / ext3defaults,usrquota,grpquota1 1
LABEL=/boot /boot ext3defaults1 2
tmpfs /dev/shmtmpfs defaults0 0
devpts /dev/ptsdevpts gid=5,mode=620 0 0
sysfs /syssysfs defaults0 0
proc/proc procdefaults0 0
/dev/VolGroup00/LogVol01 swapswapdefaults0 0
192.168.211.129:/home/tst /data/tst nfs defaults0 0
192.168.211.129:/home/tst02 /data/tst02 nfs defaults0 0
192.168.211.129:/home/tst03 /data/tst03 nfs defaults0 0
2,將腳本nagios安裝目錄的libexec下,并賦予可執(zhí)行權(quán)限
3,配置nrpe配置文件,添加相應(yīng)的command
4,nagios監(jiān)控機(jī)上添加相應(yīng)的服務(wù)
NFS掛載腳本內(nèi)容:
- #!/bin/bash
- #VERSION="1.0"
- #AUTHOR by wenzizone.cn
- . /usr/local/nagios/libexec/utils.sh
- CHECKNAME="Mount NFS"
- RESULT=""
- EXIT_STATUS=$STATE_OK
- NFSFSTAB=`LC_ALL=C awk '!/^#/ && $3 ~ /^nfs/ && $3 != "nfsd" && $4 !~ /noauto/ { print $1 }' /etc/fstab`
- NFSMTAB=`LC_ALL=C awk '$3 ~ /^nfs/ && $3 != "nfsd" && $2 != "/" { print $1 }' /proc/mounts`
- theend() {
- echo $RESULT
- exit $EXIT_STATUS
- }
- CHECK_MOUNT(){
- LIST=""
- for list in $NFSFSTAB
- do
- NFS_MOUNT=$(LC_ALL=C cat /proc/mounts |cut -d " " -f 1|grep "${list}$")
- if [ -z "${NFS_MOUNT}" ];then
- LIST="$LIST$list "
- fi
- done
- return $LIST
- }
- if [ -n "${NFSMTAB}" ];then
- if [ "${NFSFSTAB}" = "${NFSMTAB}" ];then
- RESULT="$CHECKNAME OK - NFS BE MOUNTED PROPERLY"
- EXIT_STATUS=$STATE_OK
- else
- CHECK_MOUNT
- RESULT="$CHECKNAME WARNING - ${LIST} NOT BE MOUNTED"
- EXIT_STATUS=$STATE_WARNING
- fi
- else
- RESULT="$CHECKNAME CRITICAL - ALL NFS NOT BE MOUNTED"
- EXIT_STATUS=$STATE_CRITICAL
- fi
- theend
對(duì)于NFS掛載腳本中還沒(méi)有考慮到的還希望各位指出。