我有一台服务器连接到 Cisco WS-C3560G-24TS交换机 GigE 端口。我需要检查服务器是否创建了几秒钟 >500Mbps 的流量突发。服务器不在我的管理之下。
起初,我制作了一个简单的脚本,它将接口入口字节存储到一个变量 ( bps1) 中,休眠一秒钟,将入口字节存储到另一个变量 ( bps2) 中,计算接收到的比特数,将其存储在名为 的变量中delta,并打印一个如果delta大于 500Mbps,则记录消息:
while :; do
for i in {1..2}; do
declare bps"$i"=$(snmpwalk -Ov -v 2c -c public switch ifHCInOctets.10101 | sed 's/^.* //');
sleep 1;
done;
delta=$(( (bps2 - bps1)*8 ));
echo "$bps1" "$bps2" "$delta";
(( delta > 500000000 )) && printf '%s\n' "$(date -u "+%d.%m.%y %H:%M:%S") UTC ingress traffic from customer was "$delta" bps";
done | tee -a bps.log
echo "$bps1" "$bps2" "$delta";上面的行仅用于故障排除目的。Cisco IOSifHCInOctets以 1ts 间隔更新计数器。
然而,由于一个 while 循环需要比一秒钟更长的时间才能完成,因此脚本偶尔会报告两个间隔的 bps。例如:
155268562689729 155268611695817 392048704
155268714010296 155268764441853 403452456
155268862787657 155268910277237 379916640
155269008492724 155269103039983 756378072
14.05.15 14:59:19 UTC ingress traffic from customer was 756378072
155269148645940 155269195558201 375298088
155269295068336 155269395399778 802651536
14.05.15 14:59:26 UTC ingress traffic from customer was 802651536
155269492138530 155269538915854 374218592
155269631823265 155269679591240 382143800
我猜这种方法只适用于更长的轮询期?检测短时流量突发的其他可能性是什么?在交换机/路由器中带有计数器的监管器?其他一些聪明的方法?