云主机上偶会收到瞬时异常流量监控告警,当我们有空登陆到服务器上查看时,往往流量已经恢复正常。很难定位产生问题的原因 。解决问题的关键需要获取如果数据:
- 哪个进程以发送大量数据?
- 在和哪个IP之间传送数据?
- 传送数据的内容是什么?
解决问题的思路编写脚本持续监控网卡流量,当超过指定阀值时,开始捕获数据并存储后进行分析
#!/bin/sh
# 获取TX流量
getTX(){
TX1=$(cat /proc/net/dev |grep eth0|awk '{print $10}')
sleep 1
TX2=$(cat /proc/net/dev |grep eth0|awk '{print $10}')
TX=$((($TX2 - $TX1)/1024*8))
echo $TX
}
# 获取RX数据流量
getRX(){
RX1=$(cat /proc/net/dev |grep eth0|awk '{print $2}')
sleep 1
RX2=$(cat /proc/net/dev |grep eth0|awk '{print $2}')
RX=$((($RX2 - $RX1)/1024*8))
echo $RX
}
# 使用tcpdump爬包
getPacket(){
tcpdump -i eth0 -c 50000 -w /opt/script/cap_$(date +%Y%m%d%H%M%S).pcap
}
# 使用iftop获取过哪些IP哪个端口进行数据交互
getiftop(){
iftoplog=/opt/script/iftoplog.txt
for ((i=1;i<10;i++));do
echo $(date +%Y-%m-%d:$H%M%S) >> $iftoplog
/usr/sbin/iftop -s 2 -P -n -N -t >> $iftoplog
done
}
# 使用nethogs获取哪个进程的数据流量比较大
getnethogs(){
}
while [ 1 ];do
if [ $(getTX) -gt 10000 ];then
getPacket &
getiftop &
getnethogs &
fi
done