linux查看某个ip的流量,linux查看某个ip流量--思路一例

在我之前的文章中分享过“实时”查看Linux某些网卡流量的小脚本,今天再分享一个查看本机到具体某个ip间的流量的思路。我有这个需求是因为:我们的存储是Dell存储设备通过nfs协议供多台业务机挂载使用,而我有必要了解每台机器和Dell存储之间的流量。

其实,如果仅仅是要看这个流量,iftop这个软件就很好,通过其自身的选项就能满足了,不需要再做什么额外的工作。

我的情况是:由于nfs客户机众多,而且虽是挂载一台存储设备但挂载点ip却不一样,并且我想把这个作为一个监控项放到zabbix里,所以我就需要用shell对iftop做进一步的“封装”,以便能够“通用”些且更好的和zabbix结合。

注意:iftop需要root权限,而zabbix-agent一般是以zabbix用户运行且通过zabbix-server调用agent端的自定义脚本时是没有终端(tty)的,这里就需要修改sudo的配置文件了,允许zabbix用户远程执行命令的过程中执行sudo操作。

脚本内容如下

#!/bin/sh

#在zabbix上监控各机器与nfs server之间的流量

#by ljk 20160803

net='192.168.1.*'    #内网网段

nfs_subnet='192.168.1.2[0-9]{2}'    #nfs所在ip的正则

#获取nfs server的真实ip,前提是每台server无论几个挂载点,都只从一个ip挂载

nfs_ip=$(df -h|egrep "$nfs_subnet:"|awk -F : '{print $1}'|sort|uniq)

cd /etc/sysconfig/network-scripts

for dev in $(ls ifcfg-*|awk -F - '{print $2}');do

ip addr show $dev|grep '192.168.1.*' >/dev/null    #判断哪个网卡有内网网段ip

if [ $? -eq 0 ];then

using_dev=$dev    #拥有内网ip的网卡名赋予变量using_dev

break

fi

done

if [ "$1" == "request" ];then

result=$(sudo iftop -i $using_dev -n -t -s 10 2>/dev/null | egrep -B 1 $nfs_ip|awk '$(NF-4)=="=>" {print $(NF-1)}')

elif [ "$1" == "response" ];then

result=$(sudo iftop -i $using_dev -n -t -s 10 2>/dev/null | egrep -B 1 $nfs_ip|awk '$(NF-4)=="<=" {print $(NF-1)}')

fi

#下面部分是为了适用于zabbix而做的一些额外的工作

#iftop出来的结果为(6.60Mb 208Kb 320b等),将其结果整合进zabbix时要去掉这些单位并对数值做转换(zabbix里我统一用b做单位,只给zabbix传数值)

if [ -z "$result" ];then

echo 0

else

num=$(echo $result|tr -d "a-zA-Z")

unit=`echo ${result: -2:1}`

case $unit in

[kK]) echo "$num*1024"|bc;;

[mM]) echo "$num*1024*1024"|bc;;

[gG]) echo "$num*1024*1024*1024"|bc;;

*) echo "$num"

esac

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值