Как мне использовать SNMP

Я беру класс управления сетью, и главная тема - SNMP. Хотя мой учитель хорошо объясняет теоретическую часть SNMP ( V1,V2,V3, RMON, MIBS и т. Д.), Он не очень хорошо объясняет практические вещи, такие как, как я могу использовать только что собранную информацию или как я использую SNMP обнаруживать перегрузку или необычный трафик в сети. Любая информация по этому вопросу будет оценена.

3 ответа

Решение

Я часто использую 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 - это основа контроля за каждым работающим оборудованием, от серверов до коммутаторов, межсетевых экранов и т. Д.

Другие вопросы по тегам