viernes, 13 de enero de 2012

Cómo monitorizar el throughput de una interfaz de red

Para monitorizar el throughtput de una interfaz de red además de todas las herramientas que ofrece Linux (tanto gráficas como texto) puede resultar útil saber utilizar la herramienta ifconfig.
Nos salvará más de una vez cuando no podamos (o no queramos) instalar paquetes extra en un servidor.

Al ejecutar ifconfig nombre_interfaz obtendremos la información de esa interfaz y entre toda esa información tenemos la cantidad de bytes enviados y recibidos hasta el momento.

Crear un script que obtenga los kilobytes y kilobits de salida y entrada por segundo es tan sencillo como tomar dos medidas con un segundo de diferencia y hacer un pequeño cálculo.


#!/bin/bash
if [ $# -ne 2 ]
then
        echo "USO: $0 nombre_interfaz num_ejecuciones"
        echo "   <num_ejecuciones> 0 para ejecutarse de forma continua"
        echo "   Ejemplo: $0 p32p1 2"
        exit 1
fi

for (( i = 0; $2 == 0 || i < $2; i++ ))
do
        SPIN0=`ifconfig $1 | grep bytes | cut -d ':' -f 2 | cut -d ' ' -f 1`
        SPOUT0=`ifconfig $1 | grep bytes | cut -d ':' -f 3 | cut -d ' ' -f 1`
        sleep 1s
        SPIN1=`ifconfig $1 | grep bytes | cut -d ':' -f 2 | cut -d ' ' -f 1`
        SPOUT1=`ifconfig $1 | grep bytes | cut -d ':' -f 3 | cut -d ' ' -f 1`

        DSPIN=$(($SPIN1 - $SPIN0))
        DSPOUT=$(($SPOUT1 - $SPOUT0))

        DSPINKBIT=$(($DSPIN * 8 / 1000))
        DSPOUTKBIT=$(($DSPOUT * 8 / 1000))

        DSPINKB=$(($DSPIN / 1024))
        DSPOUTKB=$(($DSPOUT / 1024))

        echo "($1) IN: $DSPINKB KB/s - $DSPINKBIT kb/s OUT: $DSPOUTKB KB/s - $DSPOUTKBIT kb/s"
done


El script anterior nos da 2 medidas para la velocidad de entrada y salida. Kilobytes (en múltiplos de 8 y entre 1024) y kilobits (como les gusta calcularlos en redes; en bit y entre 1000).
De esa forma si nuestra conexión son 15 Mb se quedan en 1.78 MB reales:

15000000 / 8 / 1024 = 1831 KB / 1024 = 1.78 MB

No hay comentarios:

Publicar un comentario