tc 또는 iptables를 사용하여 인터페이스의 대역폭을 모니터링하세요.

tc 또는 iptables를 사용하여 인터페이스의 대역폭을 모니터링하세요.

/var/log/messages인터페이스의 수신 또는 송신 대역폭이 특정 임계값을 초과하는 경우 eth0파일에 경고 메시지를 기록하고 싶습니다 . 파일에서 값을 읽고, /sys/devices/virtual/net/eth0/statistics/[rt]x_bytes값을 저장하고, 잠시 휴면하고, 정확히 동일한 값을 다시 읽고, 초당 전송된 비트 수를 계산하고, 결과를 특정 임계값과 비교하는 스크립트를 사용하여 이 작업을 수행할 수 있습니다. , 더 높으면 메시지를 /var/log/messages파일에 씁니다. 그러나 더 똑똑한 방법이 있습니까? 예를 들어, 인터페이스의 특정 대역폭 임계값이 초과되면 로그 메시지가 생성될 수 있습니까 iptables?tc

답변1

이를 -tr 옵션과 함께 사용한 vnstat다음 임계값과 비교하고 초과된 경우 로그에 기록할 수 있습니다.

-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.

답변2

마침내 내가 찾던 해결책을 찾았습니다. 이를 수행할 수 있는 모듈이 Iptables있습니다 . rateest예를 들어:

# 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 "

답변3

netstat -i 

초보자 전용입니다. RX-OK 및 TX-OK 헤더를 살펴보세요. cron을 사용하여 설정하면 됩니다.

#!/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

OP의 큰 그림은 무엇입니까? 다른 사용자가 대역폭을 제한하기 위해 이 작업을 수행하는 것을 볼 수 있습니다. eth0 인터페이스에 대해 이 작업을 수행하는 이유는 무엇입니까?

관련 정보