DNS 自我監控
前陣子DNS出了點問題,後來和同事研究不如寫個 script 丟進 crontab 作監控,目前想到的方法是這樣,列幾個重要的 FQDN, 定時用 host/nslookup 去查詢看看查不查得到,於是寫了像是這樣的監控 script:
#!/bin/sh
#
# 測試特定的 FQDN 是否查詢得到,若有問題則自動重啟並 mail
#
DATE=`date "+%Y%m%d %H:%M"`
HOST=ns
SERVER=ns.domain.net
LOG=/var/log/ns_check.log
MAIL="admin@ns.domain.net"# 全部要測試的 FQDN
FQDNLIST="ns.domain.net. www.hinet.net."# 若測試任一 FQDN 有問題則設為 1,最後依此變數決定有沒有問題
CHECK=0# 依序測試 DNLIST 裡的各個 FQDN
for DN in $FQDNLIST
dohost $DN | grep address
if [ $? -ne 0 ] ; then
CHECK=1
echo $DATE $HOST dns query fail: $DN >> /tmp/$HOST_ns_check.tmp
echo $DATE $HOST dns query fail: $DN >> $LOG
fidone
# 若有任何一個 FQDN 測試有問題,則重啟 DNS 並 E-mail 通知
if [ $CHECK -eq 1 ] ; then
mail -s “[$HOST] $DATE dns query error” $MAIL < /tmp/$HOST_ns_check.tmp
rm /tmp/$HOST_ns_check.tmp
/sbin/service named stop
sleep 3
/sbin/service named start
fi
只是可能還是有些問題很難避免,像是如果有問題寄信 E-mail 位址也查詢不到那自然信也寄不出來(寫死 smtp server ip 在 /etc/hosts或是 script 直接用 ip 寄?);或是問題是自動重啟也無法解決時,那丟在 crontab 裡剛好就讓它一直不斷重啟=.= 難道要另外將一定時間內重啟次數寫入另一個檔案作 check 嗎?另外還有一些機器不知道為什麼有時用 service named restart 或 stop/start 會有問題沒辦法正常重啟,這也很麻煩,難道真的得寫個迴圈重複 stop 好幾次或是非得暴力動用 kill -9 不可嗎?@_@
不知道有沒有更好的方法?(應該還有動用高級 content switch 以外的方法吧?)
related articles
- > /tmp/$HOST_ns_check.tmp echo $DATE $HOST dns query fail: $DN [...]">WordPress 2.6.2 (September 13th, 2008)
- > /tmp/$HOST_ns_check.tmp echo $DATE $HOST dns query fail: $DN [...]">健康真的很重要… (June 15th, 2008)
- > /tmp/$HOST_ns_check.tmp echo $DATE $HOST dns query fail: $DN [...]">近況更新 (May 15th, 2008)
- > /tmp/$HOST_ns_check.tmp echo $DATE $HOST dns query fail: $DN [...]">WordPress 2.3.3 (February 13th, 2008)
- > /tmp/$HOST_ns_check.tmp echo $DATE $HOST dns query fail: $DN [...]">國內航空業真是慘淡啊… (January 5th, 2008)




December 17th, 2005 at 14:29
[...] 之前在DNS 自我監控寫了script定時查詢特定FQDN,後來因為想起有人抱怨偶而就會有某個FQDN連不到,就改了一下改成向多個DNS Server查詢一個特定的FQDN,這才發現一些徵兆,除了一兩次是要查詢的FQDN負責的DNS Server查不到,所以自然會有問題的情況以外,有時向Hinet的DNS 168.95.1.1查詢竟然也會查詢不到?!雖然不確定是網路還是168.95.1.1或是其他的問題,但又想起上次參加TWNIC DNS教育課程的時候,講師也說設 forwarders 不見得會比較快,於是乾脆就把 forwarders 拿掉了,目前看起來似乎真的有比較正常,真是奇妙。 [...]