<body>

Sitios web relacionados: PingBlog | Fotos

sábado, enero 07, 2006

Echando código: ¿Como preguntar por los valores correctos en SNMP?

SNMP no tiene nada de simple; Es un protocolo bastante complejo (además de que tiene fama de ser inseguro, lo cual es una verdad a medias), el cual es sin embargo el estandar en muchos equipos que hacen posible que las redes funcionen (como routers, switches e inclusive aplicaciones como bases de datos).

Si ya viene instalado por omisión entonces vale la pena entendero y explotarlo, ¿no es así?

No es la primera vez que menciono algo de el protocolo en este Blog; Ya les había comentado anteriormente como hacerlo desde Java, Perl, Linux (usando Net-SNMP) y hasta Mbrowse.

Pero mejor les cuento porqué empecé este articulo; Recientemente una persona me contactó por medio de el blog y me preguntó lo siguiente:




Subject: Ayuda
Date: Thu, 5 Jan 2006 11:53:24 -0400
Hola vi tu pag y me gustaria saber si me puedes ayudar con algo. Estoy elaborando un sistema de monitoreo y estoy comparando mis graficas con las de mrtg y no son nada parecidas, el problema esta en que no se como calcular el trafico, ahorita me devuelven valores similares a estos:
[root@aplication temp]# snmpwalk -v1 10.0.1.239 -c public interfaces.ifTable.ifEntry.ifInOctets
IF-MIB::ifInOctets.1 = Counter32: 37486946
IF-MIB::ifInOctets.2 = Counter32: 843247075

lo que hago es tomar muestras cada 5min y restar el valor actual menos el anterior y luego lo divido entre 3600seg pero los valores no son los correctos, se que eso viene en octetos y me gustaria saber si sabes como calcularlo.

Agradecido de Antemano.
Atte
Ing. XXXX


Así que la respuesta al amigo Ingeniero: cuando te refieres a trafico, ¿estas hablando de ancho de banda? En particular lo que estás midiendo son sólo los paquetes que han sido recibidos por la interfaz de red, pero no estás tomando en cuanta los errores o los paquetes transmitidos, por ejemplo. La variable es de tipo "counter" lo que significa que está acumulando los valores que recibe la interfaz, desde que fué puesta en funcionamiento; Lo otro es que como tu mismo dijiste, está expresada en octetos.

