虚拟机ping延迟问题排查时,通过tcpdump抓波分析定位到网络延迟的原因是因为网卡流量间歇性暴增,打满了单边(bonding)千兆网卡端口。但是,究竟是什么类型网络流量导致了网络拥塞?复杂的集群网络部署,混合了分布式存储、虚拟化网络、海量服务器日志采集等数据流,需要能够定位到具体的流量才能解决问题根源。

最初通过google,我发现有推荐古老的网络工具TCPTrack(然而这个工具已经停止开发并且在大负载千兆网络下很难正确工作),也有推荐使用WEB分析平台ntop(但是部署使用略复杂有些杀鸡用牛刀的感觉)。

网络开发同学推荐了一个简单实用的终端工具iftop,最初我以为只是IP流量展示(默认没有参数使用确实只展示主机间流量),但是简单查看了help,发现确实是一个非常实用展示网络端口流量的简洁工具,确实适合这种场景下使用。

iftop简介

iftop是一个命令行系统监控工具用来显示网络连接。默认按照带宽使用排序连接,并且最大带宽消耗排最上方。iftop在命名的网络接口上监听网络流量并显示按照主机对显示当前流量带宽。

如果没有指定接口,iftop将监听在外部接口(使用libcaplibncurses)的第一个接口上。iftop必须使用超级管理员权限运行,因为需要监控所有网络流量。

默认iftop将解析地址对应的主机名并计算所有通过过滤器的IP地址。主机名查询会增加网络流量而显示在网络流量展示中。

iftop安装

EPEL(Extra Packages for Enterprise Linux)提供了iftop安装包,使用以下命令安装EPEL repo再安装iftop:

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.

yum install iftop -y

iftop窗口说明

iftop界面

  • 默认使用第一个网络接口eth0
  • 默认显示rates的3列数据分别表示:最近2秒,10秒和40秒的平均流量。
  • peak指网络速率的尖峰值(最大)
  • cum表示累积流量cumulative,在交互界面时按下T就可以看到主机对之间累计的网络数据流量

iftop交互界面操作

  • T - 显示或隐藏累积网络数据量(cumulative),会在显示主机对的3列网络速率rate左边再增加一列显示累积数据量cum
  • S - 显示源端端口
  • D - 显示目的端端口
  • n - 显示主机IP地址而不是解析的主机名
  • 1/2/3 - 按照指定列进行排序
  • < - 根据源名字排序
  • > - 根据目的名字排序
  • P - 暂停显示(否则就不断更新当前显示)
  • j/k - 滚动显示
  • ? - 帮助

iftop配置文件

~/.iftoprc是默认配置文件,格式是 name:value,举例

port-display: on

iftop过滤和排序

在交互模式,按下l(表示limit)会在顶端显示一个文本输入框,可以输入过滤规则,只显示特定内容,例如只显示包含字符串dropbox,则会过滤显示主机名包含dropbox的流

iftop过滤

iftop启动参数解析

启动参数实际就是交互中的模式

Synopsis: iftop -h | [-npbBP] [-i interface] [-f filter code] [-N net/mask]

   -h                  显示帮助信息
   -n                  不执行主机名DNS解析(即直接显示IP地址而不是主机名)
   -N                  不执行端口转换成服务操作(直接显示端口数字)
   -p                  运行在混杂模式(此时会显示整个网段中其他主机`部分`流量)
   -b                  不显示流量的图形条
   -B                  采用字节(bytes)显示带宽
   -i interface        监听在指定网络接口
   -f filter code      使用过滤代码来选择计数的数据包(默认是none,但是只计算IP包)
   -F net/mask         显示网络的in/out数据流
   -P                  显示端口
   -m limit            设置带宽等级的上限
   -c config file      指定替代的配置文件

iftop可以接收一系列启动参数,大多数参数和交互界面的快捷键相关。

使用-f参数是一种过滤特性数据包的方法,可以组合网络,主机或端口。例如以下只显示在/dev/wlan0无线网卡接口的SSH数据包:

iftop -i wlan0 -f "dst port 22"

一些组合案例:

过滤器 描述
dst host 1.2.3.4 所有目标地址是1.2.3.4的数据包
src port 22 所有从端口22发出的数据包
dst portrange 22-23 端口范围是22到23范围的数据包
gateway 1.2.3.5 使用网关地址1.2.3.5的数据包

使用bonding的多网卡物理服务器上,可以开启两个终端窗口,分别对两个物理网卡分析流量

iftop -n -N -P -B -i eth0

iftop -n -N -P -B -i eth1

这样可以观察bonding网卡不同的流量来判断网络均衡情况。

参考

results matching ""

    No results matching ""