天天看点

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

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

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

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

脚本内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<code>#!/bin/sh</code>

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

<code>#by ljk 20160803</code>

<code>net=</code><code>'192.168.1.*'</code>    <code>#内网网段</code>

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

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

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

<code>cd</code> <code>/etc/sysconfig/network-scripts</code>

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

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

<code>    </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>

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

<code>        </code><code>break</code>

<code>    </code><code>fi</code>

<code>done</code>

<code>if</code> <code>[ </code><code>"$1"</code> <code>== </code><code>"request"</code> <code>];</code><code>then</code>

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

<code>elif</code> <code>[ </code><code>"$1"</code> <code>== </code><code>"response"</code> <code>];</code><code>then</code>

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

<code>fi</code>

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

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

<code>if</code> <code>[ -z </code><code>"$result"</code> <code>];</code><code>then</code>

<code>    </code><code>echo</code> <code>0</code>

<code>else</code>

<code>    </code><code>num=$(</code><code>echo</code> <code>$result|</code><code>tr</code> <code>-d </code><code>"a-zA-Z"</code><code>)</code>

<code>    </code><code>unit=`</code><code>echo</code> <code>${result: -2:1}`</code>

<code>    </code><code>case</code> <code>$unit </code><code>in</code>

<code>        </code><code>[kK]) </code><code>echo</code> <code>"$num*1024"</code><code>|</code><code>bc</code><code>;;</code>

<code>        </code><code>[mM]) </code><code>echo</code> <code>"$num*1024*1024"</code><code>|</code><code>bc</code><code>;;</code>

<code>        </code><code>[gG]) </code><code>echo</code> <code>"$num*1024*1024*1024"</code><code>|</code><code>bc</code><code>;;</code>

<code>           </code><code>*) </code><code>echo</code> <code>"$num"</code>

<code>    </code><code>esac</code>

<code></code>

     本文转自kai404 51CTO博客,原文链接:http://blog.51cto.com/kaifly/1840121,如需转载请自行联系原作者

继续阅读