¿Cuánto ancho de banda le estaré proporcionando a mis visitantes en mi propio servidor?
Copyright © 25 Agosto 2003 por Manuel Pérez López
Objetivo del artículo: crear una página web dinámica donde se muestre una gráfica con la evolución del ancho de banda utilizado por los usuarios de nuestro propio servidor, como esta
Preámbulo
Con la llegada de la alta velocidad a los hogares españoles, no hay mejor forma de compartir información que montar tu propio servidor (web, ftp, etc...) para tirar tus documentos a la red. Esto ya vienen haciéndolo algunos usuarios de Linux desde hace tiempo, y a pesar de que la tal alta velocidad tiene sus limitaciones, uno experimenta un reto en esto de montar tu propio server como si de un proveedor de hospedaje se tratara. Hacer constar aquí brevemente que la renombrada alta velocidad no es sino un planteamiento comercial de las telefónicas con silencio planificador del gobierno. A todas luces el ADSL por el par de cables de cobre es una buena opción para las zonas rurales, y no cabe duda de que los núcleos urbanos tienen su mejor opción en los anillos de conexión a internet por cable. Sin embargo, aunque la lógica parezca ésta, se hace alrevés: el carísimo ADSL español se implanta con prioridad en las zonas urbanas, el cable no funciona como debería funcionar allí donde lo hay, y las zonas rurales siguen con el modem a 56kbs. El problema no es sólo de esta estrategía comercial de las telefónicas, sino de un gobierno que permite el abuso y no planifica en beneficio de los ciudadanos.
Pero para no salirme del tema, vuelvo al hilo principal del artículo. Suponemos que tienes ADSL u otro sistema de alta velocidad en casa y tienes montado un servidor de contenidos para internet. Te habrás preguntado más de una vez si ese servidor tira adecuadamente, es decir, si da un servicio adecuando a tus visitantes. Lo que está claro es que tu conexión tiene unos límites, y que si tienes, por ejemplo, ADSL 256 significa que tu ancho de banda es de 32 kbytes/s para la entrada y 16 kbytes/s para la salida. Para un usuario que realiza labores de cliente, esta relación está bien; sin embargo, para los propositos que nos traen aquí, la relación no es la adecuada ya tan sólo podemos darle a los visitantes de nuestro propio server un máximo de 16 kbytes/s, desperdiciando la mayoría de esos 32 kbytes/s de entrada. En el caso de varias peticiones simultáneas (por ejemplo, varios usuarios se descargan desde nuestro FTP un documento o programa), el ancho de banda de 16 kbytes/s se tiene que repartir. A pesar de todo, esos 16 kbytes/s son muy valiosos y pueden ofrecer mucho a tus visitantes: TODO DEPENDE DE TU GRADO DE IMPLICACIÓN EN LA CONSTRUCCIÓN DE LA INTERNET (No lo dejes todo a las telefónicas y crea contenidos alternativos. Además, da un paso más y. ¡dale derechos de copia y modificación a tu público sobre tus documentos! La única forma de cambiar esta sociedad es que empieces a cambiar tú)
Tengo que recordarte que no te voy a explicar como se monta un servidor, tan sólo te voy a mostrar como obtener un gráfico de la evolución de la velocidad de conexión a tu máquina.
Software necesario
Tienes que instar un programa llamado iptraf, disponible desde tu línea de comandos con::
apt-get iptraf (para distros Debian o basadas en Debian) urpmi iptraf (para Mandrake)
De esta forma instalarás los binarios ya precompilados para tu arquitectura, y te aseguras de que si fuera necesario algún otro paquete para satisfacer las dependencias, éste se instalará conjuntamente.
También están disponibles las fuentes, para que las puedas compilar, en la web: http://iptraf.seul.org/ . La última versión a la hora de escribir este documento fue la 2.7.0 y la puedes descargar directamente de ftp://the.wiretapped.net/pub/security/network-monitoring/iptraf/iptraf-2.7.0.tar.gz
(Nota: Asegúrate que utilizas la versión 2.7.0 ó en otro caso los scripts que más tarde te presento en este documento pudieran no funcionar)
iptraf es un programa de estadisticas de red para Linux. Este será el que nos ofrezca los datos que nosotros queremos llevar a la web y hacerlos públicos. Debes familiarizarte con él. Para arrancarlo abre un consola y llamalo (recuerda que si tu server es remoto, debes hacer un telnet). Ejecuta el programa como root. Con el teclado te vas moviendo por su menú. Observa que el programa te ofrece estadísticas detalladas de cada una de las interfaces de tu ordenador (tarjetas ethernet, conexiones ppp, ...) . Principalmente hay dos cosas que quiero que hagas con iptraf:
- Quiero que veas las estadísticas detalladas para la interface con la que te conectas a internet (Detailed interface statistics); en mi caso la interface es ppp0, porque tengo el router conectado en modo monopuesto y lo arranco con pppoe; selecciona adecuadamente tu interface de conexión a internet haciendo varias pruebas y mira los datos que te ofrece de cómo va evoluacionando tu conexión (paquetes,, bytes, totales, de entrada, de salida, por IP, TCP, UDP, ICMP, Other IP y Non-IP), y en la parte inferior te informa sobre la media cada 5 segundos del total, la entrada y la salida (en kbs o paquetes/s). !Ojo¡, que tu interface puede ser la tarjeta de red conectada al router (por ejemplo, eth0), si tu configuración es diferente a la mía.
- La otra cosa que quiero que observes es que con la opción
Configuredel menú principal se entra en el menú de configuración del programa. La opciónloggingpuede estaronuoff. Si está activada significa que se está añadiendo cada cierto intervalo de tiempo los datos mostrados en la pantalla a un fichero de inventario de sucesos (usualmente lo llamamos log). Vamos a verlo detenidamente. Activa esta opción deloggingen este menú. Después pulsa sobre la opcióntimersy se te abrirá un submenú en el que tendrás que seleccionar la opciónlogging interval. Una vez dentro, escribe 1, y acepta con enter. Lo que acabamos de hacer significa que indicamos al programa que ha de escribir en un fichero log cada minuto los datos de la pantalla, con el tipo de estadísticas seleccionado para la interface seleccionada. El programa iptraf aún no está escribiendo ningún fichero log, falta indicarle el nombre del fichero. Vuelve al menú inicial del programa saliendo de los menús (exit) y entra de nuevo en lasDetailed interface statistics, elige tu interface y... ahora sí que te pregunta el nombre del fichero para almacenar el log. En mi caso le dejo el nombre y trayectoria por defecto: /var/log/iptraf/iface_stats_detailed-ppp0.log - Salte del programa
¿Y para que sirve en modo consola el programa iptraf para nuestros objetivos?.... Para nada. Nosotros no vamos a hacerlo correr en modo consola, sino que lo vamos a hacer correr en modo background, como demonio. Te he hecho que observes como funciona el programa para que te acostumbres a su funcionamiento. Nosotros lo vamos a llamar como demonio porque no queremos tener indefinidamente una consola abierta ¿verdad? La llamada como demonio permite configurarlo, como lo habíamos hecho antes en modo consola, a través de una serie de parámentros que le pasaremos. Para más información sobre los parametros posibles mire la página: http://iptraf.seul.org/2.7/backop.html
En nuestro caso vamos a llamar al demonio de esta forma:
iptraf -d ppp0 -B
que significa:
- -d ppp0: es la interfaz sobre la que escribe los datos en el log. Si tu interfaz es la eth0 tendrás que cambiarlo por -d eth0,
- -B: es el tipo de estadísticas sobre las que va a llevar el log, concretamente del tipo
detailed interface statistics. (Nota: no uses otro tipo, porque los script que te comento después en este documento sólo funcionan con ese tipo de estadísticas).
No le pongo más paramentros, porque supongo que el intervalo de longeo por defecto es 1 minuto (no existe parámetro para especificarlo), y no le especifico timeout para que el demonio nunca termine su ejecución, por lo que se ejecutará de forma indefinida.
El demonio tendrás que llamarlo justo cuando arranca la conexión a internet y comienza a funcionar el servidor. Yo tengo el pppoe automatizado de tal forma que al arrancar el servidor, se conecta a internet (adsl-start). También de forma automatizada arranco el iptraf en modo demonio incluyendo iptraf -d ppp0 -B al final del fichero /etc/rc.d/rc.local. Ten en cuenta que ppp0 ya debe de existir para cuando iptraf es llamado.
Ya tenemos las estadísticas en el log, pero ahora... ¿como hago el gráfico? Para ello necesitamos instalar otro programa, llamado gnuplot. Es una herramienta interesantísima para estudiantes, porque con él podemos hacer todo tipo de gráficas. Funciona en modo consola, pero ya hay GUIs para él en los entornos KDE o Gnome. Nosotros tenemos suficiente con el modo consola para nuestro objetivo. Si no lo tienes aún en tu sistema, instálalo con la orden:
apt-get gnuplot (para Debian o uno de sus derivados)
urpmi gnuplot (para Mandrake)
Si tienes otra distro, busca tu paquete, o bien, compila las fuentes de http://www.gnuplot.info/
Una de las caracteristicas de Gnuplot es que puede leer ficheros de texto con los datos de entrada y mostrarnos como una imagen png la gráfica de salida. Bastará con decirle a Gnuplot que lea el fichero log de iptraf y que nos deje el fichero png resultante en la trayectoria por donde el Apache saca las páginas web. Lo malo es que el fichero log creado con iptraf no es entendible por Gnuplot. La forma básica de los ficheros de datos Gnuplot son columnas de variables. Para ello he construido un pequeño programa en perl que es capaz de traducir el fichero log de iptraf a datos legibles por gnuplot. El programa lo puedes descargar de http://www.ieduca.net/iptraf/preparalog.iptraf.pl.txt. Renómbralo quitándole el .txt, llevalo a un lugar que no sea accesible a tus visitantes, y dale atributos de ejecución (por ejemplo con chmod 755 ó 700 si el propietario es root). Adicionalmente tendrás que configurarlo dándole los valores adecuados a cuatro variables que aparecen al inicio del programa. Configúralo con un simple editor de texto, y si te atreves, con vi.
El programa http://www.ieduca.net/iptraf/preparalog.iptraf.pl.txt hace dos cosas:
- Prepara el fichero log para que pueda entenderlo Gnuplot como se ha explicado.
- Va eliminando del fichero log original de iptraf toda aquella información antigua que ya no es necesaria para la representación gráfica. Esto es fundamental ya que en caso contrario podría crecer en tamaño indefinidamente con el consiguiente colapso del sistema.
Por otra parte habrá que llamar a Gnuplot con un script donde se espeficíque, además de dónde está situado el nuevo fichero log que le servirá como entrada de datos, el tipo de gráfico, los títulos, los intervalos de representación, etc... Este script te lo puedes descargar de http://www.ieduca.net/iptraf/gnuplot.iptraf.script.txt. Renombralo quitándole el .txt y llévatelo al path junto al anterior script en perl. Edítalo para configurarlo a tu gusto, ya que es sumamente sencillo. Pónle atributos de lectura y escritura activos, y propietario root.
Ya casi está todo. Vamos a probarlo primero antes de automatizarlo:
- Abre una consola y pasate a root.
- Si no tuvieras ya arrancado el iptraf como demonio, hazlo ahora con: iptraf -d ppp0 -B. Déjalo que corra al menos 5 minutos para que vaya registrando datos. Mientras, navega o bájate el correo, para ir consumiendo ancho de banda.
- Pásate al path donde tienes los dos scripts.
- Primero llama al script en perl para preparar los datos para Gnuplot, de esta forma: perl /www/tudominio/preparalog.iptraf.pl (cambia el path para tu caso concreto)
- Comprueba que en /www/tudominio se ha creado un archivo llamado gnuplot.data
- Después llama al script con Gnuplot para crear el gráfico de esta forma: gnuplot /www/tudominio/gnuplot.iptraf.script > /www/tudominio/html/plot.png
- Finalmente, desde un navegador, tienes que visionar el gráfico correctamente: http://tudomino/plot.png
Si todo ha salido bien, lo único que te falta es automatizarlo con el CRON de Linux, es decir, hacer que se ejecuten ambos scripts como usuario root cada 5 minutos. Nota: procura que no se ejecuten simultáneamente, ya que es posible que el segundo programa intente coger datos del primero sin que éste haya terminado; es decir, que se ejecute el script en perl para preparar los datos un minuto antes que la llamada a Gnuplot para construir el gráfico. Si tienes tu servidor junto a tí, hay muchos GUIs para ajustar la tareas del CRON, o bien, si estás trabajando con un server remoto un buen software es webmin. Pero en todo caso, desde la linea de comandos podrás hacerlo si sigues estas instrucciones de http://linux.fotoarea.com/cron.html . O bien, añade al /etc/crontab las lineas:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * root gnuplot /www/tudominio/gnuplot.iptraf.script > /www/tudominio/html/plot.png
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root perl /www/tudominio/preparalog.iptraf.pl





