Eu fiz isso com um script cron, armazena o valor atual em um arquivo temporário e, da próxima vez, usa-o para calcular a utilização da largura de banda desde a última execução.
#!/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
Desde que eu estava mais interessado em picos reais, passei a usar o rrdtool:
#start 15 minutes ago
#end 5 minutes ago since rrdtool queries every 5 minutes
rrdtool fetch $FROM MAX -s -900 -e -300