Linux下网络流量实时监控,使用工具和脚本实现

一、工具篇

    在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,工具的好处就是随手一个命令就可以查看网卡即时流量。

 

1.iptraf软件

   iptraf 是一个基于ncurses的IP LAN监控软件,它可以生成多种网络统计数据,如不TCP信息,UDP连接数,ICMP和OSPF的信息,网卡的负载情况,结点状态,IP错误检查等等。

   如果iptraf不加任何参数,则会进入交互式模式,进入到图形菜单,选择你要的功能

1)安装

$ yum provides iptraf #查看yum源中是否有软件包

$ yum -y install yum -y install iptraf-ng

2)打开软件

$ iptraf-ng #输入命令直接进入软件

  • 第一项:IP流量监控
  • 第二项:常规查看网卡流量状态。只查看各网卡的总流量
  • 第三项:详细查看网卡流量状态。比如按TCP,UDP,ARP等协议查看
  • 第四项:统计信息分类
  • 第五项:LAN监控
  • 第六项:过滤
  • 第七项:配置 

  选择第一项

       

3)选择网卡

选择监控一张网卡或者全部网卡

  界面分上下两部分,上部分可详细显示哪个与之相连的IP,发了多少包,即时流量是多少,下部分,可以显示udp等信息。

 

2.sar软件

假如Keepalived有10个VIP,怎么查看每个VIP的流量呢?

这里就可以使用sar命令查看网卡流量了。前提是你Keepalived监听网卡时。设置了网卡的子接口。

也就是说你网卡绑定子接口上。这样eth0:0,eth0:1,每个网卡流量都可以看了

 

 

使用 sar软件

1)sar安装

$ yum provides sar #查看sar的软件提供包

$ yum -y install sysstat

 

2) sar的使用

sar命令包含在sysstat工具包中,提供系统的众多统计数据。其在不同的系统上命令有些差异,某些系统提供的sar支持基于网络接口的数据统计,也可以查看设备上每秒收发包的个数和流量。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[sre@CDVM-213017031 ~]$ sar -n DEV 1 2

Linux 2.6.32-431.el6.x86_64 (CDVM-213017031)  05/04/2017  _x86_64_ (4 CPU)

 

08:05:30 PM  IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

08:05:31 PM  lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00

08:05:31 PM  eth0 1788.00 1923.00 930.47 335.60  0.00  0.00  0.00

 

08:05:31 PM  IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

08:05:32 PM  lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00

08:05:32 PM  eth0 1387.00 1469.00 652.12 256.98  0.00  0.00  0.00

 

Average:  IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s

Average:   lo  0.00  0.00  0.00  0.00  0.00  0.00  0.00

Average:   eth0 1587.50 1696.00 791.29 296.29  0.00  0.00  0.00

命令后面1 2 意思是:每一秒钟取1次值,取2次。

DEV显示网络接口信息

另外,-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含义如下:

  1. DEV显示网络接口信息。
  2. EDEV显示关于网络错误的统计数据。
  3. NFS统计活动的NFS客户端的信息。
  4. NFSD统计NFS服务器的信息
  5. SOCK显示套接字信息
  6. ALL显示所有5个开关

参数说明:

  1. IFACE:LAN接口
  2. rxpck/s:每秒钟接收的数据包
  3. txpck/s:每秒钟发送的数据包
  4. rxbyt/s:每秒钟接收的字节数
  5. txbyt/s:每秒钟发送的字节数
  6. rxcmp/s:每秒钟接收的压缩数据包
  7. txcmp/s:每秒钟发送的压缩数据包
  8. rxmcst/s:每秒钟接收的多播数据包
  9. rxerr/s:每秒钟接收的坏数据包
  10. txerr/s:每秒钟发送的坏数据包
  11. coll/s:每秒冲突数
  12. rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
  13. txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
  14. txcarr/s:发送数据包时,每秒载波错误数
  15. rxfram/s:每秒接收数据包的帧对齐错误数
  16. rxfifo/s:接收的数据包每秒FIFO过速的错误数
  17. txfifo/s:发送的数据包每秒FIFO过速的错误数

这种方式简单,直观,推荐使用。

 

二、脚本篇

1.ifconfig命令

此脚本不需要额外再安装软件,并且可自定义欲查看接口,精确到小数,可根据流量大小灵活显示单位,默认采集间隔为1秒。

用法为:

1、将脚本保存为可执行脚本文件,比如叫watchDev.sh。

2、chmod +x ./watchDev.sh 将文件改成可执行脚本。

3、sh watchDev.sh 运行脚本,输入被监控的网卡

脚本是通过读取ifconfig命令中的网络实时数据,并通过简单计算得到的。

#!/bin/bash

read -p 'Input dev you want to notify: ' dev
ifconfig $dev >& /dev/null
if [ $? -ne 0 ];then
   echo "The dev not exist."
   exit 1
fi 

while true
do
 RX_pre=`ifconfig eth0 | awk 'NR==5{print $5}'`
 TX_pre=`ifconfig eth0 | awk 'NR==7{print $5}'`
 sleep 1
 RX_aft=`ifconfig eth0 | awk 'NR==5{print $5}'`
 TX_aft=`ifconfig eth0 | awk 'NR==7{print $5}'`
 
 clear
 echo -e "`date +%k:%M:%S` \t TX \t RX" 
 
 RX=$((RX_aft-RX_pre))
 TX=$((TX_aft-TX_pre))

 echo -e "\t \t $TX \t $RX "
  
 if [ $RX -lt 1024 ];then
    echo "${RX}k/s"
 elif [ $RX -lt 1048576 ];then
    echo "$((RX/1024))kb/s"
 else
    echo "$((RX/1048576))m/s"
 fi
 if [ $TX -lt 1024 ];then
    echo "${TX}k/S"
 elif [ $TX -lt 1048576 ];then
    echo "$((TX/1024))kb/s"
 else
    echo "$((TX/1048576))m/s"
 fi
done 

 

 

2. 使用watch命令,配合ifconfig、more /proc/net/dev、cat /proc/net/dev来实时监控。比如执行 watch -n 1 "ifconfig eth0"

   watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。在Linux下,watch是周期性的执行下个程序,并全屏显示执行结果。-n 代表刷新时间,-n 1每1秒刷新一次

利用ifconfig命令实时监控

$ watch -n 1 "ifconfig eth0 | awk 'NR==5||NR==7{print $5}'"

 

利用 /proc/net/dev文件实时监控

$ watch -n 1 "cat /proc/net/dev"

 

3./proc/net/dev文件补充

$ cat /proc/net/dev

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 4560804496 3809625    0    0    0     0          0         0 242461241 2405504    0    0    0     0       0          0
    lo: 6542552  130097    0    0    0     0          0         0  6542552  130097    0    0    0     0       0          0

   Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。/proc文件系统中包含了很多目录,其中/proc/net/dev 保存了网络适配器及统计信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值