如何使用 SNMP

如何使用 SNMP

我正在上网络管理课,主要内容是 SNMP。虽然我的老师擅长解释 SNMP 的理论部分(V1、V2、V3、RMON、MIBS 等),但他不擅长解释实际内容,例如如何使用我刚刚收集的信息或如何使用 SNMP 检测网络上的拥塞或异常流量。任何有关这方面的信息都将不胜感激。

答案1

我经常将 SNMP 与 rrdtool 结合使用,以提供概览图,让我了解网络上路由器的流量以及服务器的 CPU/内存使用情况。常用的命令行工具是“snmpget”,它将抓取并输出启用 SNMP 的设备提供的特定数据。

例如,为了通过我的 Cisco 路由器传输八位字节,我使用:

snmpget -v 1 -c 公共 $router_ip_address IF-MIB::ifOutOctets.3 | egrep -o “[0-9]+$”

然后将输出导入 rrdtool。在消费级设备中,我经常遇到所谓的 SNMP 支持,但实际上并不存在(芯片可能存在,但实际上并未写入固件)——所以这绝对是需要注意的事情。例如,在 Cisco 路由器之前使用的 Netgear 路由器“支持”SNMP,但实际上没有输出任何数据。

要确定给定设备有哪些数据可用,您可以使用 snmpwalk 命令或检查 MIB。但是,我发现检查 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 上使用(它可能可以通过 Cygwin 在 Windows 上使用)。它可以通过 fink 轻松安装 - 只需确保将“unstable/main”和“unstable/crypto”树添加到您的 /sw/etc/fink.conf 文件中,然后“fink install rrdtool”即可。

我希望这可以为 SNMP 的一些实际用途提供一些启示。

答案2

SNMP 主要用于性能监控。考虑到这一点,您可以使用 SNMP 来检测异常网络流量(如果您指的是“异常繁忙”)。只需每 x 分钟读取一次适当的指标,在​​ rrdtool 等工具中绘制值并检查图表即可。您还可以不时读取值并触发某种警报(如果值过高,则发送电子邮件、短信或类似的东西)。

尽管如此,配置 SNMP 总是需要投入一定程度的时间和金钱。这不是一个一劳永逸的解决方案,但它非常灵活和强大。

答案3

SNMP 的用途远不止监控和测量网络流量。SNMP 可以用于监控接口状态、CPU 和内存使用情况、网络和服务器设备的硬件状态等。在我的环境中,SNMP 是监控每台硬件运行的关键,从服务器到交换机再到防火墙等。

相关内容