作者:vivo 互聯(lián)網服務器團隊- Ming Yujia
隨著網絡規(guī)模的快速發(fā)展,網絡狀況的良好與否已經直接關系到了企業(yè)的日常收益,故障中的每一秒都會導致大量的用戶流失與經濟虧損。因此,如何快速發(fā)現(xiàn)網絡問題與定位異常流量已經成為大型企業(yè)內必須優(yōu)先解決的問題,諸多網絡流量分析技術也同時應運而生。
一、概述
隨著網絡規(guī)模的快速發(fā)展,網絡狀況的良好與否已經直接關系到了企業(yè)的日常收益,故障中的每一秒都會導致大量的用戶流失與經濟虧損。每一家企業(yè)都在不斷完善自己的網絡監(jiān)控手段,但在監(jiān)控體系建設過程中,卻又不可避免的面臨以下難點:
網絡流量數(shù)據龐大:由于網絡流量的規(guī)模和復雜性都非常高,很難對大量的數(shù)據進行有效的監(jiān)控和分析。
流量數(shù)據采集分析建設成本高昂:為獲取準確的流量數(shù)據,需要使用高效的數(shù)據采集技術和大容量的存儲設備,以及大量的開發(fā)資源,這使得監(jiān)控成本直線上升。
監(jiān)控手段單一、缺乏擴展性:傳統(tǒng)的監(jiān)控手段一般只能監(jiān)控固定的幾個數(shù)據點,難以針對不同的網絡環(huán)境進行定制化和擴展。
難以快速定位和解決問題:由于網絡流量數(shù)據量大、變化頻繁,往往需要花費大量的時間和精力才能找出問題根源。
因此,如何利用盡可能低的監(jiān)控成本快速發(fā)現(xiàn)網絡問題與定位異常流量已經成為大型企業(yè)內必須優(yōu)先解決的問題,諸多網絡流量分析技術也同時應運而生。
sFlow技術就是這樣一種高效、靈活的解決方案。它可以通過流量采樣技術抽取數(shù)據包中的部分信息,從而實現(xiàn)對大量網絡流量數(shù)據進行持續(xù)監(jiān)控。同時,sFlow技術還具有靈活的配置和擴展性,可以根據實際需求進行定制,并支持多種網絡設備和協(xié)議。這些優(yōu)勢使得sFlow技術在現(xiàn)代網絡監(jiān)控和管理中得到廣泛應用。
二、常見的網絡流量采集技術
主流的網絡流量采集主要分為全流量采集與采樣流量采集兩種。
2.1 全流量采集
全流量采集包括端口鏡像、分光設備等方式。在流量龐大的網絡中,使用端口鏡像方式不僅會導致全鏈路時延增加,而且會使吞吐量龐大情況下的網絡設備壓力激增。分光設備雖然可以降低鏈路時延,但同樣存在采購價格高昂的門檻。除此之外,由于大型企業(yè)內IDC規(guī)模龐大,由此導致的全流量數(shù)據量也會激增,想要完整的靠自研做好全流量數(shù)據分析,不僅需要一定的存儲計算資源,也需要一定的軟件開發(fā)周期,不利于項目的快速搭建成型。
2.2 采樣流量采集
在流量分析系統(tǒng)欠缺的情況下,使用采樣分析的優(yōu)勢就體現(xiàn)出來了,相對于全流量,他部署成本低,數(shù)據分析代價小,很適合對異常流量的快速定位以及網絡內的趨勢占比分析。以下主要對比介紹sFlow與Netflow兩種采樣方式的優(yōu)缺點。

sFlow在流量監(jiān)控上范圍更廣,在滿足硬件要求的IDC內部環(huán)境,使用sFlow進行采樣流量監(jiān)測,可以有效降低網絡設備負載,并且提供實時流量監(jiān)控手段,以應對突發(fā)網絡異常場景。
三、基于sFlow的系統(tǒng)設計
3.1 基礎設計
在滿足硬件條件的情況下,基于sFlow的基礎系統(tǒng)設計很簡單,使用sFlow agent + sFlow collector + sFlow analyser即可實現(xiàn)整個流程的數(shù)據閉環(huán)。
sFlow agent:通過enabled相關網絡設備上的sFlow能力,設定采樣比等參數(shù)并制定收集端相應地址,即可對端口收發(fā)流量進行采集。agent側更重要的反而是如何確定采集的網絡設備范圍,相對于無目的的全量網絡設備部署,針對邊界核心網絡設備進行部署更有意義,因為所有的對外流量最終都必須經過邊界網絡設備。在能更好監(jiān)控外部流量異常的情況下,也能減輕數(shù)據存儲負擔。
sFlow collector:收集并解析agent側采集傳輸?shù)?sFlow datagrams。
sFlow analyser:對格式化的數(shù)據進行可視化分析展示,以供網絡管理員進行有效觀測分析。

