Introducion
Quizá una de las herramientas más conocidas para la monitorizacion del tráfico y parametros similares en redes donde el numero de servidores no es muy grande pueda ser mrtg, mientras que para redes de tamaño considerable, las opciones sean :Bigbrother:, :OpenNMS:.
En este articulo no voy a centrarme en esos monstruos de la monitorizacion, sino en como controlar los servidores de redes pequeñas y ver que alternativas hay al conocido mrtg.
MRTG
El mrtg es seguramente uno de los programas mas populares y veteranos en este contexto. Es un programa bastante bueno, pero que tiene algunos problemas, aunque es posible que se subsanen en la futura serie 3.
Ventajas de mrtg
- Es un programa realmente popular, asi que es bastante sencillo encontrar ayuda o scripts ya creados y listos para recoger datos de los diferentes elementos que queramos tener bajo control.
- Esta escrito en perl. aso que es un programa que funciona en multiples plataformas, incluyendo Windows NT/2000 (Los scripts de terceros suelen ser especificos para una plataforma concreta)
- No es complicado de configurar, pudiendo tener una configuracion funcional en menos de 30 minutos
- Permite establecer alarmas
- Soporta IPv6
- La recogida de datos es altamente configurable, puediendo usar SNMP o plugins
Desventajas de mrtg
- En maquinas actuales quiza no sea algo que se note demasiado, pero el hecho de estar escrito en perl y que gran parte de los scripts de recoleccion de datos tambien esten en perl hace que en maquinas pequeñas el rendimiento se resienta.
- Es un programa monolitico y secuencial. Incluso con las partes que hay escritas en C, el programa es lento. El codigo del programa principal son 1700 lineas, donde se mezcla el parser del archivo de configuracion, las rutinas de SNMP, la gestion del log clasico y de las bases de datos round-robib. Tras la recoleccion de los datos, se llama inmediatamente a rateup, programa encargado de actualizar los logs y generar las graficas. Este planteamiento hace que las graficas se generen siempre, vayan a ser vistas o no y que haya que procesa una parte del mrtg.pl que quiza ni siquiera vayamos a usar. Parte del problema de cargar cada X minutos el interprete de perl y partes del codigo que no se vayan a usar, puede amortiguarse usando el mrtg en modo daemon.
- No es cliente/servidor. Bien, este problema se puede paliar de diferentes formas: teniendo un mrtg central y N daemons de snmp corriendo en el resto de maquinas, o bien teniendo varios mrtg locales a cada maquina y sincronizando los cambios en las graficas mediante rsync para poder verlos en la "consola de administracion"
- Las graficas que hace estan "desaprovechadas", por decirlo de alguna manera. Rateup solo pinta dos variables en un grafico, tipicamente bytes/s de entrada y de salida debido al origen del programa, asi que si necesitamos poner mas variables (por ejemplo, controlar el tamaño de 3 particiones de un HDD), deberemos usar dos graficas.
- Solo puede usarse con valores enteros, por lo que para usar valores en coma flotante, como la carga de una maquina tal y como la ofrece `uptime`, hay que pasarlo a coma fija.
Aqui tenemos unos datos sobre lo que cuesta ejecutar mrtg+rateup en una SS5 a 85 Mhz. El mrtg esta configurado leer 4 parametros: carga (programa en C), numero de conexiones (script wen awk), trafico de entrada/salida (script en awk) y consumo de memoria (script en awk).
load average: 0.13, 0.18, 0.12
real 0m27.607s user 0m23.850s sys 0m2.860s
load average: 0.54, 0.27, 0.15
Aun a pesar de estos problemas, mrtg sigue siendo un programa muy valido y que incluso lo podemos ver en la :web_de_espanix:
Tenemos un articulo sobre como configurar mrtg con snmp escrito por Julher en :una_noticia_de_libertonia:
Alternativas
Como hemos visto, parte del problema del mrtg es la forma en la que trata/guarda los datos recolectados. Por eso mismo, el autor de mrtg creó rrdtool. Tal y como lo define el autor, rrdtool es una reimplementacion de las carateristicas graficas y del tratamiento de los datos del mrtg, asi que las alternativas que voy a mencionar se apoyan todas en esta herramienta.
mrtg
El mrtg desde hace no mucho es capaz de usar rrdtools. Solo es necesario indicarlo en el archivo de configuracion. La documentacion sobre como hacer estos cambios esta en este documento :migracion_a_rrdtool: Puesto que ahora la generacion de las graficas se puede hacer cuando queramos, necesitamos algun script adicional. Existen al menos 2 CGI's para generar las graficas bajo demanda: :mrtg-rrd:
Tambien hay webs con tutoriales para configurar :14all:
Para poder migrar los datos del formato antiguo al nuevo formato de rrdtool tenemos esta web donde lo :explican_paso_a_paso:
:lrrd:
Esta aplicacion tambien esta escrita en perl, pero tiene una diferencia importante con mrtg: Es cliente/servidor. El servidor se conecta a los clientes, recoge los datos que estos proporcionan y los almacena en la BBDD. Esta completamente basado en plugins, asi que podemos monitorizar cualquier tipo de variable que se nos ocurra, incluyendo variables de SNMP mediante las utilidades de linea de comandos snmpwalk, snmpget. En principio funciona en Linux, FreeBSD y Solaris.
:symon:
Esta aplicacion esta escrita integramente en C, no es extensible mediante plugins, no soporta SNMP y solo funciona en OpenBSD ya que hace uso intensivo de sysctl). Tiene una arquitectura cliente/servidor, al igual que lrrd. El programa de monitorizacion permite controlar la cpu, la memoria, los interfaces de red, la E/S del HDD, estadisticas de Packet filter, estado de procesos y un par mas de variables y el periodo de muestreo de las variables es fijo, siendo de 5 segundos.
La configuracion es bastante sencilla. Mi /etc/symon es:
monitor cpu(0), mem, if(ne3)
stream to 127.0.0.1 2100
Con esto controlamos la cpu, la memoria y el interfaz ne3, el que me conecta a internet. Los datos los envio a localhost:2100, que es donde estara el symux escuchando. La configuracion del muxer es tambien bastante simple:
mux 127.0.0.1 2100
source 127.0.0.1
accept cpu(0), mem, if(ne3)
write cpu(0) in "/var/symon/hertz/cpu0.rrd"
write mem in "/var/symon/hertz/mem.rrd"
write if(ne3) in "/var/symon/hertz/if_ne3.rrd"
Aqui deciemos que datos son los que vamos a recoger de la fuente localhost y en que base de datos rrd vamos a almacenarlos. Esa base de datos debe estar creada previamente, sino, symux se quejara armagamente.
En /usr/local/share/symon/ tenemos un script llamado c_smrrds.sh que nos ayudara a crear la bbdd. Este script crea una bbdd con estas caracteristicas:
- Muestras para 2 dias tomadas de 5 en 5 segundos
- Muestras para 14 dias, tomadas de 30 en 30 minutos
- Muestras para 50 dias, tomadas de 2 en 2 horas
- Muestras para 600 dias, tomadas de 1 en 1 dia
Para la generacion de las graficas, incluyen un pequeños script, /usr/local/libexec/symon-graph.sh. Lo primero que hice fue dividir el archivo en dos, funcions.sh y el propio symon-graph.sh. En el symon-graph.sh he quitado toda la parte de HTML y funciones, quedandome esto:
#!/usr/local/bin/bash
. /usr/local/libexec/functions.sh
PNG_DIR=/var/www/htdocs/stats
RRD_DIR=/var/symon
RRD_COMMON="-a PNG"
RDD_TIME="-s -2day"
HTML=$ PNG_DIR /index.html
BASE_URL=/stats
DOMAIN=.micasa.es
rm -f $ PNG_DIR /*.png
for d in $ RRD_DIR /*; do
HOST=$(basename $d)
if [ -f $ RRD_DIR /$ HOST /cpu0.rrd ]; then
graphcpu cpu0.rrd "-w 768 -h 400" _cpu_large.png "-s -2day"
graphcpu cpu0.rrd "-w 768 -h 400" _cpu_large2.png "-s -14day"
fi
if [ -f $ RRD_DIR /$ HOST /mem.rrd ]; then
graphmem mem.rrd "-w 768 -h 400" _mem_large.png
fi
for f in $ RRD_DIR /$ HOST /if_*.rrd; do
IFACE=$(echo $(basename $f) sed "s/\.rrd//g")
graphif $(basename $f) "-w 768 -h 400" _$ IFACE _large.png "-s -2day"
graphif $(basename $f) "-w 768 -h 400" _$ IFACE _large2.png "-s -14day"
done
done
Tambien he añadido un par de cosas mas a la funcion graphif() para que me de informacion sobre el numero de paquetes enviados, y el valor máximo, minimo y último del trafico de entrada y salida y he añadido un parametro para poder especificar cuanto tiempo quiero representar (tambien hice los mismo para la funcion que controla la grafica de la CPU):
graphif()
i=$(echo $1 sed "s/\.rrd//g" sed "s/if_//g")
/usr/local/bin/rrdtool graph $ PNG_DIR /$ HOST $3 \
--title "Network interface $i on $ HOST $ DOMAIN " -v "Bits/s" \
$ RRD_COMMON $4 $2 \
DEF:in=$ RRD_DIR /$ HOST /$1:ibytes:AVERAGE \
DEF:out=$ RRD_DIR /$ HOST /$1:obytes:AVERAGE \
DEF:inp=$ RRD_DIR /$ HOST /$1:ipackets:AVERAGE \
DEF:outp=$ RRD_DIR /$ HOST /$1:opackets:AVERAGE \
DEF:coll=$ RRD_DIR /$ HOST /$1:collisions:AVERAGE \
CDEF:inb=in,8,\* \
CDEF:outb=out,8,\* \
CDEF:ioutb=0,outb,- \
CDEF:iinp=inp,1000,\* \ <-- multiplica el numero de paquetes por 1000
(el numero de paquetes es pequeño, y la escala del trafico esta en el orden de kilobits y
si, es notacion RPN ;)
HRULE:0#000000 \
HRULE:128000#FF0000 \ <-- asi se si rebaso el limite contratado
HRULE:-64000#FF0000 \ <-- idem, pero por abajo
COMMENT:" min avg max last\n" \
AREA:inb#00FF00:"in " \
GPRINT:inb:MIN:" %4.2lf %sbps " \ <-- valor minimo del trafico entrada
GPRINT:inb:AVERAGE:" %4.2lf %sbps " \ <-- valor medio
GPRINT:inb:MAX:" %4.2lf %sbps " \ <-- valor maximo
GPRINT:inb:LAST:" %4.2lf %sbps \n" \ <-- ultima muestra
AREA:ioutb#00FFFF:"out" \
GPRINT:out:MIN:" %4.2lf %sbps " \
GPRINT:outb:AVERAGE:" %4.2lf %sbps" \
GPRINT:outb:MAX:" %4.2lf %sbps " \
GPRINT:outb:LAST:" %4.2lf %sbps \n" \
LINE1:iinp#FF8C00:"in packet" \
GPRINT:inp:MIN:" %4.2lf pps" \
GPRINT:inp:AVERAGE:" %4.2lf ppb" \
GPRINT:inp:MAX:" %4.2lf pps" \
GPRINT:inp:LAST:" %4.2lf pps" \
Tambien modifique el ancho, para que fuera de 768 pixeles en lugar de 1000.
El tiempo que tarda mi 486dx33 en generar los 3 graficos es:
[root@hertz: ]uptime;time /usr/local/libexec/symon-graph.sh; uptime
load averages: 0.19, 0.27, 0.26
49.79 real 42.03 user 2.69 sys
load averages: 0.77, 0.42, 0.32
Aqui tenemos un ejemplo: :IMAGEN_NE3:
La presentacion en HTML se puede hacer como a cada uno le guste. Con CSS se puede hacer cosas muy interesantes, como un :menu_sencillo: por si se necesitan controlar varias maquinas
:orca:
Este programa esta escrito en perl y es originario de Solaris. En octubre de 2003, entro en los ports de freebsd una version de orca para este SO
:spong:
Podriamos decir que es el hermano pequeño de BigBrother. Tambien dispone de alertas configurables.
RRDTOOL
Esta es la herramienta que se encarga de crear las graficas y de almacenar los datos. Hay un texto bastante bueno en la :web_de_bulma:
Raúl Ocaña y otros