Por lo menos, mira lo que sale usando ifconfig en mi máquina:
[root@localhost ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:02:3F:2F:38:D2
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::202:3fff:fe2f:38d2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:123 errors:0 dropped:0 overruns:0 frame:0
TX packets:808 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17772 (17.3 KiB) TX bytes:177241 (173.0 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4545 errors:0 dropped:0 overruns:0 frame:0
TX packets:4545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2227041 (2.1 MiB) TX bytes:2227041 (2.1 MiB)

Y snmpwalk:
[root@localhost ~]# snmpwalk -v1 localhost.localdomain -c public interfaces.ifTable.ifEntry.ifInOctets
IF-MIB::ifInOctets.1 = Counter32: 2227113
IF-MIB::ifInOctets.2 = Counter32: 17772
IF-MIB::ifInOctets.3 = Counter32: 535157
IF-MIB::ifInOctets.4 = Counter32: 0
Siempre antes de ponerse a sacar gráficas, es mejor preguntarse que es lo que queremos saber. por ejemplo, si lo que quieres es calcular cuanto ancho de banda está disponible en la interfaz, puede hacer algo como esto:

Ancho de banda en la interfaz = ((Bytes recibidos + Bytes enviados) * 8 ) / Velocidad de la interfaz

De nuevo, mi laptop como ejemplo:

[josevnz@localhost ~]$ for oid in interfaces.ifTable.ifEntry.ifOutOctets.2 interfaces.ifTable.ifEntry.ifInOctets.2 interfaces.ifTable.ifEntry.ifSpeed.2; do
> snmpwalk -v1 -c public localhost.localdomain $oid
> done
IF-MIB::ifOutOctets.2 = Counter32: 964287
IF-MIB::ifInOctets.2 = Counter32: 359239
IF-MIB::ifSpeed.2 = Gauge32: 100000000
O sea que el ancho de banda utilizado por mi interfaz eth0 es:
[josevnz@localhost ~]$ echo "scale=5; (((964287+372892)*8)/100000000.0)"|bc
.10697
%10.69, ¡nada en realidad!. Note que la formula anterior es incorrecta para una interfaz full-duplex (para ello deberá medir por separado paquetes recibidos menos paquetes enviados y de allí puede sacar las cuentas).

Para aquellos un poco nuevos al tema, la mejor manera de entender como funciona es:
Volviendo al punto... deberías buscarte el MIB de el aparato que estas tratando de monitorear, aunque hay un MIB que todos los dispositivos conectados a la red implementan (Creo que es el MIB II, RFC 1213). La forma más fácil es usar un programa como MIB browser para caminar por los OID disponibles en el aparato, y así sabes exactamente que buscar (no recuerdo cuales son los OID). Sino busca aquí.

Por otro lado (y mi recomendación final) es que no reinventes la rueda; Deberías probar utilizar un programa como OpenNMS el cual te permite hacer este tipo de cosas y muchas más.

Finalmente, los invito a buscar el la sección de código SNMP de KodeGeek en Source Forge, Quizas haya algo allí que puedas utilizar (y es grátis).

Buscar en Technorati:

7 Comentarios:

Anonymous carlos dijo que...

Como ya dije antes, no suelo utilziar esta información que amablemente desarrollas y plasmas aquí, pero espero que haya personas que la utilicen.

Están muy bien estructuradas y "noveladas".

Un saludo, como siempre

/

5:59 PM (enlace permanente)  
Anonymous Anónimo dijo que...

te falta la h de http en el enlace hacia cisco

2:36 AM (enlace permanente)  
Anonymous Anónimo dijo que...

Hola a todos!!

Alguien me podrìa ayudar diciendo cómo hago para monitorear el tiempo de respuesta de una ethernet de un RAS Cisco??
Cuál es la OID que debo de utilizar?, la que mas se me parece es IfSeep, pero no estoy seguro..
Muchas gracias por la colaboracion que me puedan prestar..!!

1:58 PM (enlace permanente)  
Blogger KodeGeek dijo que...

Anonimo,

¿A que te refieres con "tiempo de respuesta"? Por ejemplo, podrías obtener simplemente haciendo un "ping" a cada una de las interfaces, y allí ya tienes el "round time trip".

No entiendo bien tu pregunta. Lo otro es que quizas deberías revisar el manual de Cisco, ellos te dicen que MIBS son implementados por el equipo.

Mis dos centavos,

2:05 PM (enlace permanente)  
Anonymous Anónimo dijo que...

Hola, estoy intentando desarrollar un agente snmp sobre equipos Winnt Workstation 4.0 y ando un poco perdido si alguien puede ponerse en contacto conmigo para hecharme una mano, pueden hacerlo por juantxojif@hotmail.com
Saludos desde españa.

5:44 AM (enlace permanente)  
Anonymous Anónimo dijo que...

Hola, estoy tratando de implementar a traves de snmp una forma de obtener una lista de todas las llamadas que se producen en mis routers cisco 2600.
cada router tiene dos linea T1 con 48 fonos, y quiero mantener un registro de la cantidad de llamadas que efectua cada telefono. Es posible efectuar este monitoreo??. Hay forma de hacerlo a traves de un agente SNMP?? por favor cualquier ayuda sera de mucha utilidad.
Ernesto.
Lima - Peru

3:38 PM (enlace permanente)  
Anonymous Anónimo dijo que...

Estoy tratando de monitorear unos switches con snmp, pero lo que no logro hacer es saber, si estan prendidos o no...
alguien sabe como se podría hacer...
Oscar
México...

2:24 AM (enlace permanente)  

Publicar un comentario en la entrada

Enlaces a este articulo:

Crear un vínculo

<< Regresar