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

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

我在用着基础工作(基于 Nagios 构建的监控框架)通过 SNMP 监控一些网络设备,但我遇到了带宽使用问题。

大多数路由器(包括此处使用的 Cisco 2800)都可以通过 SNMP 查询网络流量信息;但是,它们以计数器的形式返回此信息,即“自路由器开启以来,有多少字节进出给定接口”。因此,为了从这些信息中获取有意义的信息,您需要每秒查询一次这些信息,并查看每个测量值与前一个测量值的差异。

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

但是,当带宽使用量超过一定限制时,如何生成警报?Nagios 仅当值超过给定阈值时才发送警报,而不是基于同一值的两个不同测量值之间的差异。

我需要一种方法来检查带宽使用情况是否超过某个阈值,如果发生这种情况,则生成 Nagios 警报(从而发送电子邮件);我不能只依靠管理员查看性能数据来判断网络带宽是否有问题。

答案1

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

答案2

为了进行优化,请替换 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 (少启动一个进程)

相关内容