Monitoring
通過 Nagios 和 SNMP 監控路由器頻寬使用情況
我正在使用GroundWork(基於 Nagios 建構的監控框架)通過 SNMP 監控一些網路設備,但我遇到了頻寬使用問題。
大多數路由器,包括這裡使用的 Cisco 2800,都可以通過 SNMP 查詢網路流量資訊;但是,它們以計數器的形式返回此資訊,這意味著“自從路由器打開以來,有多少字節進出給定介面”。所以,為了從這些資訊中得到有意義的東西,你需要每秒查詢這些資訊,看看每個度量與前一個度量有多少不同。
Groundwork/Nagios 可以自動管理性能數據,因為它們使用 RRD 來儲存這些數據,並且 RRD 支持計算值之間的增量。
但是,當頻寬使用量超過一定限制時,如何生成警報?Nagios 只能在值高於給定門檻值時發送警報,而不是基於相同值的兩個不同度量之間的差異。
我需要一種方法來檢查頻寬使用是否高於某個門檻值,如果發生這種情況,則生成 Nagios 警報(從而發送電子郵件);我不能只依靠管理員查看性能數據來查看網路頻寬是否有問題。
我使用 cron 腳本執行此操作,將目前值儲存在臨時文件中,然後下次使用它來計算自上次執行以來的頻寬使用率。
#!/bin/bash email_address="" router_ip="" # 80% BANDWIDTH [ (384000bps) 48,000Bps ] - 20% = 38,400 Bps alertBW="76800" lastBWFile="/var/log/ciscoGW.log" lastBW=`cat $lastBWFile | awk '{print$2}'` lastTime=`cat $lastBWFile | awk '{print$1}'` curBW=` snmpget -c snmap_name -v 1 $router_ip IF-MIB::ifOutOctets.2 | awk '{print$4}'` let diffBW=$curBW-$lastBW #echo "Diff BW: $diffBW" timeNow=`date +%s` let diffTime=$timeNow-$lastTime let alertBW=$alertBW*$diffTime echo "$timeNow $curBW" > $lastBWFile if [ $diffBW -gt $alertBW ]; then # echo "Over limit!" echo "Bandwith used over $diffTime seconds: $diffBW" | mail -s "BANDWIDTH OVER LIMIT!!!!" $email_address fi
由於我對實際峰值更感興趣,因此我開始使用 rrdtool:
#start 15 minutes ago #end 5 minutes ago since rrdtool queries every 5 minutes rrdtool fetch $FROM MAX -s -900 -e -300