3.2 開源+自研:架構進階
在確定了基本架構之后,如何進行組件選用與定制化功能擴充,開源解決方案elastiflow為我們提供了很好的示例,筆者基于開源進行了擴展,以滿足更多定制化功能。
sFlow agent:使用上報統(tǒng)一vip的形式進行端口流量采樣(官方規(guī)定的采樣比需是2^n),可以利用vip的LB能力進行負載均衡,使得sFlow報文均衡打到收集端固定端口。針對不同的網絡線路設定不同的采樣比,在降低數(shù)據存儲的同時也可以保證重要線路更高的精準性。

sFlow collector:使用ELK套件進行數(shù)據收集與可視化分析是比較成熟的技術方案之一。因此,收集端我們使用logstash進行原生數(shù)據報文收集與解析。elastiflow的作者使用了logstash內原生的udp-sFlow報文解析組件進行數(shù)據解析,但筆者在實際測試中發(fā)現(xiàn),雖然該方案能得到結構化更好的數(shù)據格式,但在數(shù)據解析的性能表現(xiàn)上很差,在數(shù)據量龐大的情況下會造成大量數(shù)據丟包現(xiàn)象,導致數(shù)據準確性下降。而sFlowtool由于底層是基于C語言來編寫的,在性能表現(xiàn)上很優(yōu)異,單物理機(32c64g)即可達到10w+tps,雖然對sFlow報文解析后的數(shù)據結構化要弱一點,但可以在后續(xù)分析模塊對數(shù)據進行清洗與結構化構建。sFlowtool分析的數(shù)據示例如下所示。經由logstash的數(shù)據發(fā)送到kafka消息隊列中。
[root@server src]# ./sFlowtool -l
FLOW,10.0.0.254,0,0,00902773db08,001083265e00,0x0800,0,0,10.0.0.1,10.0.0.254,17,0x00,64,35690,161,0x00,143,125,80
FLOW后的字段釋義如下
agent_address
inputPort
outputPort
src_MAC
dst_MAC
ethernet_type
in_vlan
out_vlan
src_IP
dst_IP
IP_protocol
ip_tos
ip_ttl
udp_src_port OR tcp_src_port OR icmp_type
udp_dst_port OR tcp_dst_port OR icmp_code
tcp_flags
packet_size
IP_size
sampling_rate
sFlow analyser:通過從kafka實時消費數(shù)據,將數(shù)據進行清洗結構化,并借助三方meta data,對解析后的數(shù)據進行軟件定義,以便于后續(xù)存儲與分析。
database+display:使用Elasticsearch+Kibana進行存儲與可視化展示,同時也可以利用mertic beat對logstash的采集性能進行監(jiān)控。Kibana作為Bi類的數(shù)據可視化方案,提供了大部分可供免費使用的圖表及Dashboard,可以很好的進行可視化分析。
3.3 分析端軟件定義
擁有原生數(shù)據的情況下,我們已經能基于一些ip五元組等進行基本會話流量分析。但是流量數(shù)據所能體現(xiàn)的價值遠不止這些,利用企業(yè)內其他的cmdb等平臺,可以為我們的流量數(shù)據提供更大價值。
網絡設備維度:通過數(shù)據內的交換機地址,出入向端口,可以根據采集配置的交換機端口index,判斷該條流量出入向。也可基于網絡設備ip,賦予其通道,線路,以及設備名等等其他屬性。
ip維度:ip五元組提供了探索數(shù)據更高的可能,我們可以根據歸屬ip,判斷他的項目,部門等歸屬信息,也可反向關聯(lián)域名。這在對異常流量進行分析判斷時能夠快速定位到所屬業(yè)務方,很大程度提高了運維效率。
3.4 壓縮存儲與可視化自研
由于Elasticsearch本身的數(shù)據壓縮效果不夠理想,使得我們在進行長時間存儲數(shù)據時體量龐大臃腫。相應的,olap型數(shù)據庫Druid很好地解決了這個問題,數(shù)據采樣后經過分析端嚴格的結構化處理,可以在Druid內實現(xiàn)很好的數(shù)據壓縮。除此之外,Druid內嵌的數(shù)據預聚合能力也能更好的幫助我們對歷史數(shù)據進行降精處理,減少存儲壓力。切換存儲引擎后,也就意味著沒辦法再使用Kibana進行通用展示,使用自研的web服務框架也能夠應對靈活的需求場景,實現(xiàn)更多定制化的分析。
3.5 基于Celery設計的輕量流處理模型
雖然流量數(shù)據經過了采樣降精,但整體的數(shù)據量依然很龐大。高效快速的進行流處理,降低整體系統(tǒng)時延至30s內,能夠更快的幫助網絡管理人員發(fā)現(xiàn)問題,除卻利用傳統(tǒng)的流處理工具外,我們也可以使用Celery來構建一個輕量高效易擴展的分布式流處理集群。

