1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184
|
=encoding ISO8859-1
=head1 NAME
rrdtutorial - Tutorial sobre RRDtool por Alex van den Bogaerdt
(Traducido al castellano por Jess Couto Fandio)
=for html <div align="right"><a href="rrdtutorial.html">English</a></div>
=head1 DESCRIPTION / DESCRIPCIN
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.
=head1 TUTORIAL
=head2 Importante
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.
=head2 Qu es RRDtool?
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.
=head2 Qu datos pueden guardarse en una RRD?
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 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.
=head2 Qu puedo hacer con esta herramienta?
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 SVG 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.
=head2 Y si an tengo problemas despus de leer este documento?
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@lists.oetiker.ch
con ttulo C<subscribe>. Si eventualmente deseas salirte de la lista,
enva otro correo a la misma direccin, con ttulo C<unsubscribe>.
=head2 Cmo me vas a ayudar?
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.
=head2 Tu primera base de datos en round-robin
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 C<***en promedio***> por
segundo. Esto no es muy difcil de calcular; primero en palabras,
luego en operaciones:
=over 4
=item 1.
Toma el valor actual del contador y rstale el valor anterior
=item 2.
Haz lo mismo con la fecha
=item 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
=back
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 '\'
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: C<rrdtool create test.rrd --start 920804400 DS ...>)
=head2 Qu hemos creado?
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:
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
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.
=head2 Hora de hacer algunos grficos
Prueba este comando:
rrdtool graph speed.png \
--start 920804400 --end 920808000 \
DEF:myspeed=test.rrd:speed:AVERAGE \
LINE2:myspeed#FF0000
Este comando crea speed.png, 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 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 PNG 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.png''
=head2 Grficos con un poco de matemtica
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 png!
rrdtool graph speed2.png \
--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 PNG 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 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 png, agrendole un poco ms de magia...
rrdtool graph speed3.png \
--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
=head2 Magia grfica
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 PNG:
rrdtool graph speed4.png \
--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 PNG:
<HTML><HEAD><TITLE>Velocidad</TITLE></HEAD><BODY>
<IMG src="speed2.png" alt="Speed in meters per second">
<BR>
<IMG src="speed3.png" alt="Speed in kilometers per hour">
<BR>
<IMG src="speed4.png" 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 PNG 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.
=head2 Actualizaciones de verdad
Ya hemos usado el comando ``update''; vimos que recibia uno o ms
parmetros en el formato: ``E<lt>fechaE<gt>:E<lt>valorE<gt>''. 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
anteriores, que tambin puedes poner en un script. Luego de correrlo,
basta con cargar index.html
=head2 Unas palabras sobre SNMP
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'' (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 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
=head2 Un ejemplo real
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.png --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.
=head2 Funciones de consolidacin
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 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
algo para lo cual no sirven. En ese caso, seria hasta mejor no tener
grfico alguno.
=head2 Repasemos lo que sabemos
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.
=head2 Tipos de fuentes de datos
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:
- 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.png -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"
=head2 RRDtool bajo el microscopio
=over 4
=item *
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)
=item *
La lnea B es de tipo GAUGE. Estos son
los valores "reales", as que el grfico debe mostrar lo mismo que
los valores que introducimos: una especie de onda
Z<>
=item *
La lnea C es de tipo DERIVE. Es un
contador, y puede decrecer. Va entre 2400 y 0, con 1800 en el medio.
=item *
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.
=back
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 PNG 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:
=over 4
=item *
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
=item *
Lnea B:
No hay nada que calcular, los valores son los mismos que se
introdujeron en la base de datos.
=item *
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.
=item *
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.
=back
=head2 Reinicializacin de los contadores
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
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 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.
=head2 Remuestreo de los datos
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
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.png \
--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.png \
--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.
=head1 RESUMEN
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.
=head1 LISTA DE CORREO
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.
=head1 VER TAMBIN
Las pginas del manual de RRDtool
=head1 AUTOR
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.
No hablo espaol!
Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
|