Freqüentemente, uso o SNMP em combinação com o rrdtool para fornecer gráficos de visão geral, informando sobre o tráfego que passa pelos roteadores em minha rede e o uso da CPU / memória dos servidores. Uma ferramenta de linha de comando comum é o 'snmpget', que captura e produz uma parte específica dos dados fornecidos por um dispositivo habilitado para SNMP.
Por exemplo, para obter os octetos transferidos através do meu roteador Cisco, eu uso:
snmpget -v 1 -c public $ roteador_ip_address IF-MIB :: ifOutOctets.3 | egrep -o "[0-9] + $"
e depois canaliza a saída para o rrdtool. Em dispositivos de consumo, eu frequentemente encontrei um suporte para SNMP que na verdade não existe (o chip pode estar lá, mas não é realmente gravado no firmware) - então isso é definitivamente algo para se ter cuidado. Por exemplo, o roteador Netgear que estava em funcionamento antes que este Cisco suportasse o SNMP, mas na verdade não produzia nenhum dado.
Para descobrir quais dados estão disponíveis para um determinado dispositivo, você pode usar o comando snmpwalk ou verificar os MIBs. Descobri, no entanto, que a verificação dos MIBs é praticamente inútil, já que a maioria dos dispositivos que eu encontrei tendem a usar seus próprios MIBs personalizados (ou não anunciam quais suportam). Um exemplo do comando snmpwalk é; snmpwalk -c public $device_ip_address
Se você está curioso sobre meu gráfico rrdtool, aqui está um exemplo da parte do meu script (que é executado a cada cinco minutos) para representar graficamente o tráfego do meu roteador.
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
}
Observe o pouco sobre o script sendo executado a cada cinco minutos. Para a vida de mim, em todos os meus anos usando rrdtool, eu nunca tomei o tempo para descobrir as 'sintonias' certas para os RRAs para nada além de um intervalo de cinco minutos. Se você acertar as regulagens, você acabará com gráficos completamente vazios e um senso de perplexidade. Então, pela minha experiência, use apenas intervalos de cinco minutos (execute seu script de inserção a cada cinco minutos do cron), a menos que você queira dedicar algum tempo para descobrir os RRAs corretos para outra coisa.
Eu também queria ressaltar que, enquanto o rrdtool é uma ferramenta incrível para sistemas Linux, ele também está disponível no OSX (pode estar disponível para o Windows através do Cygwin). É uma instalação fácil através do fink - apenas certifique-se de adicionar as árvores "unstable / main" e "unstable / crypto" ao seu arquivo /sw/etc/fink.conf e "fink install rrdtool" até ficar feliz.
Espero que isso lance alguma luz sobre alguns usos práticos do SNMP.