使用tcpdump抓包工具实现

注:tcpdump文件要加s权限,zabbix调用脚本才能执行

#chmod +s /usr/sbin/tcpdump

监控数据包脚本 

packets_sec.sh 统计网络数据包(个/秒)

#!/bin/sh
ver=`grep release /etc/issue awk '{print $3}'`
if [[  $ver > 6.5  ]];then
        p1=(`grep $1 /proc/net/dev awk '{print $3,$11}'`)
        sleep 1
        p2=(`grep $1 /proc/net/dev awk '{print $3,$11}'`)
else
        p1=(`grep $1 /proc/net/dev awk '{print $2,$10}'`)
        sleep 1
        p2=(`grep $1 /proc/net/dev awk '{print $2,$10}'`)
fi
tx=$[${p2[1]}-${p1[1]}]
rx=$[${p2[0]}-${p1[0]}]
if [ $2 == "tx"  ];then
        echo $tx
else
        echo $rx
fi


注:tx为数据包个数

    rx为接收数据包个数

   $1 为网卡名称,$2为发送tx或者接收rx

通过数组方式,将/proc/net/dev文件相应的列,获取发送和接收数据包值。操作系统版本不同,取值不同

packets_bytes.sh 统计网络数据包大小(bytes)

#!/bin/sh
packets_dump=/tmp/packets_dump.txt
/usr/sbin/tcpdump -i $1 -c $2 tcp > $packets_dump
array=(`awk '{print $NF}' $packets_dump`)
for in "${array[@]}"
do
        sum=$[$i+sum]
done
lenth=${#array[@]}
if [ $lenth -ne 0 ];then
    packet=$[$sum/$lenth]
    echo $packet
else
    echo 0
fi

注:$1为网卡名称,$2为抓包次数

修改配置文件zabbix_agentd.conf

UserParameter=packets_sec[*],/opt/zabbix/bin/packets_sec.sh $1 $2
UserParameter=packets_bytes[*],/opt/zabbix/bin/packets_bytes.sh $1 $2

添加监控项






监控图形