/var/log/messages
インターフェイスの受信または送信帯域幅が特定のしきい値を超える場合は、eth0
ファイルに警告メッセージを記録したいと思います。ファイルから値を読み取り、/sys/devices/virtual/net/eth0/statistics/[rt]x_bytes
値を保存し、しばらく休止し、まったく同じ値を再読み込みし、1秒あたりに送信されたビット数を計算し、結果を特定のしきい値と比較するスクリプトを使用してこれを実行できます。 。 、それより高い場合は、メッセージを/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インターフェースに対してこれを行うのはなぜですか?