D

Darknessarrive

Usuario (Uruguay)

Primer post: 7 jun 2011Último post: 7 jun 2011
1
Posts
26
Puntos totales
1
Comentarios
P
Pseudo codigo para monitorear equipos utilizando rrdtool
Apuntes Y MonografiasporAnónimo6/7/2011

Buenas. El post esta dirigido a todos aquellos cuyo trabajo implique el monitoreo de alguna variable o parametro de algun sistema equipo o lo que sea o también para aquellos que les guste jugar con scripts. Una condicion conveniente es q el parámetro sea medible remotamente (creo q esto es obvio). El no lei un carajo please OFF Yo lo he usado para obtener estadisticas de trafico, tensiones de equipos, temperaturas de equipos, consumo electrico entre otras. 1- En linux instalar el paquete rrdtool. (apt-get install rrdtool en ubuntu debian p.e.) 2- Elegir q parametro van a monitorear. (p.e en mi caso temperatura de un equipo) 3- Elegir como lo van a monitorear (SNMP, telnet automatico, daemon, otro) 4-Empezemos Una vez q instalamos el rrdtool es necesario crear una base de datos para ello el comando es el siguiente: rrdtool create NOMBRE_BASE_DATOS.rrd --start `date +%s` --step 300 DS:VARIABLE1:GAUGE:600:0: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 RRA:MIN:0.5:1:600 RRA:MIN:0.5:6:700 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 Que hace el comando de arriba? Crea una BD circular round robin que guardara los valores de la variable VARIABLE1 en la BD NOMBRE_BASE_DE_DATOS.rrd y los valores se guardaran a apartir de "date +%s" cada 5 minutos (--step 300 segundos). La VARIABLE1 es del tipo GAUGE, este es el tipo más comun (existe tambienel tipo COUNTER) El resto de la info le dice a la BD como ordenarse y guardar los datos. Con todo lo que se agrego podremos tener registro de nuestra VARIABLE1 desde ahora 24Hs hacia atras, 1 Semana hacia atras, 1 mes hacia atras y un año hacia atras. El comando date +%s da la fecha como ahora pasaron xxxxxx segundos desde no me acuerdo q fecha de 1970. Si quieren agregar otras variables lo unico que deben hacer es agregar DS:VARIABLE2:GAUGE:600:0:U despues de definir la VARIABLE1 y asi sucesivamente. 5-Obtener el valor de la variable Como dije al principio hay distintas maneras de obtener un valor del parametro a medir segun sea el caso. En mi caso (telecomunicaciones) la mayoria de los equipos sensores son accesibles remotamente o envian mensajes con el protocolo SNMP. Explico medio por arriba lo de SNMP, no es dificil si googlean al toque encuentra + info. Antes de usar snmp deben de tenerlo instalado (en debian ubuntu apt-get install snmp). Los comandos que podemos usar para obtener los valores de las variables son 2: snmpwalk y snmpget. SNMPWALK "snmpwalk -c COMUNIDAD -v 1 IP_DEL_EQUIPO" en comunidad en gral. va public. -v indica la version de SNMP 1 en gral funca. Dependiendo el equipo puede funcionar 2 o 3. El snmpwalk les va a tirar una lista de todos los oids (object identifiers) que el equipo devuelve. Algo asi iso.3.6.1.2.1.2.2.1.21.1 = Gauge32: 0 iso.3.6.1.2.1.2.2.1.21.2 = Gauge32: 1 iso.3.6.1.2.1.2.2.1.22.1 = OID: ccitt.0 iso.3.6.1.2.1.2.2.1.22.2 = OID: ccitt.0 iso.3.6.1.2.1.3.1.1.1.2.1.172.26.24.1 = INTEGER: 2 iso.3.6.1.2.1.3.1.1.1.2.1.172.26.24.3 = INTEGER: 2 iso.3.6.1.2.1.3.1.1.2.2.1.172.26.24.1 = Hex-STRING: 00 22 90 9D D3 7F iso.3.6.1.2.1.3.1.1.2.2.1.172.26.24.3 = Hex-STRING: 00 C0 B7 A4 C5 AE iso.3.6.1.2.1.3.1.1.3.2.1.172.26.24.1 = IpAddress: 172.26.24.1 SNMPGET "snmpwalk -c COMUNIDAD -v 1 IP_DEL_EQUIPO OID_en_CUESTION" El snmpget nos permite traer solo un valor de un OID especifico, si sabemos que nuestra variable esta en el OID iso.3.6.1.2.1.2.2.1.21.2 hariamos "snmpget -c public -v 1 IP_DEL_EQUIPO iso.3.6.1.2.1.2.2.1.21.2" y nos devolveria esto iso.3.6.1.2.1.2.2.1.21.2 = Gauge32: 1 De ahora en adelante supondremos q la variable que queremos medir (VARIABLE1) esta en el oid q usamos recien arriba "iso.3.6.1.2.1.2.2.1.21.2 = Gauge32: 1 " Esto nos dice q es un tipo GAUGE y vale 1 actualmente. 6- Actualizar la BD Una vez que tenemos el valor hay que guardarlo en la BD. Nos interesa obviamente guardar el valor = 1. Tonce' hacemos: "VAR1=$(snmpget -c public -v 1 IP_DEL_EQUIPO iso.3.6.1.2.1.2.2.1.21.2 | awk '{print $4}' )" No voy a explicar en detalle todoooooooo lo q se puede hacer con awk. Basicamente aqui le estamos diciendo q nos queremos quedar con la fila 4 de la salida del comando snmpget (por defecto als columnas las delimitan los espacios). El valor (1) se lo asignamos a la variable VAR1. Para actualizar la bd hacemos lo siguiente: rrdtool update NOMBRE_BASE_DATOS.rrd $NOW:$VAR1 Donde la variable NOW vale NOW=$(date +%s). Aqui lo q hacemos es actualizar la bd con el valor de la variable VAR1 en la variable VARIABLE1 en este momento. 7- Ahora lo anterior hay q hacerlo periodico cada 5minutos: Para esto usen el lenguaje q + les guste, yo uso bash y perl. Nos armamos los siguientes scripts: crear_bd.sh ============== #! /bin/bash rrdtool create NOMBRE_BASE_DATOS.rrd --start `date +%s` --step 300 DS:VARIABLE1:GAUGE:600:0: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 RRA:MIN:0.5:1:600 RRA:MIN:0.5:6:700 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 ============== actualizar_bd.sh =============== #! /bin/bash NOW=`date +%s` VAR1=$(snmpget -c public -v 1 IP_DEL_EQUIPO iso.3.6.1.2.1.2.2.1.21.2 | awk '{print $4}' ) rrdtool update NOMBRE_BASE_DATOS.rrd $NOW:$VAR1 =============== principal.pl ================== #! /usr/bin/perl `sh crear_bd.sh`; sleep(1); ## Es para evitar un warning en la 1a actualizacion de la BD. $n=1; do Bucle infinito { `sh actualizar_bd.sh`; sleep(300); #Espero los 5 minutos } until ($n==3) 8- Listo el pollo ejectuan el script principal.pl y cada 5 minutos va a ir a buscar el valor de la Variable y va a actualizar la bd. Ahora la grafica: el comando para generarla es el siguiente: rrdtool graph "NOMBRE_DE_LA_GRAFICA.png" -s $24HS_ATRAS -e $NOW -a PNG --title "Titulo de la grafica" --vertical-label="Unidad de medida de la variable" DEF:var1=NOMBRE_DE_LA_BASE_DATOS.rrd:VARIABLE1:AVERAGE LINE1:var1#DF0101:"LEYENDA del grafico". Aqui generaremos la grafica NOMBRE_DE_LA_GRAFICA.png que mostrara datos de la VARIABLE1 desde ahora (NOW=date+%s) hasta 24Hs hacia atras. En bash NOW=`date +%s` 24Hs_ATRAS=$(($NOW-86400)) #86400=24*60*60 un dia en segundos Si quieren una semana atras ponen $NOW-86400*7 un me atras $NOW-86400*30 un añoa atras $NOW-86400*365 LINE1 indica que la grafica sera de trazo (1 2 o 3 1 lo mas fino 3 mas grueso) puede ser AREA lo que producira un area por debajo del valor de la variable. Les dejo 2 imagenes (no son mias xq me embola subirlas a algun servidor): Con LINE Con AREA Para los que esten en este tema y quieran intercambiar experiencias o dudas por MP, espero que les sea util. TARINGA =T! = INTELIGENCIA COLECTIVA Saludos

26
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.