LinuxParty

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

En un servidor Linux, conocer el ancho de banda que estás consumiendo no solo es útil para diagnosticar problemas de red, sino también para controlar gastos si tu proveedor cobra por tráfico.

En este artículo veremos desde herramientas rápidas hasta un script en Bash que puedes usar en cualquier servidor y programar con cron para llevar un registro histórico diario o mensual.


🔹 Métodos rápidos para ver el ancho de banda

1. ifstat

Una forma rápida y sencilla de ver el tráfico en todas las interfaces:

ifstat -t

En RHEL/CentOS:

sudo yum install ifstat

En Debian/Ubuntu:

sudo apt install ifstat

Otro artículo que interesaría leer: Medir y ajustar el ancho de banda con Iperf

2. nload

Interfaz visual en consola que muestra subida y bajada:

nload eth0

3. /proc/net/dev

Sin instalar nada, puedes consultar directamente los contadores:

cat /proc/net/dev

Esto muestra bytes recibidos y enviados desde el arranque. Si mides la diferencia entre dos lecturas separadas por unos segundos, obtendrás la velocidad.


🔹 Herramientas para diagnóstico

  • iftop – Muestra en tiempo real quién consume más ancho de banda:

sudo iftop -i eth0
  • bmon – Similar a nload, pero con más estadísticas:

bmon

🔹 Histórico y consumo mensual

Para llevar un registro de tráfico diario y mensual, vnstat es muy recomendable:

sudo yum install vnstat   # RHEL/CentOS
sudo apt install vnstat   # Debian/Ubuntu

sudo systemctl enable vnstat
sudo systemctl start vnstat

vnstat -d   # Por día
vnstat -m   # Por mes

🔹 Script en Bash para medir ancho de banda en tiempo real

Si prefieres algo ligero y sin depender de paquetes externos, aquí tienes un script que calcula el ancho de banda en Mbps usando los contadores del sistema:

#!/usr/bin/env bash
# netwatch.sh — Mide ancho de banda en tiempo real (Mbps) por interfaz
# Uso: ./netwatch.sh [-i interfaz] [-t intervalo_seg]
set -euo pipefail

IFACE=""
INTERVAL=1

usage() {
  echo "Uso: $0 [-i interfaz] [-t intervalo_seg]"; exit 1
}

while getopts ":i:t:h" opt; do
  case "$opt" in
    i) IFACE="$OPTARG" ;;
    t) INTERVAL="$OPTARG" ;;
    h|*) usage ;;
  esac
done

# Autodetección de interfaz si no se indica
if [[ -z "${IFACE}" ]]; then
  IFACE=$(ip -o route get 1.1.1.1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if ($i=="dev") {print $(i+1); exit}}') || true
  [[ -z "${IFACE}" ]] && IFACE=$(ip -o -4 addr show up | awk '$2!="lo"{print $2; exit}')
fi

# Comprobaciones
[[ -z "${IFACE}" ]] && { echo "No se pudo detectar interfaz. Usa -i"; exit 1; }
[[ -r "/sys/class/net/${IFACE}/statistics/rx_bytes" ]] || { echo "Interfaz ${IFACE} inválida."; exit 1; }

printf "Midiendo en interfaz: %s (intervalo: %ss)\n" "$IFACE" "$INTERVAL"
printf "%-8s %-10s %12s %12s\n" "HORA" "IFACE" "IN (Mbps)" "OUT (Mbps)"

trap 'echo; echo "Saliendo..."; exit 0' INT

while :; do
  t0=$(date +%s.%N)
  rx0=$(<"/sys/class/net/${IFACE}/statistics/rx_bytes")
  tx0=$(<"/sys/class/net/${IFACE}/statistics/tx_bytes")

  sleep "$INTERVAL"

  t1=$(date +%s.%N)
  rx1=$(<"/sys/class/net/${IFACE}/statistics/rx_bytes")
  tx1=$(<"/sys/class/net/${IFACE}/statistics/tx_bytes")

  dt=$(awk -v a="$t1" -v b="$t0" 'BEGIN{printf "%.6f", (a-b)}')
  drx=$((rx1 - rx0))
  dtx=$((tx1 - tx0))

  in_mbps=$(awk -v b="$drx" -v s="$dt" 'BEGIN{printf "%.2f", (b*8)/(s*1000000)}')
  out_mbps=$(awk -v b="$dtx" -v s="$dt" 'BEGIN{printf "%.2f", (b*8)/(s*1000000)}')

  printf "%-8s %-10s %12s %12s\n" "$(date +%H:%M:%S)" "$IFACE" "$in_mbps" "$out_mbps"
done

🔧 Cómo usarlo

  1. Guardar como netwatch.sh

  2. Dar permisos:

chmod +x netwatch.sh
  1. Ejecutar:

./netwatch.sh

O especificando interfaz y intervalo:

./netwatch.sh -i eth0 -t 2

Ejemplo de salida:

Midiendo en interfaz: eth0 (intervalo: 1s)
HORA     IFACE         IN (Mbps)   OUT (Mbps)
12:04:11 eth0              3.27         1.12
12:04:12 eth0              8.91         0.56
12:04:13 eth0              0.14         0.09

📓 Cómo registrar el consumo con cron

El script anterior muestra datos en pantalla, pero también puedes hacer que registre el consumo en un archivo para revisarlo más tarde.

1. Modificar el script para volcar a log

Puedes reutilizar el mismo script así:

./netwatch.sh -i eth0 -t 60 >> /var/log/netwatch.log 2>&1

Esto medirá cada 60 segundos y guardará los resultados en /var/log/netwatch.log.


2. Programar en cron

Edita el cron del sistema:

sudo crontab -e

Y añade una línea como esta:

*/5 * * * * /ruta/netwatch.sh -i eth0 -t 300 >> /var/log/netwatch.log 2>&1

Esto:

  • Se ejecuta cada 5 minutos

  • Mide durante 300 segundos (5 minutos)

  • Añade la salida al log


3. Revisar el histórico

Para ver el consumo registrado:

less /var/log/netwatch.log

O filtrar por fecha/hora:

grep "2025-08" /var/log/netwatch.log

📌 Puntos de interés

  • Si quieres monitorizar en vivo: usa iftop, nload o este script.

  • Si buscas histórico mensual: instala vnstat.

  • Si necesitas archivar el consumo: programa el script con cron y guarda los datos en un log.

Con este método podrás no solo diagnosticar problemas de red en tiempo real, sino también tener un histórico preciso del uso de ancho de banda de tu servidor.


No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Top 15 artículos por Fecha

Viendo artículos de: Julio de 2025

Filtro por Categorías