高效構(gòu)建 vivo 企業(yè)級網(wǎng)絡(luò)流量分析系統(tǒng)
一、概述
隨著網(wǎng)絡(luò)規(guī)模的快速發(fā)展,網(wǎng)絡(luò)狀況的良好與否已經(jīng)直接關(guān)系到了企業(yè)的日常收益,故障中的每一秒都會導(dǎo)致大量的用戶流失與經(jīng)濟虧損。每一家企業(yè)都在不斷完善自己的網(wǎng)絡(luò)監(jiān)控手段,但在監(jiān)控體系建設(shè)過程中,卻又不可避免的面臨以下難點:
- 網(wǎng)絡(luò)流量數(shù)據(jù)龐大:由于網(wǎng)絡(luò)流量的規(guī)模和復(fù)雜性都非常高,很難對大量的數(shù)據(jù)進行有效的監(jiān)控和分析。
- 流量數(shù)據(jù)采集分析建設(shè)成本高昂:為獲取準確的流量數(shù)據(jù),需要使用高效的數(shù)據(jù)采集技術(shù)和大容量的存儲設(shè)備,以及大量的開發(fā)資源,這使得監(jiān)控成本直線上升
- 監(jiān)控手段單一、缺乏擴展性:傳統(tǒng)的監(jiān)控手段一般只能監(jiān)控固定的幾個數(shù)據(jù)點,難以針對不同的網(wǎng)絡(luò)環(huán)境進行定制化和擴展。
- 難以快速定位和解決問題:由于網(wǎng)絡(luò)流量數(shù)據(jù)量大、變化頻繁,往往需要花費大量的時間和精力才能找出問題根源。
因此,如何利用盡可能低的監(jiān)控成本快速發(fā)現(xiàn)網(wǎng)絡(luò)問題與定位異常流量已經(jīng)成為大型企業(yè)內(nèi)必須優(yōu)先解決的問題,諸多網(wǎng)絡(luò)流量分析技術(shù)也同時應(yīng)運而生。
sFlow技術(shù)就是這樣一種高效、靈活的解決方案。它可以通過流量采樣技術(shù)抽取數(shù)據(jù)包中的部分信息,從而實現(xiàn)對大量網(wǎng)絡(luò)流量數(shù)據(jù)進行持續(xù)監(jiān)控。同時,sFlow技術(shù)還具有靈活的配置和擴展性,可以根據(jù)實際需求進行定制,并支持多種網(wǎng)絡(luò)設(shè)備和協(xié)議。這些優(yōu)勢使得sFlow技術(shù)在現(xiàn)代網(wǎng)絡(luò)監(jiān)控和管理中得到廣泛應(yīng)用。
二、常見的網(wǎng)絡(luò)流量采集技術(shù)
主流的網(wǎng)絡(luò)流量采集主要分為全流量采集與采樣流量采集兩種。
2.1 全流量采集
全流量采集包括端口鏡像、分光設(shè)備等方式。在流量龐大的網(wǎng)絡(luò)中,使用端口鏡像方式不僅會導(dǎo)致全鏈路時延增加,而且會使吞吐量龐大情況下的網(wǎng)絡(luò)設(shè)備壓力激增。分光設(shè)備雖然可以降低鏈路時延,但同樣存在采購價格高昂的門檻。除此之外,由于大型企業(yè)內(nèi)IDC規(guī)模龐大,由此導(dǎo)致的全流量數(shù)據(jù)量也會激增,想要完整的靠自研做好全流量數(shù)據(jù)分析,不僅需要一定的存儲計算資源,也需要一定的軟件開發(fā)周期,不利于項目的快速搭建成型。
2.2 采樣流量采集
在流量分析系統(tǒng)欠缺的情況下,使用采樣分析的優(yōu)勢就體現(xiàn)出來了,相對于全流量,他部署成本低,數(shù)據(jù)分析代價小,很適合對異常流量的快速定位以及網(wǎng)絡(luò)內(nèi)的趨勢占比分析。以下主要對比介紹sFlow與Netflow兩種采樣方式的優(yōu)缺點。
sFlow在流量監(jiān)控上范圍更廣,在滿足硬件要求的IDC內(nèi)部環(huán)境,使用sFlow進行采樣流量監(jiān)測,可以有效降低網(wǎng)絡(luò)設(shè)備負載,并且提供實時流量監(jiān)控手段,以應(yīng)對突發(fā)網(wǎng)絡(luò)異常場景。
三、基于sFlow的系統(tǒng)設(shè)計
3.1 基礎(chǔ)設(shè)計
在滿足硬件條件的情況下,基于sFlow的基礎(chǔ)系統(tǒng)設(shè)計很簡單,使用sFlow agent + sFlow collector + sFlow analyser即可實現(xiàn)整個流程的數(shù)據(jù)閉環(huán)。
sFlow agent:通過enabled相關(guān)網(wǎng)絡(luò)設(shè)備上的sFlow能力,設(shè)定采樣比等參數(shù)并制定收集端相應(yīng)地址,即可對端口收發(fā)流量進行采集。agent側(cè)更重要的反而是如何確定采集的網(wǎng)絡(luò)設(shè)備范圍,相對于無目的的全量網(wǎng)絡(luò)設(shè)備部署,針對邊界核心網(wǎng)絡(luò)設(shè)備進行部署更有意義,因為所有的對外流量最終都必須經(jīng)過邊界網(wǎng)絡(luò)設(shè)備。在能更好監(jiān)控外部流量異常的情況下,也能減輕數(shù)據(jù)存儲負擔。
sFlow collector:收集并解析agent側(cè)采集傳輸?shù)?sFlow datagrams。
sFlow analyser:對格式化的數(shù)據(jù)進行可視化分析展示,以供網(wǎng)絡(luò)管理員進行有效觀測分析。
圖片
3.2 開源+自研:架構(gòu)進階
在確定了基本架構(gòu)之后,如何進行組件選用與定制化功能擴充,開源解決方案elastiflow為我們提供了很好的示例,筆者基于開源進行了擴展,以滿足更多定制化功能。
sFlow agent:使用上報統(tǒng)一vip的形式進行端口流量采樣(官方規(guī)定的采樣比需是2^n),可以利用vip的LB能力進行負載均衡,使得sFlow報文均衡打到收集端固定端口。針對不同的網(wǎng)絡(luò)線路設(shè)定不同的采樣比,在降低數(shù)據(jù)存儲的同時也可以保證重要線路更高的精準性。
圖片
sFlow collector:使用ELK套件進行數(shù)據(jù)收集與可視化分析是比較成熟的技術(shù)方案之一。因此,收集端我們使用logstash進行原生數(shù)據(jù)報文收集與解析。elastiflow的作者使用了logstash內(nèi)原生的udp-sFlow報文解析組件進行數(shù)據(jù)解析,但筆者在實際測試中發(fā)現(xiàn),雖然該方案能得到結(jié)構(gòu)化更好的數(shù)據(jù)格式,但在數(shù)據(jù)解析的性能表現(xiàn)上很差,在數(shù)據(jù)量龐大的情況下會造成大量數(shù)據(jù)丟包現(xiàn)象,導(dǎo)致數(shù)據(jù)準確性下降。而sFlowtool由于底層是基于C語言來編寫的,在性能表現(xiàn)上很優(yōu)異,單物理機(32c64g)即可達到10w+tps,雖然對sFlow報文解析后的數(shù)據(jù)結(jié)構(gòu)化要弱一點,但可以在后續(xù)分析模塊對數(shù)據(jù)進行清洗與結(jié)構(gòu)化構(gòu)建。sFlowtool分析的數(shù)據(jù)示例如下所示。經(jīng)由logstash的數(shù)據(jù)發(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ù)據(jù),將數(shù)據(jù)進行清洗結(jié)構(gòu)化,并借助三方meta data,對解析后的數(shù)據(jù)進行軟件定義,以便于后續(xù)存儲與分析。
database+display:使用Elasticsearch+Kibana進行存儲與可視化展示,同時也可以利用mertic beat對logstash的采集性能進行監(jiān)控。Kibana作為Bi類的數(shù)據(jù)可視化方案,提供了大部分可供免費使用的圖表及Dashboard,可以很好的進行可視化分析。
3.3 分析端軟件定義
擁有原生數(shù)據(jù)的情況下,我們已經(jīng)能基于一些ip五元組等進行基本會話流量分析。但是流量數(shù)據(jù)所能體現(xiàn)的價值遠不止這些,利用企業(yè)內(nèi)其他的cmdb等平臺,可以為我們的流量數(shù)據(jù)提供更大價值。
網(wǎng)絡(luò)設(shè)備維度:通過數(shù)據(jù)內(nèi)的交換機地址,出入向端口,可以根據(jù)采集配置的交換機端口index,判斷該條流量出入向。也可基于網(wǎng)絡(luò)設(shè)備ip,賦予其通道,線路,以及設(shè)備名等等其他屬性。
ip維度:ip五元組提供了探索數(shù)據(jù)更高的可能,我們可以根據(jù)歸屬ip,判斷他的項目,部門等歸屬信息,也可反向關(guān)聯(lián)域名。這在對異常流量進行分析判斷時能夠快速定位到所屬業(yè)務(wù)方,很大程度提高了運維效率。
3.4 壓縮存儲與可視化自研
由于Elasticsearch本身的數(shù)據(jù)壓縮效果不夠理想,使得我們在進行長時間存儲數(shù)據(jù)時體量龐大臃腫。相應(yīng)的,olap型數(shù)據(jù)庫Druid很好地解決了這個問題,數(shù)據(jù)采樣后經(jīng)過分析端嚴格的結(jié)構(gòu)化處理,可以在Druid內(nèi)實現(xiàn)很好的數(shù)據(jù)壓縮。除此之外,Druid內(nèi)嵌的數(shù)據(jù)預(yù)聚合能力也能更好的幫助我們對歷史數(shù)據(jù)進行降精處理,減少存儲壓力。切換存儲引擎后,也就意味著沒辦法再使用Kibana進行通用展示,使用自研的web服務(wù)框架也能夠應(yīng)對靈活的需求場景,實現(xiàn)更多定制化的分析。
3.5 基于Celery設(shè)計的輕量流處理模型
雖然流量數(shù)據(jù)經(jīng)過了采樣降精,但整體的數(shù)據(jù)量依然很龐大。高效快速的進行流處理,降低整體系統(tǒng)時延至30s內(nèi),能夠更快的幫助網(wǎng)絡(luò)管理人員發(fā)現(xiàn)問題,除卻利用傳統(tǒng)的流處理工具外,我們也可以使用Celery來構(gòu)建一個輕量高效易擴展的分布式流處理集群。
圖片
Celery是一個簡單、靈活且可靠的,處理大量消息的分布式系統(tǒng),專注于實時處理的異步任務(wù)隊列,同時也支持任務(wù)調(diào)度。我們基于celery實時異步處理的特性,設(shè)計 celerybeat → watcher → producer → consumer 的消費鏈路來進行流處理。
celery beat:作為定時任務(wù)的觸發(fā)器,每1s向watcher隊列里派發(fā)一個新任務(wù)。
watcher worker:在隊列中拿到任務(wù)后,轉(zhuǎn)發(fā)給producer,并根據(jù)設(shè)置的隊列最大值,對producer隊列進行擁塞控制。
producer worker:在隊列中拿到任務(wù)后,從kafka中獲取采集的流量數(shù)據(jù),按照batch size批量發(fā)送給consumer隊列,并根據(jù)設(shè)置的隊列最大值,對consumer隊列進行擁塞控制。
consumer worker:在隊列中拿到任務(wù)后,根據(jù)本地緩存/共享緩存內(nèi)的業(yè)務(wù)信息,對采集數(shù)據(jù)進行數(shù)據(jù)清洗,打業(yè)務(wù)標簽等操作,并寫入另一kakfa或直接寫入database。
每一個角色以及節(jié)點可以通過Celery broker進行通信,實現(xiàn)分布式集群部署,針對consumer單元化操作,可以使用eventlet以協(xié)程方式啟動,以保證集群高并發(fā)消費。
四、應(yīng)用場景
4.1 機房維度流量分析
通過基于網(wǎng)絡(luò)cmdb的ip匹配,對流量數(shù)據(jù)進行機房維度的匯總,可以得到機房整體的對外出入向流量分析,在IDC同外部交互時,整體流量的趨勢變化,是判斷帶寬占用程度的直接標準。
4.2 網(wǎng)絡(luò)線路信息關(guān)聯(lián)
通過對網(wǎng)絡(luò)設(shè)備基于ip+ifindex的邏輯信息映射,可以對核心通道線路做到聚合展示,在針對一些公網(wǎng)線路異常,專用線路帶寬打滿等異常問題時,通過觀察線路分析可以直接準確定位故障發(fā)生的第一時間點。
4.3 ip會話信息挖掘
雖然sflow只截取了報文的頭部信息而不包含數(shù)據(jù)包部分,但ip五元組本身也提供了極大的網(wǎng)絡(luò)流量分析價值。
利用會話信息,我們可以準確有效的定位異常流量的ip歸屬,通過ip+服務(wù)端口的,我們甚至可以定位具體產(chǎn)生流量異常的服務(wù)與進程,從而做出下一步?jīng)Q策。除此之外,ip也能同企業(yè)內(nèi)CMDB產(chǎn)生聯(lián)動,定位到ip所屬資源的所在資源組,從而得到不同部門/行政組產(chǎn)生的流量占比分析,這同時也有利于在產(chǎn)生異常流量時第一時間感知到相關(guān)業(yè)務(wù),并進行通知管控。
4.4 ip歸屬地分析
除了結(jié)合內(nèi)部信息,通過運營商提供的歸屬地信息,我們可以查看ip訪問的來源,進行相關(guān)歸屬地分析與Dashboard制作。
五、總結(jié)
要實現(xiàn)對網(wǎng)絡(luò)全面、實時的監(jiān)控分析必須依靠先進有效的網(wǎng)絡(luò)監(jiān)控協(xié)議和技術(shù)來滿足業(yè)務(wù)日益增長的需求。基于sFlow的流量分析雖然在輕量化構(gòu)建上有著很大的優(yōu)勢,在面對異常流量時也能夠基于流量趨勢與分布占比做出快速反應(yīng)。但sFlow本身的采樣卻不包含報文內(nèi)數(shù)據(jù)包的信息,針對一些sql注入、數(shù)據(jù)安全等等網(wǎng)絡(luò)安全攻防問題,沒辦法提供準確定位與解決方案。因此,全流量分析也應(yīng)是流量分析系統(tǒng)未來必不可少的一環(huán),兩者相結(jié)合才能夠提供更全面、更精細化的流量監(jiān)控,為數(shù)據(jù)中心的網(wǎng)絡(luò)安全保駕護航。
六、未來展望
雖然sFlow技術(shù)在網(wǎng)絡(luò)性能監(jiān)控和管理領(lǐng)域中得到了廣泛應(yīng)用,但在未來更大規(guī)模的網(wǎng)絡(luò)流量場景沖擊下,還需要具備更多的能力:
1.支持更多協(xié)議和應(yīng)用:sFlow監(jiān)控的思想不僅適用于網(wǎng)絡(luò)流量,還可以監(jiān)控應(yīng)用流量、虛擬化環(huán)境、云平臺等。未來,sFlow技術(shù)應(yīng)該支持更多的協(xié)議和應(yīng)用,以更好地適應(yīng)新型網(wǎng)絡(luò)環(huán)境。
2.自適應(yīng)流量采集技術(shù):sFlow技術(shù)的流量采集技術(shù)是固定周期的,但是隨著網(wǎng)絡(luò)流量的變化,固定周期的采集可能無法準確反映網(wǎng)絡(luò)實時狀態(tài)。未來,sFlow監(jiān)控技術(shù)應(yīng)該支持自適應(yīng)流量采集技術(shù),能夠根據(jù)實際網(wǎng)絡(luò)流量變化自動調(diào)整采集周期。
3.便捷的管理功能:sFlow目前的配置更多依賴于網(wǎng)絡(luò)管理人員在交換機上進行配置,無法實現(xiàn)一鍵下發(fā),自動發(fā)現(xiàn),快速調(diào)整采樣比等等功能,未來更需要一個能夠便捷下發(fā)命令,熱加載配置變更的sFlow管理平臺。