


 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



 NNNNAAAAMMMMEEEE
      rrdtutorial - Tutorial sobre RRDtool por Alex van den Bogaerdt
      (Traducido al castellano por Jess Couto Fandio)

 DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
      RRDtool es un programa escrito por Tobias Oetiker con la colaboracin
      de muchas personas en diversas partes del mundo. Alex van den Bogaerdt
      escribi este documento para ayudarte a entender que es RRDtool y que
      es lo que puede hacer por ti.

      La documentacin que viene con RRDtool puede ser demasiado tcnica
      para algunos. Este tutorial existe para ayudarte a entender las
      funciones bsicas de RRdtool. Debe servirte de preparacin para leer
      la documentacin, y adems explica algunas ideas generales sobre
      estadstica, con un enfoque particular hacia las redes.

 TTTTUUUUTTTTOOOORRRRIIIIAAAALLLL
      IIIImmmmppppoooorrrrttttaaaannnntttteeee

      Por favor, no te adelantes en la lectura de este documento! Esta
      primera parte explica los fundamentos bsicos. Puede ser aburrida,
      pero si te saltas los fundamentos, los ejemplos no te van a tener
      mucho sentido.

      QQQQuuuu eeeessss RRRRRRRRDDDDttttoooooooollll????

      RRDtool significa "herramienta de bases de datos en round robin".
      "Round robin" es una tcnica que implica un nmero fijo de datos, y un
      apuntador al elemento ms reciente. Piensa en un circulo con unos
      cuantos puntos dibujados alrededor del borde; estos puntos son los
      lugares donde se pueden guardar los datos. Dibuja ahora una flecha
      desde el centro del crculo a uno de los puntos; este es el apuntador.
      Cuando se lee o escribe el dato actualmente apuntado, la flecha se
      mueve al prximo elemento. Como estamos en un crculo, no hay ni
      principio ni fin; siempre puedes seguir, eternamente. Al cabo de un
      tiempo ya se habrn usado todas las posiciones disponibles y el
      proceso empieza a reutilizar las antiguas. De esta forma, la base de
      datos no crece en tamao y, por lo tanto, no requiere ningn
      mantenimiento.  RRDtool trabaja con estas bases de datos en
      "round-robin", guardando y recuperando datos de ellas.

      QQQQuuuu ddddaaaattttoooossss ppppuuuueeeeddddeeeennnn gggguuuuaaaarrrrddddaaaarrrrsssseeee eeeennnn uuuunnnnaaaa RRRRRRRRDDDD????

      Lo que se te ocurra. Debes poder medir algn valor dado en distintos
      momentos en el tiempo y proveer a RRDtool de estos valores. Si puedes
      hacer esto, RRDtool puede guardar los datos. Los valores tienen que
      ser numricos, pero no necesariamente enteros, como en MRTG.

      Muchos ejemplos mencionan SNMP, que es el acrnimo de "Simple Network
      Management Protocol" (Protocolo Simple de Administracin de Redes). Lo



                                    - 1 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      de "simple" se refiere al protocolo - no se supone que sea fcil
      administrar o monitorizar una red. Cuando hayas terminado con este
      documento, debers saber lo suficiente para entender cuando oigas a
      otros hablar sobre SNMP. Por ahora, simplemente considera a SNMP como
      una forma de preguntarle a los dispositivos por los valores de ciertos
      contadores que mantienen. Son estos valores de estos contadores los
      que vamos a almacenar en la RRD.

      QQQQuuuu ppppuuuueeeeddddoooo hhhhaaaacccceeeerrrr ccccoooonnnn eeeessssttttaaaa hhhheeeerrrrrrrraaaammmmiiiieeeennnnttttaaaa????

      RRDtool se deriva de MRTG (Multi Router Traffic Grapher, Graficador De
      Trfico de Mltiples Enrutadores).  MRTG empez como un pequeo script
      para poder graficar el uso de una conexin a la Internet. Luego
      evolucion, permitiendo graficar otras fuentes de datos, como
      temperatura, velocidad, voltajes, cantidad de pginas impresas, etc...
      Lo ms probable es que empieces a usar RRDtool para guardar y procesar
      datos conseguidos a travs de SNMP, y que los datos sean el nmero de
      bytes (o bits) transferidos desde y hacia una red u ordenador. RRDtool
      te permite crear una base de datos, guardar los datos en ellas,
      recuperarlos y crear grficos en formato GIF o PNG, para mostrarlos en
      un navegador web. Esas imgenes dependen de los datos que hayas
      guardado y pueden, por ejemplo, ser un sumario del promedio de uso de
      la red, o los picos de trfico que ocurrieron.  Tambin lo puedes usar
      para mostrar el nivel de las mareas, la radiacin solar, el consumo de
      electricidad, el nmero de visitantes en una exposicin en un momento
      dado, los niveles de ruido cerca del aeropuerto, la temperatura en tu
      lugar de vacaciones favorito, o en la nevera, o cualquier otra cosa
      que te puedas imaginar, mientras tengas algn sensor con el cual medir
      los datos y seas capaz de pasarle los nmeros a RRDtool.

      YYYY ssssiiii aaaannnn tttteeeennnnggggoooo pppprrrroooobbbblllleeeemmmmaaaassss ddddeeeessssppppuuuussss ddddeeee lllleeeeeeeerrrr eeeesssstttteeee ddddooooccccuuuummmmeeeennnnttttoooo????

      Lo primero, lelo otra vez!. Puede que te hayas perdido de algo.  Si
      no puedes compilar el cdigo fuente y usas un sistema operativo
      bastante comn, casi seguro que no es la culpa de RRDtool.
      Probablemente consigas versiones pre-compiladas por la Internet. Si
      provienen de una fuente confiable, salas. Si, por otro lado, el
      programa funciona, pero no te da los resultados que tu esperabas,
      puede ser un problema con la configuracin; revsala y comprala con
      los ejemplos.

      Hay una lista de correo electrnico y una archivo de la misma. Lee la
      lista durante unas cuantas semanas, y busca en el archivo. Es
      descorts hacer una pregunta sin haber revisado el archivo; puede que
      tu problema ya haya sido resuelto antes! Normalmente ocurre as en
      todas las listas de correo, no slo esta. Examina la documentacin que
      vino con RRDtool para ver donde est el archivo y como usarlo.

      Te sugiero que te tomes un momento y te subscribas a la lista ahora
      mismo, enviando un mensaje a rrd-users-request@list.ee.ethz.ch con



                                    - 2 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      ttulo "subscribe". Si eventualmente deseas salirte de la lista, enva
      otro correo a la misma direccin, con ttulo "unsubscribe".

      CCCCmmmmoooo mmmmeeee vvvvaaaassss aaaa aaaayyyyuuuuddddaaaarrrr????

      Dndote descripciones y ejemplos detallados. Asumimos que el seguir
      las instrucciones en el orden en que se presentan aqu te dar
      suficiente conocimiento  de RRDtool como para que experimentes por tu
      cuenta. Si no funciona a la primera, puede que te hallas saltado algo;
      siguiendo los ejemplos obtendrs algo de experiencia prctica y, lo
      que es ms importante, un poco de informacin sobre como funciona el
      programa.

      Necesitars saber algo sobre nmeros hexadecimales. Si no, empieza por
      leer "bin_dec_hex" antes de continuar.

      TTTTuuuu pppprrrriiiimmmmeeeerrrraaaa bbbbaaaasssseeee ddddeeee ddddaaaattttoooossss eeeennnn rrrroooouuuunnnndddd----rrrroooobbbbiiiinnnn

      En mi opinin, la mejor forma de aprender algo es hacindolo. Por qu
      no empezamos ya? Vamos a crear una base de datos, poner unos cuantos
      valores en ella y extraerlos despus. La salida que obtengas debe ser
      igual a la que aparece en este documento.

      Empezaremos con algo fcil, comparando un coche con un enrutador, o
      por decirlo de otra forma, comparando kilmetros con bits y bytes. A
      nosotros nos da lo mismo; son unos nmeros obtenidos en un espacio de
      tiempo.

      Asumamos que tenemos un dispositivo que transfiere bytes desde y hacia
      la Internet. Este dispositivo tiene un contador que empieza en 0 al
      encenderse y se incrementa con cada byte transferido. Este contador
      tiene un valor mximo; si ese valor se alcanza y se cuenta un byte
      ms, el contador vuelve a empezar desde cero. Esto es exactamente lo
      mismo que pasa con muchos contadores, como el cuentakilmetros del
      coche. En muchas de las disertaciones sobre redes se habla de bits por
      segundo, as que empezaremos por acostumbrarnos a esto. Asumamos que
      un byte son 8 bits y empecemos a pensar en bits y no en bytes. El
      contador, sin embargo, sigue contando en bytes! En el mundo SNMP, la
      mayora de los contadores tienen una longitud de 32 bits. Esto
      significa que pueden contar desde 0 hasta 4294967295. Usaremos estos
      valores en los ejemplos. El dispositivo, cuando le preguntamos,
      retorna el valor actual del contador. Como sabemos el tiempo
      transcurrido desde la ltima vez que le preguntamos, sabemos cuantos
      bytes se han transferido "***en promedio***" por segundo. Esto no es
      muy difcil de calcular; primero en palabras, luego en operaciones:

      1.  Toma el valor actual del contador y rstale el valor anterior

      2.  Haz lo mismo con la fecha




                                    - 3 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      3.  Divide el resultado del paso (1) por el resultado del paso (2).
          El resultado es la cantidad de bytes por segundo. Si lo
          multiplicas por ocho obtienes la cantidad de bits por segundo

        bps = (contador_actual - contador_anterior) / (fecha_actual - fecha_anterior) * 8

      Para algunos ser de ayuda traducir esto a un ejemplo automotor.  No
      prueben estas velocidades en la prctica, y si lo hacen, no me echen
      la culpa por los resultados.

      Usaremos las siguientes abreviaturas:

       M:    metros
       KM:   kilmetros (= 1000 metros).
       H:    horas
       S:    segundos
       KM/H: kilmetros por hora
       M/S:  metros por segundo

      Vas conduciendo un coche. A las 12:05, miras el contador en el
      salpicadero y ves que el coche ha recorrido 12345 KM. A las 12:10
      vuelves a mirar otra vez, y dice 12357 KM. Quiere decir, que has
      recorrido 12 KM en cinco minutos. Un cientfico convertira esto en
      metros por segundos; esto es bastante parecido al problema de pasar de
      bytes transferidos en 5 minutos a bits por segundo.

      Viajamos 12 kilmetros, que son 12000 metros. Tardamos 5 minutos, o
      sea 300 segundos. Nuestra velocidad es 12000M / 300S igual a 40 M/S.

      Tambin podemos calcular la velocidad en KM/H: 12 veces 5 minutos es
      una hora, as que multiplicando los 12 KM por 12 obtenemos 144 KM/H.
      No intentes esto en casa, o por donde vivo :-)

      Recuerda que estos nmeros son tan slo promedios. No hay forma de
      deducir, viendo slo los nmeros, si fuiste a una velocidad constante.
      Hay un ejemplo ms adelante en el tutorial que explica esto.

      Espero que entiendas que no hay diferencia entre calcular la velocidad
      en M/S o bps; slo la forma en que recogemos los datos es distinta.
      Inclusive, la K de kilo en este caso es exactamente la misma, ya que
      en redes k es 1000

      Ahora vamos a crear una base de datos en la que guardar todos estos
      interesantes valores. El mtodo a usar para arrancar el programa puede
      variar de un sistema de operacin a otro, pero asumamos que lo puedes
      resolver tu mismo en caso que se diferente en el sistema que usas.
      Asegrate de no sobreescribir ningn archivo en tu sistema al
      ejecutarlo y escribe todo como una sola lnea (tuve que partirlo para
      que fuera legible), saltndote todos los caracteres '\'




                                    - 4 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



         rrdtool create test.rrd             \
                  --start 920804400          \
                  DS:speed:COUNTER:600:U:U   \
                  RRA:AVERAGE:0.5:1:24       \
                  RRA:AVERAGE:0.5:6:10

      (o sea, escribe: "rrdtool create test.rrd --start 920804400 DS ...")

      QQQQuuuu hhhheeeemmmmoooossss ccccrrrreeeeaaaaddddoooo????

      Hemos creado una base de datos en round robin llamada test (test.rrd),
      que empieza desde el medioda del da en que empec a escribir este
      documento (7 de marzo de 1999). En ella se guarda una fuente de datos
      (DS), llamada "speed", que se lee de un contador. En la misma base de
      datos se guardan dos archivos en round robin (RRAs), uno promedia los
      datos cada vez que se leen (o sea, no hay nada que promediar), y
      mantiene 24 muestras (24 por 5 minutos = 2 horas de muestras). El otro
      promedia 6 muestras (media hora), y guarda 10 de estos promedios (o
      sea, 5 horas). Las opciones restantes las veremos ms adelante.

      RRDtool usa un formato de "fecha" especial que viene del mundo de
      UNIX. Estas "fechas" son el nmero de segundos que han pasado desde el
      primero de enero de 1970, zona UTC. Este nmero de segundos se
      convierte luego en la fecha local, por lo que varia segn la franja
      horaria.

      Lo ms probable es que tu no vivas en la misma parte del mundo que yo,
      por lo que tu franja horaria ser diferente. En los ejemplos, cuando
      mencione horas, puede que no sean las mismas para ti; esto no afecta
      mucho los resultados, slo tienes que corregir las horas mientras
      lees. Por ejemplo, las 12:05 para m son las 11:05 para los amigos en
      la Gran Bretaa.

      Ahora tenemos que llenar nuestra base de datos con valores. Vamos a
      suponer que lemos estos datos:


















                                    - 5 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



       12:05  12345 KM
       12:10  12357 KM
       12:15  12363 KM
       12:20  12363 KM
       12:25  12363 KM
       12:30  12373 KM
       12:35  12383 KM
       12:40  12393 KM
       12:45  12399 KM
       12:50  12405 KM
       12:55  12411 KM
       13:00  12415 KM
       13:05  12420 KM
       13:10  12422 KM
       13:15  12423 KM

      Llenaremos la base de datos as:

       rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
       rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
       rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
       rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
       rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423

      Lo que significa: actualiza nuestra base de datos test con los
      siguientes valores:

       fecha 920804700, valor 12345
       fecha 920805000, valor 12357

       etctera.

      Como ves, pueden introducirse ms de un valor en la base de datos por
      ejecucin del comando. Yo los agrupo de tres en tres para hacerlo
      legible, pero en realidad el mximo depende del sistema de operacin.

      Ahora podemos recuperar los datos usando ``rrdtool fetch'':

       rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200

      Debes obtener esto como salida:

                          speed










                                    - 6 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



       920804400:        NaN
       920804700:        NaN
       920805000: 4.0000000000e-02
       920805300: 2.0000000000e-02
       920805600: 0.0000000000e+00
       920805900: 0.0000000000e+00
       920806200: 3.3333333333e-02
       920806500: 3.3333333333e-02
       920806800: 3.3333333333e-02
       920807100: 2.0000000000e-02
       920807400: 2.0000000000e-02
       920807700: 2.0000000000e-02
       920808000: 1.3333333333e-02
       920808300: 1.6666666667e-02
       920808600: 6.6666666667e-03
       920808900: 3.3333333333e-03
       920809200:        NaN

      Si no, hay algo mal. Probablemente tu sistema de operacin muestre
      ``NaN'' de otra forma; representa "Not a Number", o sea "No es un
      nmero". Si aparece ``U'' o ``UNKN'' o algo parecido, es lo mismo. Si
      hay alguna otra diferencia, probablemente te equivocaste al introducir
      algn P valor (asumiendo que mi tutorial est bien, por supuesto :-).
      En ese caso, borra la base de datos y prueba de nuevo.

      Lo que representa exactamente esta salida lo vamos ms adelante en el
      tutorial.

      HHHHoooorrrraaaa ddddeeee hhhhaaaacccceeeerrrr aaaallllgggguuuunnnnoooossss ggggrrrrffffiiiiccccoooossss

      Prueba este comando:

       rrdtool graph speed.gif                                 \
               --start 920804400 --end 920808000               \
               DEF:myspeed=test.rrd:speed:AVERAGE              \
               LINE2:myspeed#FF0000

      Este comando crea speed.gif, un grfico de los datos desde las 12:00
      hasta las 13:00. Contiene una definicin de la variable myspeed y
      define el color como rojo. Notars que el grfico no comienza
      exactamente a las 12:00 sino a las 12:05, y es porque no tenemos datos
      suficientes como para calcular el promedio de velocidad antes de ese
      momento. Esto slo ocurre en caso de que se pierdan algn muestreo, lo
      que esperamos que no debe ocurrir muy a menudo.

      Si ha funcionado, felicitaciones!. Si no, revisa qu puede estar mal.

      La definicin de colores se construye a partir del rojo, verde y azul.
      Especificas cuanto de cada uno de estos componentes vas a usar en
      hexadecimal: 00 significa "nada de este color" y FF significa "este



                                    - 7 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      color a mxima intensidad". El "color" blanco es la mezcla del rojo,
      verde y azul a toda intensidad: FFFFFF; el negro es la ausencia de
      todos los colores: 000000.

         rojo    #FF0000
         verde   #00FF00
         azul    #0000FF
         violeta #FF00FF     (mezcla de rojo y azul)
         gris    #555555     (un tercio de cada uno de los colores)

      El archivo GIF que acabas de crear puede verse con tu visor de
      archivos de imagen favorito. Los navegadores lo mostrarn usando la
      URL ``file://el/camino/de/directorios/hasta/speed.gif''

      GGGGrrrrffffiiiiccccoooossss ccccoooonnnn uuuunnnn ppppooooccccoooo ddddeeee mmmmaaaatttteeeemmmmttttiiiiccccaaaa

      Cuando veas la imagen, notars que el eje horizontal tiene unas
      etiquetas marcando las 12:10, 12:20, 12:30, 12:40 y 12:50. Los otros
      dos momentos (12:00 y 13:00) no se pueden mostrar bien por falta de
      datos, as que el programa se los salta. El eje vertical muestra el
      rango de los valores que entramos. Introdujimos los kilmetros y luego
      dividimos entre 300 segundos, por lo que obtuvimos valores bastante
      bajos. Para ser exactos, el primer valor, 12 (12357-12345), dividido
      entre 300 da 0.04, lo que RRDtool muestra como ``40m'', o sea
      ``40/1000''. La ``m''' no tiene nada que ver con metros, kilmetros o
      milmetros!.  RRDtool no sabe nada de unidades, el slo trabaja con
      nmeros, no con metros.

      Donde nos equivocamos fue en que debimos medir en metros. As,
      (12357000-12345000)/300 = 12000/300 = 40.

      Vamos a corregirlo. Podramos recrear la base de datos con los valores
      correctos, pero hay una forma mejor: haciendo los clculos mientras
      creamos el archivo gif!

         rrdtool graph speed2.gif                           \
            --start 920804400 --end 920808000               \
            --vertical-label m/s                            \
            DEF:myspeed=test.rrd:speed:AVERAGE              \
            CDEF:realspeed=myspeed,1000,*                   \
            LINE2:realspeed#FF0000

      Cuando veas esta imagen, notars que la ``m'' ha desaparecido, y ahora
      tienes los resultados correctos. Adems hemos aadido una etiqueta a
      la imagen. Apartando esto, el archivo GIF es el mismo.

      Las operaciones estn en la seccin del CDEF y estn escritas en
      Notacin Polaca Inversa (Reverse Polish Notation o ``RPN''). En
      palabras, dice: "toma la fuente de datos myspeed y el numero 1000, y
      multiplcalos". No te molestes en meterte con RPN todava, la veremos



                                    - 8 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      con ms detalle ms adelante. Adems, puede que quieras leer mi
      tutorial sobre los CDEF y el tutorial de Steve Rader sobre RPN, pero
      primero terminemos con este.

      Un momento! Si podemos multiplicar los valores por mil, entonces,
      tambin debera ser posible el mostrar la velocidad en kilmetros por
      hora usando los mismos datos!

      Para cambiar el valor que medimos en metros por segundo, calculamos
      los metros por hora (valor * 3600) y dividimos entre 1000 para sacar
      los kilmetros por hora. Todo junto hace valor * (3600/1000) == valor
      * 3.6.

      Como en nuestra base de datos cometimos un error guardando los valores
      en kilmetros, debemos compensar por ello, multiplicando por 100, por
      lo que al aplicar esta correccin nos queda valor * 3600.

      Ahora vamos a crear este gif, agrendole un poco ms de magia...

         rrdtool graph speed3.gif                           \
            --start 920804400 --end 920808000               \
            --vertical-label km/h                           \
            DEF:myspeed=test.rrd:speed:AVERAGE              \
            "CDEF:kmh=myspeed,3600,*"                       \
            CDEF:fast=kmh,100,GT,kmh,0,IF                   \
            CDEF:good=kmh,100,GT,0,kmh,IF                   \
            HRULE:100#0000FF:"Maximum allowed"              \
            AREA:good#00FF00:"Good speed"                   \
            AREA:fast#FF0000:"Too fast"

      Esto luce mucho mejor. La velocidad en KM/H, y adems tenemos una
      lnea extra mostrando la velocidad mxima permitida (en el camino por
      donde conduzco). Tambin le cambie los colores de la velocidad, y
      ahora paso de ser una lnea a un rea.

      Los clculos son ms complejos ahora. Para calcular la velocidad
      "aceptable":

         Verifica si la velocidad en kmh es mayor que 100     ( kmh,100 ) GT
         Si es as, retorna 0, si no, retorna la velocidad    ((( kmh,100 ) GT ), 0, kmh) IF

      Para calcular la parte de velocidad "excesiva":

         Verifica si la velocidad en kmh es mayor que 100     ( kmh,100 ) GT
         Si es as, retorna la velocidad, si no, retorna 0    ((( kmh,100) GT ), kmh, 0) IF

      MMMMaaaaggggiiiiaaaa ggggrrrrffffiiiiccccaaaa

      Me gusta creer que virtualmente no hay limites para lo que RRDtool
      puede hacer con los datos. No voy a explicarlo en detalle, pero mira



                                    - 9 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      este GIF:

         rrdtool graph speed4.gif                           \
            --start 920804400 --end 920808000               \
            --vertical-label km/h                           \
            DEF:myspeed=test.rrd:speed:AVERAGE              \
            "CDEF:kmh=myspeed,3600,*"                       \
            CDEF:fast=kmh,100,GT,100,0,IF                   \
            CDEF:over=kmh,100,GT,kmh,100,-,0,IF             \
            CDEF:good=kmh,100,GT,0,kmh,IF                   \
            HRULE:100#0000FF:"Maximum allowed"              \
            AREA:good#00FF00:"Good speed"                   \
            AREA:fast#550000:"Too fast"                     \
            STACK:over#FF0000:"Over speed"

      Vamos a crear una pgina HTML simple para ver los tres archivos GIF:

         <HTML><HEAD><TITLE>Velocidad</TITLE></HEAD><BODY>
         <IMG src="speed2.gif" alt="Speed in meters per second">
         <BR>
         <IMG src="speed3.gif" alt="Speed in kilometers per hour">
         <BR>
         <IMG src="speed4.gif" alt="Traveled too fast?">
         </BODY></HTML>

      Gurdalo como ``speed.html'' o algo parecido, y examnalo con un
      navegador.

      Ahora, todo lo que tienes que hacer es medir los datos regularmente y
      actualizar la base de datos. Cuando quieras verlos, vuelve a crear los
      archivos GIF y asegrate que se carguen de nuevo en tu navegador
      (Nota: presionar el botn de "refrescar" puede no ser suficiente; en
      particular, Netscape tiene un problema al respecto, por lo que
      necesitaras darle al botn mientras presionas la tecla de maysculas.

      AAAAccccttttuuuuaaaalllliiiizzzzaaaacccciiiioooonnnneeeessss ddddeeee vvvveeeerrrrddddaaaadddd

      Ya hemos usado el comando ``update''; vimos que recibia uno o ms
      parmetros en el formato: ``<fecha>:<valor>''. Para facilitarte las
      cosas, puedes obtener la fecha actual colocando ``N'' en la fecha.
      Tambin podras usar la funcin ``time'' de Perl para obtenerla. El
      ejemplo ms corto de todo el tutorial :)

         perl -e 'print time, "\n" '

      Ahora, la forma de poner a correr un programa a intervalos regulares
      de tiempo depende del sistema de operacin. La actualizacin, en
      pseudo-cdigo, sera:





                                   - 10 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



         Toma el valor, colcalo en la variable "$speed"
         rrdtool update speed.rrd N:$speed

      (Pero no lo hagas sobre nuestra base de datos de pruebas, que an la
      vamos a usar en otros ejemplos.

      Eso es todo. Ejecutando este script cada 5 minutos, lo nico que
      tienes que hacer para ver los grficos actuales es correr los ejemplos
      anteriores, que tambin puedes poner en un script. Luego de correrlo,
      basta con cargar index.html

      UUUUnnnnaaaassss ppppaaaallllaaaabbbbrrrraaaassss ssssoooobbbbrrrreeee SSSSNNNNMMMMPPPP

      Me imagino que muy pocas personas sern capaces de obtener en su
      ordenador datos reales de su coche cada 5 minutos; los dems nos
      tendremos que conformar con algn otro contador. Puedes, por ejemplo,
      medir la cantidad de pginas que ha hecho una impresora, cuanto caf
      has hecho con la cafetera, el medidor del consumo de electricidad, o
      cualquier otra cosa. Cualquier contador incremental puede
      monitorizarse y graficarse con lo que has aprendido hasta ahora. Ms
      adelante, veremos tambin como monitorizar otro tipo de valores, como
      la temperatura. La mayora usaremos alguna vez un contador que lleve
      la cuenta de cuantos octetos (bytes) a transferido un dispositivo de
      red, as que vamos a ver como hacer esto. Empezaremos describiendo
      como recoger los datos. Hay quien dir que hay herramientas que pueden
      recoger estos datos por ti. Es cierto! Pero, creo que es importante
      darse cuenta de que no son necesarias. Cuando tienes que determinar
      porqu algo no funciona, necesitas saber cmo funciona en primer
      lugar.

      Una herramienta que mencionamos brevemente al principio del documento
      es SNMP. SNMP es una forma de comunicarse con tus equipos.  La
      herramienta particular que voy a usar ms adelante se llama
      ``snmpget'', y funciona as:

         snmpget dispositivo clave OID

      En "dispositivo" colocas el nombre o direccin IP del equipo a
      monitorizar. En clave, colocas la "cadena de caracteres de la
      comunidad de lectura", como se le denomina en el mundillo SNMP.
      Muchos dispositivos aceptarn "public" como cadena por defecto, pero
      por razones de privacidad y seguridad esta clave puede estar
      deshabilitada. Consulta la documentacin correspondiente al
      dispositivo o programa.

      Luego esta el tercer parmetro, llamado OID (Object IDentifier,
      identificador de objeto).

      Al principio, cuando empiezas a aprender sobre SNMP, parece muy
      confuso. No lo es tanto cuando le hechas una ojeada a los ``MIB''



                                   - 11 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      (Manager Information Base, o Base de Informacin Administrativa). Es
      un rbol invertido que describe los datos, empezando en un nodo raz
      desde el que parten varias ramas.  Cada rama termina en otro nodo y
      puede abrir nuevas sub-ramas. Cada rama tiene un nombre, y forman un
      camino que nos lleva hasta el fondo del rbol. En este ejemplo, las
      ramas que vamos a tomar se llaman iso, org, dod, internet, mgmt y
      mib-2. Tambin pueden accederse por su nmero relativo; en este caso,
      estos nmeros son 1, 3, 6, 1, 2 y 1:

         iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)

      En algunos programas se usa un punto al iniciar el OID. Esto puede ser
      confuso; no hay ningn punto inicial en la especificacin de los
      OID... sin embargo, algunos programas usan por defecto un prefijo
      inicial. Para indicar la diferencia entre los OID abreviados (o sea, a
      los que se le pondr el prefijo inicial) y los completos, estos
      programas necesitan que los OID completos empiecen por un punto. Para
      empeorar las cosas, se usan varios prefijos distintos...

      De acuerdo, sigamos con el inicio de nuestro OID: tenamos 1.3.6.1.2.1
      . Ahora, nos interesa la rama ``interfaces'', que tiene el nmero dos
      (o sea, 1.3.6.1.2.1.2, o 1.3.6.1.2.1.interfaces).

      Lo primero es hacernos con un programa SNMP. Busca algn paquete pre-
      compilado para tu plataforma, si no, puedes buscar el cdigo fuente y
      compilarlo tu mismo. En Internet encontrars muchos programas,
      bscalos con un motor de bsqueda o como prefieras.  Mi sugerencia es
      que busques el paquete CMU-SNMP, que esta bastante difundido.

      Asumamos que ya tienes el programa. Empecemos por tomar ciertos datos
      que estn disponibles en la mayora de los sistemas. Recuerda: hay un
      nombre abreviado para la parte del rbol que ms nos interesa.

      Voy a usar la versin corta, ya que creo que este documento ya es lo
      bastante largo. Si no te funciona, adele el prefijo .1.3.6.1.2.1 y
      prueba de nuevo. O prueba leyendo el manual; sltate las partes que no
      entiendas an, y busca las secciones que hablan de como arrancar y
      usar el programa.

         snmpget myrouter public system.sysdescr.0

      El dispositivo deber contestarte con una descripcin, probablemente
      vaca, de s mismo. Si no consigues una respuesta vlida, prueba con
      otra "clave" u otro dispositivo; no podemos seguir hasta tener un
      resultado.

         snmpget myrouter public interfaces.ifnumber.0

      Con suerte, usando este comando obtendrs un nmero como resultado: el
      nmero de interfaces del dispositivo. Si es as, seguiremos adelante



                                   - 12 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      con otro programa, llamado "snmpwalk"

         snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr

      Si obtienes una lista de interfaces, ya casi hemos llegado. Aqu
      tienes un ejemplo del resultado:

         [user@host /home/alex]$ snmpwalk cisco public 2.2.1.2
         interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1"
         interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2"
         interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30
         interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0"
         interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"

      En este equipo CISCO, quiero monitorizar la interfaz "Ethernet0".
      Viendo que es la cuarta, pruebo con:

         [user@host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4

         interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126
         interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519

      Entonces, tengo 2 OIDs que monitorizar, y son (en el formato largo,
      ahora):

         1.3.6.1.2.1.2.2.1.10

              y

         1.3.6.1.2.1.2.2.1.16

      , ambas con el nmero de interfaz de 4

      No te engaes, esto no lo logre yo al primer intento. Me tom un
      tiempo entender lo que significaban todos estos nmeros; ayuda cuando
      se traducen en un texto descriptivo... por lo menos, cuando oigas
      hablar de MIBs y OIDs, ahora sabrs de qu se trata. No te olvides del
      nmero de interfaz (0 si el valor no depende de una interfaz), y
      prueba con snmpwalk si no obtienes una respuesta clara con snmpget.

      Si entendiste todo esto, y obtienes resultados del dispositivo con el
      que ests probando, sigue adelante con el tutorial. Si no, vuelve a
      leer esta seccin; es importante

      UUUUnnnn eeeejjjjeeeemmmmpppplllloooo rrrreeeeaaaallll

      Ok, empecemos con la diversin. Primero, crea una base de datos nueva.
      Vamos a guardar en ella 2 contadores, "input" y "ouput". Los datos los
      vamos a guardar en archivos que los promediarn, tomando grupos de 1,
      6, 24 o 288 muestras. Tambin archivaremos los valores mximos. Lo



                                   - 13 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      explicaremos con ms detalle despus. El intervalo de tiempo entre las
      muestras ser de 300 segundos (5 minutos).

       1 muestra "promediada" sigue siendo 1 muestra cada 5 minutos
       6 muestras promediadas son un promedio de cada 30 minutos
       24 muestras promediadas son un promedio de cada 2 horas
       288 muestras promediadas son un promedio de cada da

      Vamos a tratar de ser compatibles con MRTG, que guarda ms o menos
      esta cantidad de datos:

       600 muestras de 5 minutos:          2 das y 2 horas
       600 promedios de 30 minutos:        12.5 das
       600 promedios de 2 horas:           50 das
       600 promedios de 1 da:             732 das

      Uniendo todos estos rangos tenemos que en total guardamos datos de
      unos 797 das. RRDtool guarda los datos de una forma distinta a MRTG;
      no empieza el archivo "semanal" donde acaba el "diario", sino que
      ambos archivos contienen la informacin ms reciente, por lo que con
      RRDtool archivamos ms datos que con MRTG!

      Necesitaremos:

       600 muestras de 5 minutos    (2 das y 2 horas)
       700 entradas de 30 minutos   (2 das y 2 horas, ms 12.5 das)
       775 entradas de 2 horas      (lo anterior + 50 das)
       797 entradas de 1 da        (lo anterior + 732 das, redondeando)

         rrdtool create myrouter.rrd         \
                  DS:input:COUNTER:600:U:U   \
                  DS:output: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

      Lo siguiente es recoger los datos y guardarlos, como en el ejemplo
      siguiente. Esta parcialmente en pseudo-cdigo, por lo que tendrs que
      buscar exactamente como hacerlo funcionar en tu sistema operativo.









                                   - 14 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



         mientras no sea el fin del universo
         hacer
            tomar el resultado de
                snmpget router community 2.2.1.10.4
            en la variable $in
            tomar el resultado de
                snmpget router community 2.2.1.16.4
            en la variable $out
            rrdtool update myrouter.rrd N:$in:$out
            esperar 5 minutos
         hecho

      Luego, tras recoger datos por un da, crea una imagen, usando:

         rrdtool graph myrouter-day.gif --start -86400 \
                  DEF:inoctets=myrouter.rrd:input:AVERAGE \
                  DEF:outoctets=myrouter.rrd:output:AVERAGE \
                  AREA:inoctets#00FF00:"In traffic" \
                  LINE1:outoctets#0000FF:"Out traffic"

      Este comando debe producir un grfico del trfico del da. Un da son
      24 horas, de 60 minutos, de 60 segundos: 24*60*60=86400, o sea que
      empezamos a "ahora" menos 86400 segundos. Definimos (con los DEFs)
      "inoctets" y "outoctets" como los valores promedio de la base da datos
      myrouter.rrd, dibujando un rea para el trfico de entrada y una lnea
      para el trfico de salida.

      Mira la imagen y sigue recogiendo datos por unos cuantos das. Si lo
      deseas, puedes probar con los ejemplos de la base de datos de pruebas
      y ver si puedes hacer trabajar las diversas opciones y operaciones.

      Sugerencia:

      Haz un grfico que muestre el trfico en bytes por segundo y en bits
      por segundo. Colorea el trfico Ethernet rojo si sobrepasa los cuatro
      megabits por segundo.

      FFFFuuuunnnncccciiiioooonnnneeeessss ddddeeee ccccoooonnnnssssoooolllliiiiddddaaaacccciiiinnnn

      Unos cuantos prrafos atrs hablbamos sobre la posibilidad de guardar
      el valor mximo en vez del promedio. Profundicemos un poco en este
      tema.

      Recordemos lo que hablbamos sobre la velocidad de un coche.
      Supongamos que manejamos a 144 KM/H durante 5 minutos y luego nos
      detiene la polica durante unos 25 minutos. Al finalizar el regao,
      tomamos nuestro porttil y creamos una imagen desde nuestra base de
      datos. Si visualizamos la segunda RRA que creamos, tendremos el
      promedio de 6 muestreos. Las velocidades registradas serian
      144+0+0+0+0+0=144, lo que en promedio nos da una velocidad de 24



                                   - 15 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      KM/H., con lo que nos igual nos pondran una multa, slo que no por
      exceso de velocidad.

      Obviamente, en este caso, no deberamos tomar en cuenta los promedios.
      Estos son tiles en varios casos. Por ejemplo, si queremos ver cuantos
      KM hemos viajado, este sera el grfico ms indicado. Pero por otro
      lado, para ver la velocidad ha la que hemos viajado, los valores
      mximos son ms adecuados.

      Es lo mismo con los datos que recogemos. Si quieres saber la cantidad
      total, mira los promedios. Si quieres ver la velocidad, mira los
      mximos. Con el tiempo, ambas cantidades se separan cada vez ms.  En
      la ltima base de datos que creamos, haba dos archivos que guardaban
      los datos de cada da. El archivo que guarda los promedios mostrar
      valores bajos, mientras que el de mximos mostrar valores ms altos.
      Para mi coche, mostrara valores promedio de 96/24=4 KM/H (viajo unos
      96 kilmetros por da), y mximos de 1220 KM/H (la velocidad mxima
      que alcanzo cada da)

      Como ves, una gran diferencia. No mires el segundo grfico para
      estimar la distancia que recorro, ni al primero para estimar la
      velocidad a la que voy. Esto slo funciona con muestras muy cercanas,
      pero no si sacas promedios.

      Algunas veces, hago un viaje largo. Si hago un recorrido por Europa,
      conduciendo por unas 12 horas, el primer grfico subir a unos 60
      KM/H. El segundo mostrar unos 180 KM/H. Esto significa que recorr
      unos 60 KM/H por 24 horas = 1440 KM. Muestra adems que fui a una
      velocidad promedio mayor a la normal y a un mximo de 180 KM/H, no
      que fui 8 horas a una velocidad fija de 180 KM/H! Este es un ejemplo
      real: tengo que seguir la corriente en las autopistas de Alemania,
      detenerme por gasolina y caf de vez en cuando, manejar ms lentamente
      por Austria y Holanda, e ir con cuidado en las montaas y las villas.
      Si viramos los grficos de los promedios de cada 5 minutos, la imagen
      sera completamente distinta; veramos los mismos valores de promedio
      y de mxima. (suponiendo que las mediciones fueran cada 300 segundos).
      Se podra ver cuando par, cuando iba en primera, cuando iba por las
      autopistas, etc. La granularidad de los datos es ms alta, por lo que
      se tiene ms informacin. Sin embargo, esto nos lleva unas 12 muestras
      por hora, o 288 al da, lo cual es mucho para guardar por un periodo
      de tiempo largo. Por lo tanto, sacamos el promedio, guardando
      eventualmente un solo valor por da.  Con este nico valor, no podemos
      ver mucho.

      Es importante comprender lo que expuesto en estos ltimos prrafos.
      Unos ejes y unas lneas no tienen ningn valor por si mismos; hay que
      saber que representan e interpretar correctamente los valores
      obtenidos. Sean cuales sean los datos, esto siempre ser cierto.

      El mayor error que puedes cometer es usar los datos recogidos para



                                   - 16 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      algo para lo cual no sirven. En ese caso, seria hasta mejor no tener
      grfico alguno.

      RRRReeeeppppaaaasssseeeemmmmoooossss lllloooo qqqquuuueeee ssssaaaabbbbeeeemmmmoooossss

      Ahora ya sabes como crear una base de datos. Puedes guardar valores en
      ella, extraerlos creando un grfico, hacer operaciones matemticas con
      ellos desde la base de datos y visualizar los resultados de estas en
      vez de los datos originales. Vimos la diferencia entre los promedios y
      los mximos y cuando debemos usar cada uno (o al menos una idea de
      ello)

      RRDtool puede hacer ms de lo que hemos visto hasta ahora. Pero antes
      de continuar, te recomiendo que releas el texto desde el principio y
      pruebes a hacerle algunas modificaciones a los ejemplos.  Asegrate de
      entenderlo todo. El esfuerzo valdr la pena, y te ayudar, no slo con
      el resto del documento, sino en tu trabajo diario de monitorizacin,
      mucho despus de terminar con esta introduccin.

      TTTTiiiippppoooossss ddddeeee ffffuuuueeeennnntttteeeessss ddddeeee ddddaaaattttoooossss

      De acuerdo, quieres continuar. Bienvenido de vuelta otra vez y
      preprate; voy a ir ms rpido con los ejemplos y explicaciones.

      Ya vimos que, para ver el cambio de un contador a lo largo del tiempo,
      tenemos que tomar dos nmeros y dividir la diferencia entre el tiempo
      transcurrido entre las mediciones. Para los ejemplos que hemos visto
      es lo lgico, pero hay otras posibilidades. Por ejemplo, mi enrutador
      me puede dar la temperatura actual en tres puntos distintos, la
      entrada de aire, el llamado "punto caliente" y la salida de
      ventilacin. Estos valores no son contadores; si tomo los valores de
      dos muestreos y lo divido entre 300 segundos, obtendr el cambio de
      temperatura por segundo. Esperemos que sea cero, o tendramos un
      incendio en el cuarto de ordenadores! :)

      Entonces, que hacemos? Podemos decirle a RRDtool que guarde los
      valores tal como los medimos (esto no es exactamente as, pero se
      aproxima bastante a la verdad). As, los grficos se vern mucho
      mejor. Puedo ver cuando el enrutador est trabajando ms (en serio,
      funciona; como usa ms electricidad, genera ms calor y sube la
      temperatura), puedo saber cuando me he dejado las puertas abiertas (el
      cuarto de ordenadores tiene aire acondicionado; con las puertas
      abiertas el aire caliente del resto del edificion entra y sube la
      temperatura en la entrada de aire del enrutador), etc. Antes usamos un
      tipo de datos de "contador", ahora usaremos un tipo de datos
      diferente, con un nombre diferente, GAUGE.  Tenemos otros tipos:







                                   - 17 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



       - COUNTER este ya lo conocemos
       - GAUGE   este acabamos de verlo
       - DERIVE
       - ABSOLUTE

      Los otros dos tipos son DERIVE y ABSOLUTE. ABSOLUTE puede usarse igual
      que COUNTER, con una diferencia; RRDtool asume que el contador se
      reinicia cada vez que se lee. O en otras palabras; el delta entre los
      valores no hay que calcularlo, mientras que con COUNTER RRDtool tiene
      que sacar l la cuenta. Por ejemplo, nuestro primer ejemplo, (12345,
      12357, 12363, 12363), sera (unknown, 12, 6, 0) en ABSOLUTE.  El otro
      tipo, DERIVE, es como COUNTER, pero al contrario de COUNTER, este
      valor tambin puede decrecer, por lo que puede tenerse un delta
      negativo.

      Vamos a probarlos todos:

         rrdtool create all.rrd --start 978300900 \
                  DS:a:COUNTER:600:U:U \
                  DS:b:GAUGE:600:U:U \
                  DS:c:DERIVE:600:U:U \
                  DS:d:ABSOLUTE:600:U:U \
                  RRA:AVERAGE:0.5:1:10
         rrdtool update all.rrd \
                  978301200:300:1:600:300    \
                  978301500:600:3:1200:600   \
                  978301800:900:5:1800:900   \
                  978302100:1200:3:2400:1200 \
                  978302400:1500:1:2400:1500 \
                  978302700:1800:2:1800:1800 \
                  978303000:2100:4:0:2100    \
                  978303300:2400:6:600:2400  \
                  978303600:2700:4:600:2700  \
                  978303900:3000:2:1200:3000
         rrdtool graph all1.gif -s 978300600 -e 978304200 -h 400 \
                  DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \
                  DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \
                  DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \
                  DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"

      RRRRRRRRDDDDttttoooooooollll bbbbaaaajjjjoooo eeeellll mmmmiiiiccccrrrroooossssccccooooppppiiiioooo

      o+   La lnea A es un contador, por lo que debe incrementarse
          continuamente y RRDtool tiene que calcular las diferencias. Adems
          RRDtool tiene que dividir la diferencia entre el tiempo
          transcurrido. Esto debera terminar con una lnea recta en 1 (los
          deltas son 300, y los intervalos son de 300)

      o+   La lnea B es de tipo GAUGE. Estos son los valores "reales", as
          que el grfico debe mostrar lo mismo que los valores que



                                   - 18 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



          introducimos: una especie de onda

      o+   La lnea C es de tipo DERIVE. Es un contador, y puede decrecer. Va
          entre 2400 y 0, con 1800 en el medio.

      o+   La lnea D es de tipo ABSOLUTE. Esto es, es un contador pero no
          hay que calcular las diferencias. Los nmeros son iguales a la
          lnea A, y espero que puedas ver la diferencia en los grficos.

      Esto equivale a los valores siguientes, empezando a las 23:10 y
      terminando a las 00:10 (las U significan desconocido).

       - Lnea  A:  u  u  1  1  1  1  1  1  1  1  1  u
       - Lnea  B:  u  1  3  5  3  1  2  4  6  4  2  u
       - Lnea  C:  u  u  2  2  2  0 -2 -6  2  0  2  u
       - Lnea  D:  u  1  2  3  4  5  6  7  8  9 10  u

      Si tu archivo GIF muestra todo esto, has entrado los datos
      correctamente, tu programa RRDtool est funcionando bien, el visor de
      grficos no te engaa y hemos entrado en el 2000 sin problemas :)
      Puedes probar el mismo ejemplo cuatro veces, una por cada lnea.

      Revisemos los datos otra vez:

      o+   Lnea A: 300, 600, 900 , etc.  La diferencia del contador es
          siempre 300, igual que el intervalo de tiempo transcurrido entre
          mediciones. Por lo tanto, el promedio siempre es 1. Pero, por qu
          el primer punto tiene un valor de "desconocido"? Acaso no era
          conocido el valor que pusimos en la base de datos? Si! Pero no
          tenamos un valor inicial para calcular la diferencia. Sera un
          error asumir que el contador empezaba en 0, as que no conocemos
          el valor de la diferencia

      o+   Lnea B: No hay nada que calcular, los valores son los mismos que
          se introdujeron en la base de datos.

      o+   Lnea C: De nuevo, no conocemos el valor inicial antes de la
          primera medicin, as que se aplica el mismo razonamiento que para
          la lnea A. En este caso las diferencias no son constantes, as
          que la lnea no es recta. Si hubisemos puesto los mismos valores
          que en la lnea A, el grfico sera el mismo. Al contrario que
          COUNTER, el valor puede decrecer, y espero mostrarte ms adelante
          el por que de la diferencia entre ambos tipos.

      o+   Lnea D: En este caso, el dispositivo nos da las diferencias por
          s mismo. Por lo tanto, conocemos la diferencia inicial, y podemos
          graficarla. Tenemos los mismos valores que en la lnea A, pero su
          significado es distinto, por lo que el grfico tambin lo es. En
          este caso, las diferencias se incrementan en 300 cada vez,
          mientras que el intervalo de tiempo permanece constante en 300



                                   - 19 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



          segundos, por lo que la divisin nos da resultados cada vez
          mayores.

      RRRReeeeiiiinnnniiiicccciiiiaaaalllliiiizzzzaaaacccciiiinnnn ddddeeee lllloooossss ccccoooonnnnttttaaaaddddoooorrrreeeessss

      Todava nos quedan algunas cosas por ver. Nos quedan algunas opciones
      importantes por cubrir, y aun no hemos hablado de la reinicializacin
      de contadores. Empecemos por ah: Estamos en nuestro coche, vemos el
      contador y muestra 999987. Andamos unos 20 KM, as que el contador
      debe subir a 1000007. Desafortunadamente, el contador slo tiene 6
      dgitos, as que en realidad nos muestra 000007. Si estuviramos
      guardando los valores en un tipo DERIVE, esto significara que el
      contador retrocedi unos 999980 KM. Por supuesto esto no es cierto,
      por lo que necesitamos alguna proteccin contra estos casos. Esta
      proteccin slo la tenemos para el tipo COUNTER, el cual de todas
      formas era el que tenamos que haber usado para este tipo de contador.
      Cmo funciona? Los valores tipo COUNTER no deben decrecer nunca, por
      lo que RRDtool asume en ese caso que el contador se ha reinicializado!
      Si la diferencia es negativa, esto se compensa sumando el valor mximo
      del contador + 1. Para nuestro coche, tendramos:

       Delta = 7 - 999987 = -999980    (en vez de 1000007-999987=20)

       Delta real= -999980 + 999999 + 1 = 20

      Al momento de escribir este documento, RRDtool maneja contadores de 32
      o 64 bits de tamao. Estos contadores pueden manejar los siguientes
      valores:

       - 32 bits: 0 ..           4294967295
       - 64 bits: 0 .. 18446744073709551615

      Si estos valores te parecen raros, podemos verlos en formato
      hexadecimal:

       - 32 bits: 0 ..         FFFFFFFF
       - 64 bits: 0 .. FFFFFFFFFFFFFFFF

      RRDtool maneja ambos contadores de la misma manera. Si ocurre un
      desbordamiento y la diferencia es negativa, RRDtool le suma primero el
      mximo del contador "menor" (32 bits) + 1 a la diferencia. Si an as
      la diferencia es negativa, entonces el contador reinicializado era
      mayor (64 bits), por lo que se le suma el valor mximo del contador
      "largo" + 1 y se le resta el mximo del contador "pequeo" que sumamos
      errneamente. Hay un problema con esto: supongamos que un contador
      largo se ha reinicializado al sumrsele una diferencia muy grande;
      entonces es posible que al aadir el valor mximo del contador pequeo
      la diferencia nos d positivo. En este caso poco probable, los valores
      resultantes no serian correctos. Para que ocurra esto, el incremento
      tiene que ser casi tan grande como el valor mximo del contador, por



                                   - 20 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      lo que de ocurrir es muy probable que halla varios problemas ms en la
      configuracin y no merezca la pena preocuparse slo por este. An as,
      he incluido un ejemplo de este caso para que lo puedas juzgar por ti
      mismo.

      A continuacin, unos ejemplos de reinicializacin de los contadores.
      Prueba de hacer los clculos por ti mismo, o acepta mis resultados si
      tu calculadora no puede con los nmeros :)

      Nmeros de correccin:

       - 32 bits: (4294967295+1) =                                 4294967296
       - 64 bits: (18446744073709551615+1)-correction1 = 18446744069414584320

       Antes:          4294967200
       Incremento:            100
       Debera ser:    4294967300
       Pero es:                 4
       Diferencia:    -4294967196
       Correccin #1: -4294967196 + 4294967296 = 100

       Antes:          18446744073709551000
       Incremento:                      800
       Debera ser:    18446744073709551800
       Pero es:                         184
       Diferencia:    -18446744073709550816
       Correccin #1: -18446744073709550816 +4294967296 = -18446744069414583520
       Correccin #2: -18446744069414583520 +18446744069414584320 = 800

       Antes:          18446744073709551615 ( valor mximo )
       Incremento:     18446744069414584320 ( incremento absurdo,
       Debera ser:    36893488143124135935   mnimo para que
       Pero es:        18446744069414584319   funcione el ejemplo)
       Diferencia:              -4294967296
       Correccin #1:  -4294967296 + 4294967296 = 0 (positivo,
                                                     por tanto no se hace
                                                     la segunda correccin)

       Antes:          18446744073709551615 ( valor mximo )
       Incremento:     18446744069414584319
       Debera ser:    36893488143124135934
       Pero es:        18446744069414584318
       Diferencia:              -4294967297
       Correccin #1:  -4294967297 +4294967296 = -1
       Correccin #2:  -1 +18446744069414584320 = 18446744069414584319

      Como puede verse en los ltimos ejemplos, necesitas unos valores
      bastante extraos para hacer que RRDtool falle (asumiendo que no tenga
      ningn error el programa, por supuesto), as que esto no debera
      ocurrir. Sin embargo, SNMP o cualquier otro mtodo que uses de



                                   - 21 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      recogida de datos puede tambin reportar algn valor errneo
      ocasionalmente. No podemos prevenir todos los errores, pero podemos
      tomar algunas medidas. El comando "create" de RRDtool tiene dos
      parmetros especialmente para esto, que definen los valores mnimo y
      mximo permitidos. Hasta ahora hemos usado "U", "desconocido". Si le
      pasas valores para uno o ambos parmetros y RRDtool recibe un valor
      fuera de esos lmites, los ignorar. Para un termmetro en grados
      Celsius, el mnimo absoluto es -273. Para mi enrutador, puedo asumir
      que ese mnimo es mucho mayor, digamos que 10.  La temperatura mxima
      la pondra en unos 80 grados; ms alto y el aparato no funcionara.
      Para mi coche, nunca esperara obtener valores negativos, y tampoco
      esperara valores mayores a 230.  Cualquier otra cosa sera un error.
      Pero recuerda, lo contrario no es cierto: si los valores pasan este
      examen no quiere decir que sean los correctos. Siempre examina bien el
      grfico si los valores parecen extraos.

      RRRReeeemmmmuuuueeeessssttttrrrreeeeoooo ddddeeee lllloooossss ddddaaaattttoooossss

      Hay una funcionalidad importante de RRDtool que no hemos explicado
      todava: es virtualmente imposible recoger los datos y pasarselos a
      RRDtool a intervalos exactos de tiempo. Por tanto, RRDtool interpola
      los datos a los intervalos exactos. Si no sabes que significa esto o
      como se hace, he aqu la ayuda que necesitas:

      Supongamos un contador se incremente exactamente en 1 cada segundo.
      Queremos medirlo cada 300 segundos, por lo que deberamos tener
      valores separados exactamente en 300. Sin embargo, por varias
      circunstancias llegamos unos segundos tarde y el intervalo es 303. La
      diferencia ser por tanto 303. Obviamente, RRDtool no debe colocar 303
      en la base de datos y dar as la impresin de que el contador se
      increment 303 en 300 segundos. Aqu es donde RRDtool interpola:
      alter el valor 303 al valor que tendra 3 segundos antes y guarda 300
      en 300 segundos. Digamos que la prxima vez llegamos justo a tiempo;
      por tanto, el intervalo actual es 297 segundos, por lo que el contador
      debera ser 297. De nuevo, RRDtool altera el valor y guarda 300, como
      debe ser.

               en RRD                     en realidad
       tiempo+000:   0 delta="U"    tiempo+000:   0 delta="U"
       tiempo+300: 300 delta=300    tiempo+300: 300 delta=300
       tiempo+600: 600 delta=300    tiempo+603: 603 delta=303
       tiempo+900: 900 delta=300    tiempo+900: 900 delta=297

      Creemos dos bases de datos idnticas. He escogido el rango de tiempo
      entre 920805000 y 920805900.

         rrdtool create seconds1.rrd   \
            --start 920804700          \
            DS:seconds:COUNTER:600:U:U \
            RRA:AVERAGE:0.5:1:24



                                   - 22 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



         para Unix: cp seconds1.rrd seconds2.rrd
         para DOS: copy seconds1.rrd seconds2.rrd
         para VMS:  y yo que s :)

         rrdtool update seconds1.rrd \
            920805000:000 920805300:300 920805600:600 920805900:900
         rrdtool update seconds2.rrd \
            920805000:000 920805300:300 920805603:603 920805900:900

         rrdtool graph seconds1.gif                       \
            --start 920804700 --end 920806200             \
            --height 200                                  \
            --upper-limit 1.05 --lower-limit 0.95 --rigid \
            DEF:seconds=seconds1.rrd:seconds:AVERAGE      \
            CDEF:unknown=seconds,UN                       \
            LINE2:seconds#0000FF                          \
            AREA:unknown#FF0000
         rrdtool graph seconds2.gif                       \
            --start 920804700 --end 920806200             \
            --height 200                                  \
            --upper-limit 1.05 --lower-limit 0.95 --rigid \
            DEF:seconds=seconds2.rrd:seconds:AVERAGE      \
            CDEF:unknown=seconds,UN                       \
            LINE2:seconds#0000FF                          \
            AREA:unknown#FF0000

      Los dos grficos debe ser iguales.

 RRRREEEESSSSUUUUMMMMEEEENNNN
      Es hora de concluir este documento. Ahora debes conocer lo bsico como
      para trabajar con RRDtool y leer la documentacin. An hay mucho ms
      por descubrir acerca de RRDtool, y le encontrars; ms y ms usos para
      la herramienta. Con los ejemplos y la herramienta puedes crear
      fcilmente muchos grficos; tambin puedes usar las interfaces
      disponibles.

 LLLLIIIISSSSTTTTAAAA DDDDEEEE CCCCOOOORRRRRRRREEEEOOOO
      Recuerda subscribirte a la lista de correo. Aunque no contestes los
      correos que aparecen en ella, te servir de ayuda a ti y a los dems.
      Mucho de lo que se sobre MRTG (y por tanto sobre RRDtool), lo aprend
      tan slo con leer la lista, sin escribir. No hay por que preguntar las
      preguntas bsicas, que ya tienen su respuesta en la FAQ (lela!). Con
      miles de usuarios a lo largo del mundo, siempre hay preguntas que tu
      puedes responder con lo aprendido en este y otros documentos.

 VVVVEEEERRRR TTTTAAAAMMMMBBBBIIIINNNN
      Las pginas del manual de RRDtool

 AAAAUUUUTTTTOOOORRRR
      Espero que hayas disfrutado con los ejemplos y las descripciones.  Si



                                   - 23 -        Formatted:  August 20, 2003






 RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))                 1111....0000....44445555                  RRRRRRRRDDDDTTTTUUUUTTTTOOOORRRRIIIIAAAALLLL....EEEESSSS((((1111))))
 rrrrrrrrddddttttoooooooollll                                                             rrrrrrrrddddttttoooooooollll
                                 2222000000003333----00001111----22220000



      es as, ayuda a otros refirindolos a este documento cuando te hagan
      preguntas bsicas. No slo obtendrn la respuesta, sino que aprendern
      muchas otras cosas.

      Alex van den Bogaerdt <alex@ergens.op.het.net>
















































                                   - 24 -        Formatted:  August 20, 2003



