Назад | Перейти на главную страницу

Мониторинг использования полосы пропускания маршрутизатора через Nagios и SNMP

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