Monitoring

通過 Nagios 和 SNMP 監控路由器頻寬使用情況

  • June 23, 2010

我正在使用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 

引用自:https://serverfault.com/questions/88190