一、工具篇
在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,工具的好处就是随手一个命令就可以查看网卡即时流量。
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 |
|
命令后面1 2 意思是:每一秒钟取1次值,取2次。
DEV显示网络接口信息
另外,-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含义如下:
- DEV显示网络接口信息。
- EDEV显示关于网络错误的统计数据。
- NFS统计活动的NFS客户端的信息。
- NFSD统计NFS服务器的信息
- SOCK显示套接字信息
- ALL显示所有5个开关
参数说明:
- IFACE:LAN接口
- rxpck/s:每秒钟接收的数据包
- txpck/s:每秒钟发送的数据包
- rxbyt/s:每秒钟接收的字节数
- txbyt/s:每秒钟发送的字节数
- rxcmp/s:每秒钟接收的压缩数据包
- txcmp/s:每秒钟发送的压缩数据包
- rxmcst/s:每秒钟接收的多播数据包
- rxerr/s:每秒钟接收的坏数据包
- txerr/s:每秒钟发送的坏数据包
- coll/s:每秒冲突数
- rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
- txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
- txcarr/s:发送数据包时,每秒载波错误数
- rxfram/s:每秒接收数据包的帧对齐错误数
- rxfifo/s:接收的数据包每秒FIFO过速的错误数
- 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 保存了网络适配器及统计信息。