я использую Земляные работы (структура мониторинга, построенная на 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
для оптимизации замените 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
(на запуск на один процесс меньше)