Celery是一個簡單、靈活且可靠的,處理大量消息的分布式系統(tǒng),專注于實時處理的異步任務隊列,同時也支持任務調度。我們基于celery實時異步處理的特性,設計 celerybeat → watcher → producer → consumer 的消費鏈路來進行流處理。
celery beat:作為定時任務的觸發(fā)器,每1s向watcher隊列里派發(fā)一個新任務。
watcher worker:在隊列中拿到任務后,轉發(fā)給producer,并根據設置的隊列最大值,對producer隊列進行擁塞控制。
producer worker:在隊列中拿到任務后,從kafka中獲取采集的流量數(shù)據,按照batch size批量發(fā)送給consumer隊列,并根據設置的隊列最大值,對consumer隊列進行擁塞控制。
consumer worker:在隊列中拿到任務后,根據本地緩存/共享緩存內的業(yè)務信息,對采集數(shù)據進行數(shù)據清洗,打業(yè)務標簽等操作,并寫入另一kakfa或直接寫入database。
每一個角色以及節(jié)點可以通過Celery broker進行通信,實現(xiàn)分布式集群部署,針對consumer單元化操作,可以使用eventlet以協(xié)程方式啟動,以保證集群高并發(fā)消費。
四、應用場景
4.1 機房維度流量分析
通過基于網絡cmdb的ip匹配,對流量數(shù)據進行機房維度的匯總,可以得到機房整體的對外出入向流量分析,在IDC同外部交互時,整體流量的趨勢變化,是判斷帶寬占用程度的直接標準。

4.2 網絡線路信息關聯(lián)
通過對網絡設備基于ip+ifindex的邏輯信息映射,可以對核心通道線路做到聚合展示,在針對一些公網線路異常,專用線路帶寬打滿等異常問題時,通過觀察線路分析可以直接準確定位故障發(fā)生的第一時間點。

4.3 ip會話信息挖掘
雖然sflow只截取了報文的頭部信息而不包含數(shù)據包部分,但ip五元組本身也提供了極大的網絡流量分析價值。
利用會話信息,我們可以準確有效的定位異常流量的ip歸屬,通過ip+服務端口的,我們甚至可以定位具體產生流量異常的服務與進程,從而做出下一步決策。除此之外,ip也能同企業(yè)內CMDB產生聯(lián)動,定位到ip所屬資源的所在資源組,從而得到不同部門/行政組產生的流量占比分析,這同時也有利于在產生異常流量時第一時間感知到相關業(yè)務,并進行通知管控。

4.4 ip歸屬地分析
除了結合內部信息,通過運營商提供的歸屬地信息,我們可以查看ip訪問的來源,進行相關歸屬地分析與Dashboard制作。

五、總結
要實現(xiàn)對網絡全面、實時的監(jiān)控分析必須依靠先進有效的網絡監(jiān)控協(xié)議和技術來滿足業(yè)務日益增長的需求?;趕Flow的流量分析雖然在輕量化構建上有著很大的優(yōu)勢,在面對異常流量時也能夠基于流量趨勢與分布占比做出快速反應。但sFlow本身的采樣卻不包含報文內數(shù)據包的信息,針對一些sql注入、數(shù)據安全等等網絡安全攻防問題,沒辦法提供準確定位與解決方案。因此,全流量分析也應是流量分析系統(tǒng)未來必不可少的一環(huán),兩者相結合才能夠提供更全面、更精細化的流量監(jiān)控,為數(shù)據中心的網絡安全保駕護航。
六、未來展望
雖然sFlow技術在網絡性能監(jiān)控和管理領域中得到了廣泛應用,但在未來更大規(guī)模的網絡流量場景沖擊下,還需要具備更多的能力:
1.支持更多協(xié)議和應用:sFlow監(jiān)控的思想不僅適用于網絡流量,還可以監(jiān)控應用流量、虛擬化環(huán)境、云平臺等。未來,sFlow技術應該支持更多的協(xié)議和應用,以更好地適應新型網絡環(huán)境。
2.自適應流量采集技術:sFlow技術的流量采集技術是固定周期的,但是隨著網絡流量的變化,固定周期的采集可能無法準確反映網絡實時狀態(tài)。未來,sFlow監(jiān)控技術應該支持自適應流量采集技術,能夠根據實際網絡流量變化自動調整采集周期。
3.便捷的管理功能:sFlow目前的配置更多依賴于網絡管理人員在交換機上進行配置,無法實現(xiàn)一鍵下發(fā),自動發(fā)現(xiàn),快速調整采樣比等等功能,未來更需要一個能夠便捷下發(fā)命令,熱加載配置變更的sFlow管理平臺。