利用shell网络流量监控

唐门问心 2013-01-01

学习shell告一段落。开始那种信心满满,学过后才知道shell博大精深。学到只是一点皮毛。祖师爷一再教诲:学习这个没有什么窍门。要多练习,要有思路。有了思路,就会有一个解决办法。

今天课堂上讨论了一个练习,如何利用shell每十秒统计一次网络流量?

乍一听,统计流量感觉好难,无从下手。但是在老师的指导下,逐渐有了思路。

首先要采集到网络流量的数据。有了数据,求出流量差,就是网络流量了。那么数据去哪里找呢?

开始学习linux我们经常使用到ifconfig这条命令,来查看那网卡信息,主要是ip地址。其实呢,这信息里面就有通过当前网卡的数据流量。有发出的数据和收到的数据。

[root@www ~]# ifconfig eth0
 eth0      Link encap:Ethernet  HWaddr 00:0C:29:2F:59:46 
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe2f:5946/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:635 errors:0 dropped:0 overruns:0 frame:0
          TX packets:636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:62050 (60.5 KiB)  TX bytes:61036 (59.6 KiB)
          Interrupt:59 Base address:0x2024
 
 
那么如何把需要的数据提取出来呢?
 
 [root@www ~]# ifconfig eth0|awk -F ":" 'NR==8{print $2,$3}'
 F=($2+$3)就是在这一时刻,网络流量的总和。
 
间隔十秒在采集一次数据:S=($2+$3)。
 
计算两次采集到的数据差(S-F)就可以得到,这期间的流量。那么要每隔10s采集一次数据,怎么实现呢?这个是作为流量监控,还要不停地循环下去。
 
#!/bin/bash
 
while true;do
 
F=`ifconfig eth0|awk -F ":" 'NR==8{print $2+$3}'`
      sleep 10
 
S=`ifconfig eth0|awk -F ":" 'NR==8{print $2+$3}'`
      echo  $[($S-$F)/1024]
 
done
 
这样就实现了,网络流量的监控。这种只是实现功能的一种办法,还有许多种方式方法,例如函数等等。大家去完善吧!

相关推荐

小鱼酱 / 0评论 2015-10-15