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技術白皮書