monitora a largura de banda na interface com tc ou iptables

4

Gostaria de registrar uma mensagem de aviso no arquivo /var/log/messages se a largura de banda de entrada ou de saída na interface eth0 estiver acima de um determinado limite. Eu poderia fazer isso com um script que lê o valor de /sys/devices/virtual/net/eth0/statistics/[rt]x_bytes file, armazena o valor, dorme um segundo, lê os mesmos valores novamente, calcula a quantidade de bits por segundo enviada, compara o resultado com determinado limite e, se for mais alto , grava uma mensagem no arquivo /var/log/messages . No entanto, existe um método mais inteligente? Quero dizer, por exemplo, com iptables ou tc , o que poderia criar uma mensagem de registro no caso de um certo limite de largura de banda na interface ser excedido?

    
por Martin 12.03.2015 / 16:25

3 respostas

2

Eu finalmente encontrei a solução que estava procurando. Iptables tem rateest module que faz exatamente isso. Por exemplo:

# collects all ingress traffic to RATEEST target
iptables -A INPUT -j RATEEST --rateest-name RE1 --rateest-interval 500.0ms --rateest-ewmalog 1s
# creates a log entry(jumps to LOG target) if rate is greater than 10Mbps
iptables -A INPUT -m rateest --rateest RE1 --rateest-gt --rateest-bps 10Mbps -j LOG --log-prefix "Ingress bandwidth >10Mbps "
    
por 23.03.2015 / 10:08
3

Você pode usar a opção vnstat com -tr e comparar com o limite e o log de gravação, se excedido.

-tr time  
 Calculate how much traffic goes through the selected interface during the giventimeseconds. Thetimewill be 5 seconds if a number parameter isn't included.
    
por 21.03.2015 / 07:40
0
netstat -i 

Apenas para iniciantes. Veja os cabeçalhos para RX-OK e TX-OK. Configure isso com o cron e é isso.

#!/bin/bash
# Mar 2015
# Get bytes transmitted and received on eth0 and log msg.
echo " "
bytein='netstat -i | grep eth0 | awk '{print $4 }''
byteout='netstat -i | grep eth0 | awk '{print $8 }''
total=$((${bytein} + ${byteout}))
# echo "IN=$bytein, OUT=$byteout, TOTAL=$total"
max=1000000
outfile=/var/log/messages
msg="Bandwidth has exceeded $max bytes"
if [ $total -gt $max ]; then
    echo "$msg" >> $outfile
    echo $msg
fi

Qual é a grande figura do OP? Eu poderia fazer isso para diferentes usuários para limitar sua largura de banda, por que isso para a interface eth0?

    
por 17.03.2015 / 18:30

Tags