基于Mininet,搭建简单的sFlow测试环境
1、实验环境
- 虚拟机软件(vmware workstation)
- 装有 mininet、python2、Docker、sFlow-RT 的 Ubuntu20.04
2、实验原理
sFlow 技术是一种以设备端口为基本单元的数据流随机采样的流量监控技术,不仅可以提供完整的第二层到第四层甚至全网范围内的实时流量信息,而且可以适应超大网络流量(如大于10Gbit/s)环境下的流量分析,让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。sFlow 监控工具由 sFlow Agent 和 sFlow Collector 两部分组成。Agent 作为客户端,一般内嵌于网络转发设备(如交换机、路由器),通过获取本设备上的接口统计信息和数据信息,将信息封装成 sFlow 报文,当 sFlow 报文缓冲区满或是在 sFlow 报文缓存时间(缓存时间为1秒)超时后,sFlow Agent会将 sFlow 报文发送到指定的Collector。Collector 作为远端服务器,负责对 sFlow 报文分析、汇总、生成流量报告。sFlow 的基本工作原理如图所示:
sFlow-RT 是一款 sFlow Collector,sFlow-RT 从嵌入在网络设备,主机和应用程序中的标准 sFlow Agent 接收连续的遥测流,并将其转换为可通过 REST API 访问的可衡量指标。
指标可以轻松地与各种现场和云,业务流程,DevOps 和软件定义的网络(SDN)工具集成。
3、实验步骤
3.1、环境搭建
在控制台输入以下命令在 Docker 容器中部署并云心 sFlow-RT(有关更多选项,请参见 sflow / sflow-rt):
docker pull sflow/sflow-rt
docker run -p 8008:8008 -p 6343:6343/udp sflow/sflow-rt
sFlow-RT 的功能并没有集成在一起,而是采用组件方式,需要其它功能需要额外安装,例如想要实时监视Internet Exchange(IX)流量,执行以下命令:
docker pull sflow/ix-metrics
之后重启 sFlow-RT。更多功能见 https://sflow-rt.com/download.php
3.2、启动验证
虚拟机中的 sFlow 进程已经在 Docker 中运行,可通过以下命令查看:
docker ps
3.3、部署sFlow Agent
-
启动 Mininet 服务,模拟搭建一个交换机下挂2个主机的默认网络拓扑结构,命令如下:
mn
-
在 Mininet 窗口输入
nodes
命令可查看当前有主机h1和h2、默认控制器c0、网桥s1,并且 h1 的 IP 是10网段。
-
重启一个终端,输入ifconfig查看当前网卡状态,网桥s1无IP,通过eth0端口是无法监控到Mininet内部两个主机的ping测试。因此需要把eth0端口IP复制给s1,由s1端口作为sFlow Agent来监听: 虚拟机IP地址:
ovs-vsctl add-port s1 eth0 ovs-vsctl set Interface eth0 type=internal ifconfig s1 10.0.0.3 netmask 255.255.255.0
-
输入
ifconfig |more
命令查看配置后的各端口状态,如下图,s1 已经得到 eth0 之前的IP和掩码,eth0 无IP:
-
切换到Mininet窗口,执行 ping 测试,检查端口是否配置正确。如果 ping 通,则一直保持ping状态产生流量,否则仔细检查配置。
h1 ping h2
-
切换窗口,开启 OvS 的 sFlow 功能,并配置 sFlow Agent,命令如下:
ovs-vsctl -- --id=@sflow create sFlow agent=s1 target=\"127.0.0.1:6343\" header=128 sampling=64 polling=1 -- set bridge s1 sflow=@sflow
注:该命令执行的次数和需要开启sflow的网桥的数目有关,有几个网桥,就需要执行几次此命令。参数说明:
- agent:虚拟机对应的某个监控流量的网卡,本实验用s1网卡产生和监控流量;
- target:sFlow Collector 的 IP,默认端口6343;
- bridge:需要开启 sflow 的网桥;
-
配置完成后,可以输入如下命令查看已经配置的 sFlow Agent 信息:
ovs-vsctl list sflow
如果要删除该条Agent信息,可以用如下命令:
ovs-vsctl remove bridge s1 sflow $SFLOWUUID
-
在虚拟机窗口输入
ip link
命令,查看交换机端口名称与端口编号的映射关系,如下图 eth0 对应的编号是11,s1-eth1 对应的编号是7,s1-eth2 对应的编号是8,s1 对应的编号是10。
4、查看监控结果
通过 dashboard-example 组件监控图如下图所示:
通过 Metric Browser 组件可以对很多 Metric 例如 ovs_dp_flows、ovs_dp_hits、ipspeed等等进行监测,对 ovs_dp_flows 的监控如下图所示:
5、报文分析
5.1 sFlow的采样报文格式
sFlow 报文采用 UDP 封装,缺省目的端口号为知名端口 6343。sFlow 报文共有4种报文头格式,分别为 Flow sample、Expanded Flow sample、Counter sample、Expanded Counter sample。其中Expanded Flow sample和Expanded Counter sample是sFlow version5新增内容,是Flow sample和Counter sample的扩展,但不前向兼容。所有的Extended的采样内容必须使用Expanded采样报文头封装。
5.2 sFlow的两种采样
sFlow Agent提供了两种采样方式供用户从不同的角度分析网络流量状况,分别为Flow采样以及Counter采样。
5.2.1 Flow采样
Flow采样是sFlow Agent设备在指定端口上按照特定的采样方向和采样比对报文进行采样分析,并将分析的结果通过sFlow报文发送到Collector设备的过程。
5.2.2 Counter采样
Counter采样是sFlow Agent设备周期性的获取接口上的流量统计,并将这些统计信息通过sFlow报文发送给Collector设备的过程。
5.3 报文抓取
用 Wireshark 抓取的报文中显示 Malformed packet 错误,只能显示一部分信息:
参考文献
- 华为 sFlow技术白皮书