GroundWork (Nagios上に構築された監視フレームワーク)を使用してSNMP経由で一部のネットワークデバイスを監視していますが、帯域幅の使用に関する問題が発生しています。
ここで使用されているCisco2800を含むほとんどのルータは、SNMPを介してネットワークトラフィック情報を照会できます。ただし、この情報はカウンターの形式で返されます。これは、「ルーターの電源がオンになってから、特定のインターフェイスに出入りしたバイト数」を意味します。したがって、この情報から何か意味のあるものを得るには、次のことを行う必要があります。この情報を毎秒照会し、各メジャーが前のメジャーとどの程度異なるかを確認します。
Groundwork/Nagiosは、パフォーマンスデータの保存にRRDを使用し、RRDは値間のデルタの計算をサポートしているため、パフォーマンスデータに対してこれを自動的に管理できます。
しかし、帯域幅の使用量が特定の制限を超えたときにアラートを生成するにはどうすればよいですか? Nagiosは、値が特定のしきい値を超えた場合にのみアラートを送信できます。同じ値の2つの異なるメジャー間の差に基づくものではありません。
帯域幅の使用量が特定のしきい値を超えているかどうかを確認し、これが発生した場合はNagiosアラートを生成する(したがって電子メールを送信する)方法が必要です。管理者がパフォーマンスデータを見て、ネットワーク帯域幅に問題がないかどうかを確認するだけでは不十分です。
私はこれをcronスクリプトで実行し、現在の値を一時ファイルに保存し、次回はそれを使用して前回の実行以降の帯域幅使用率を計算しました。
#!/bin/bash
email_address=""
router_ip=""
# 80% BANDWIDTH [ (384000bps) 48,000Bps ] - 20% = 38,400 Bps
alertBW="76800"
lastBWFile="/var/log/ciscoGW.log"
lastBW=`cat $lastBWFile | awk '{print$2}'`
lastTime=`cat $lastBWFile | awk '{print$1}'`
curBW=` snmpget -c snmap_name -v 1 $router_ip IF-MIB::ifOutOctets.2 | awk '{print$4}'`
let diffBW=$curBW-$lastBW
#echo "Diff BW: $diffBW"
timeNow=`date +%s`
let diffTime=$timeNow-$lastTime
let alertBW=$alertBW*$diffTime
echo "$timeNow $curBW" > $lastBWFile
if [ $diffBW -gt $alertBW ]; then
# echo "Over limit!"
echo "Bandwith used over $diffTime seconds: $diffBW" | mail -s "BANDWIDTH OVER LIMIT!!!!" $email_address
fi
実際のピークにもっと興味があったので、rrdtoolの使用に移行しました。
#start 15 minutes ago
#end 5 minutes ago since rrdtool queries every 5 minutes
rrdtool fetch $FROM MAX -s -900 -e -300
最適化するには、snmpget -c snmap_name -v 1 $ router_ip IF-MIB :: ifOutOctets.2 |を置き換えます。 awk '{print $ 4}' by snmpget -O qv -c snmap_name -v 1 $router_ip IF-MIB::ifOutOctets.2
(起動するプロセスが1つ少ない)