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

Desventajas de mrtg



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:

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