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