Я беру курс сетевого управления, основная тема которого - SNMP. Хотя мой учитель хорошо объясняет теоретическую часть SNMP (V1, V2, V3, RMON, MIBS и т. Д.), Он не умеет объяснять практические вещи, например, как я могу использовать только что собранную информацию или как я могу использовать SNMP. для обнаружения перегрузки или необычного трафика в сети. Любая информация по этому поводу будет оценена.
Я часто использую SNMP в сочетании с rrdtool для предоставления обзорных графиков, позволяющих мне знать о трафике, проходящем через маршрутизаторы в моей сети, и использовании процессора / памяти серверами. Распространенным инструментом командной строки является «snmpget», который захватывает и выводит определенный фрагмент данных, предоставленных устройством с поддержкой SNMP.
Например, для передачи октетов через маршрутизатор Cisco я использую:
snmpget -v 1 -c public $ router_ip_address IF-MIB :: ifOutOctets.3 | egrep -o "[0-9] + $"
а затем направьте вывод в rrdtool. В устройствах потребительского уровня я часто сталкивался с предполагаемой поддержкой SNMP, которой на самом деле не существует (чип может быть там, но на самом деле он не записан в прошивку) - так что это определенно то, чего нужно остерегаться. Например, маршрутизатор Netgear, который использовался до этого маршрутизатора Cisco, «поддерживал» SNMP, но фактически не выводил никаких данных.
Чтобы выяснить, какие данные доступны для данного устройства, вы можете использовать команду snmpwalk или проверить MIB. Однако я обнаружил, что проверка MIB в основном бесполезна, так как большинство устройств, с которыми я сталкивался, как правило, используют свои собственные MIB (или не рекламируют, какие из них поддерживают). Пример команды snmpwalk: snmpwalk -c public $device_ip_address
Если вам интересно узнать о моем графике rrdtool, вот пример части моего скрипта (который выполняется каждые пять минут) для построения графика трафика моего маршрутизатора.
function plot_router {
if [ ! -e $DATA_DIRECTORY/router.rrd ]; then
rrdtool create $DATA_DIRECTORY/router.rrd --start now \
DS:bytes_in:COUNTER:600:U:U \
DS:bytes_out:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797
fi
bytes_in=`snmpget -v 1 -c public $router_ip IF-MIB::ifInOctets.3 | egrep -o "[0-9]+$"`
bytes_out=`snmpget -v 1 -c public $router_ip IF-MIB::ifOutOctets.3 | egrep -o "[0-9]+$"`
rrdtool update $DATA_DIRECTORY/router.rrd \
N:$bytes_in:$bytes_out
# The actual graphing...
for (( i=0;i<$SEGMENTS_COUNT;i++)); do
SEGMENT=${SEGMENTS[${i}]}
FILENAME="$OUTPUT_DIRECTORY/router_$SEGMENT.png"
rrdtool graph $FILENAME -s e-$SEGMENT -e now -h $HEIGHT -w $WIDTH --title "(`date`) Router"\
--rigid \
--slope-mode \
DEF:bytes_out=$DATA_DIRECTORY/router.rrd:bytes_out:AVERAGE \
CDEF:inverted=0,bytes_out,- \
AREA:inverted$fg_color1:"Bytes Out (Upload)" \
DEF:bytes_in=$DATA_DIRECTORY/router.rrd:bytes_in:AVERAGE AREA:bytes_in$fg_color2:"Bytes In (Download)" \
CDEF:error=bytes_in,UN,INF,0,IF \
AREA:error$fg_color_error:"Errors" \
GPRINT:bytes_in:AVERAGE:"Avg Bytes In\: %3.0lf" \
GPRINT:inverted:AVERAGE:"Avg Bytes Out\: %3.0lf" >> /dev/null
done
}
Обратите внимание на то, что сценарий запускается каждые пять минут. На всю жизнь, за все годы использования rrdtool, я никогда не тратил время на то, чтобы выяснить правильные «настройки» для RRA для чего-либо, кроме пятиминутного интервала. Если вы сделаете настройки неправильно, вы получите совершенно пустые графики и полное недоумение. Итак, по моему опыту, просто используйте пятиминутные интервалы (запускайте скрипт вставки каждые пять минут из cron), если вы не хотите потратить некоторое время на выяснение правильных RRA для чего-то еще.
Я также хотел отметить, что, хотя rrdtool - замечательный инструмент для систем Linux, он также доступен в OSX (он может быть доступен для Windows через Cygwin). Его легко установить через fink - просто убедитесь, что вы добавили деревья «unstable / main» и «unstable / crypto» в ваш файл /sw/etc/fink.conf и «fink install rrdtool» - ваш путь к счастью.
Я надеюсь, что это проливает свет на некоторые практические применения SNMP.
SNMP в основном используется для мониторинга производительности. Имея это в виду, вы можете использовать SNMP для обнаружения необычного сетевого трафика, если под этим вы подразумеваете «необычно загружен». Просто считывайте правильную метрику каждые x минут, наносите значения в нечто вроде rrdtool и проверяйте графики. Вы также можете время от времени считывать значение и вызывать тревогу (отправить электронное письмо, SMS или что-то подобное, если значение слишком велико).
Тем не менее, настройка SNMP всегда требует определенных затрат времени и денег. Это не решение огонь и забыть, но это является очень гибкий и мощный.
SNMP используется не только для мониторинга и измерения сетевого трафика. SNMP может использоваться и используется для мониторинга состояния интерфейса, использования ЦП и памяти, состояния оборудования в сети и серверного оборудования и т. Д. В моей среде SNMP является стержнем мониторинга каждого работающего оборудования, от серверов до коммутаторов и межсетевых экранов и т. Д.