RRDTUTORIAL.ES(1)                   rrdtool                  RRDTUTORIAL.ES(1)



[1mNAME[0m
       rrdtutorial - Tutorial sobre RRDtool por Alex van den Bogaerdt (Tra-
       ducido al castellano por Jess Couto Fandio)

[1mDESCRIPTION[0m
       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 docu-
       mentacin, y adems explica algunas ideas generales sobre estadstica,
       con un enfoque particular hacia las redes.

[1mTUTORIAL[0m
       [1mImportante[0m

       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 sen-
       tido.

       [1mQu es RRDtool?[0m

       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 cuan-
       tos 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 tra-
       baja con estas bases de datos en "round-robin", guardando y recuperando
       datos de ellas.

       [1mQu datos pueden guardarse en una RRD?[0m

       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
       de "simple" se refiere al protocolo - no se supone que sea fcil admin-
       istrar o monitorizar una red. Cuando hayas terminado con este docu-
       mento, 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 con-
       tadores que mantienen. Son estos valores de estos contadores los que
       vamos a almacenar en la RRD.

       [1mQu puedo hacer con esta herramienta?[0m

       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 evolu-
       cion, permitiendo graficar otras fuentes de datos, como temperatura,
       velocidad, voltajes, cantidad de pginas impresas, etc... Lo ms proba-
       ble es que empieces a usar RRDtool para guardar y procesar datos con-
       seguidos 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 per-
       mite 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.

       [1mY si an tengo problemas despus de leer este documento?[0m

       Lo primero, lelo otra vez!. Puede que te hayas perdido de algo.  Si
       no puedes compilar el cdigo fuente y usas un sistema operativo bas-
       tante 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 prob-
       lema 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
       ttulo "subscribe". Si eventualmente deseas salirte de la lista, enva
       otro correo a la misma direccin, con ttulo "unsubscribe".

       [1mCmo me vas a ayudar?[0m

       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.

       [1mTu primera base de datos en round-robin[0m

       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 ejemp-
       los. 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 prome-
       dio***" 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.  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 salpi-
       cadero 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 segun-
       dos; esto es bastante parecido al problema de pasar de bytes transferi-
       dos 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 ejecu-
       tarlo y escribe todo como una sola lnea (tuve que partirlo para que
       fuera legible), saltndote todos los caracteres '\'

          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 ...")

       [1mQu hemos creado?[0m

       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 con-
       vierte 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:

        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 sigu-
       ientes 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 legi-
       ble, 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

        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.

       [1mHora de hacer algunos grficos[0m

       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 exacta-
       mente a las 12:00 sino a las 12:05, y es porque no tenemos datos sufi-
       cientes 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 hex-
       adecimal: 00 significa "nada de este color" y FF significa "este 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''

       [1mGrficos con un poco de matemtica[0m

       Cuando veas la imagen, notars que el eje horizontal tiene unas etique-
       tas 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 pal-
       abras, dice: "toma la fuente de datos myspeed y el numero 1000, y mul-
       tiplcalos". No te molestes en meterte con RPN todava, la veremos 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

       [1mMagia grfica[0m

       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
       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 naveg-
       ador.

       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 particu-
       lar, Netscape tiene un problema al respecto, por lo que necesitaras
       darle al botn mientras presionas la tecla de maysculas.

       [1mActualizaciones de verdad[0m

       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:

          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 anteri-
       ores, que tambin puedes poner en un script. Luego de correrlo, basta
       con cargar index.html

       [1mUnas palabras sobre SNMP[0m

       Me imagino que muy pocas personas sern capaces de obtener en su orde-
       nador 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 grafi-
       carse 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, nece-
       sitas 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 her-
       ramienta 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 monitor-
       izar. 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 pri-
       vacidad y seguridad esta clave puede estar deshabilitada. Consulta la
       documentacin correspondiente al dispositivo o programa.

       Luego esta el tercer parmetro, llamado OID (Object IDentifier, identi-
       ficador 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'' (Man-
       ager 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 nece-
       sitan 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
       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 tra-
       ducen 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 snmp-
       walk 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

       [1mUn ejemplo real[0m

       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
       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.

          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.

       [1mFunciones de consolidacin[0m

       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.  Supong-
       amos que manejamos a 144 KM/H durante 5 minutos y luego nos detiene la
       polica durante unos 25 minutos. Al finalizar el regao, tomamos nue-
       stro 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 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 completa-
       mente 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 algo
       para lo cual no sirven. En ese caso, seria hasta mejor no tener grfico
       alguno.

       [1mRepasemos lo que sabemos[0m

       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.

       [1mTipos de fuentes de datos[0m

       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 val-
       ores 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 orde-
       nadores 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:

        - 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"

       [1mRRDtool bajo el microscopio[0m


       +o   La lnea A es un contador, por lo que debe incrementarse continua-
           mente 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 introduci-
           mos: 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 termi-
       nando 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 correcta-
       mente, 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 siem-
           pre 300, igual que el intervalo de tiempo transcurrido entre medi-
           ciones. Por lo tanto, el promedio siempre es 1. Pero, por qu el
           primer punto tiene un valor de "desconocido"? Acaso no era cono-
           cido 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 segundos, por
           lo que la divisin nos da resultados cada vez mayores.

       [1mReinicializacin de los contadores[0m

       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 nega-
       tiva, 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 hexadeci-
       mal:

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

       RRDtool maneja ambos contadores de la misma manera. Si ocurre un des-
       bordamiento 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 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 bas-
       tante extraos para hacer que RRDtool falle (asumiendo que no tenga
       ningn error el programa, por supuesto), as que esto no debera ocur-
       rir. Sin embargo, SNMP o cualquier otro mtodo que uses de 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 igno-
       rar. 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 val-
       ores 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.

       [1mRemuestreo de los datos[0m

       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. Dig-
       amos que la prxima vez llegamos justo a tiempo; por tanto, el inter-
       valo 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

          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.

[1mRESUMEN[0m
       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 fcil-
       mente muchos grficos; tambin puedes usar las interfaces disponibles.

[1mLISTA DE CORREO[0m
       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.

[1mVER TAMBIN[0m
       Las pginas del manual de RRDtool

[1mAUTOR[0m
       Espero que hayas disfrutado con los ejemplos y las descripciones.  Si
       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>



1.0.41                            2003-01-20                 RRDTUTORIAL.ES(1)
