通过Nagios和SNMP监控路由器的带宽使用情况

我正在使用GroundWork (一种基于Nagios的监视框架)通过SNMP监视一些networking设备,但是我仍然遇到了带宽使用问题。

大多数路由器,包括这里使用的Cisco 2800,都可以通过SNMP查询networkingstream量信息; 然而,他们以计数器的forms返回这个信息,意思是“自打开路由器以来有多less字节进入或离开给定的接口”。 所以,为了从这些信息中获得一些有意义的东西,你需要每秒钟查询这些信息,看看每个度量与前一个度量有什么不同。

Groundwork / Nagios可以自动pipe理这些性能数据,因为它们使用RRD来存储这些数据,RRD支持计算值之间的增量。

但是如何在带宽使用超过一定限度时产生警报? 只有当一个值高于给定阈值时,Nagios才能发送警报,而不是基于同一个值的两个不同度量之间的差异。

我需要一种方法来检查带宽使用是否超过了一定的阈值,如果发生这种情况,会生成Nagios警报(从而发送电子邮件)。 我不能仅仅依靠pipe理员查看性能数据来查看networking带宽是否有问题。

我用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 

优化,取代snmpget -c snmap_name -v 1 $ router_ip IF-MIB :: ifOutOctets.2 | awk'{print $ 4}' by snmpget -O qv -c snmap_name -v 1 $router_ip IF-MIB::ifOutOctets.2 (一个进程less启动)