◆臧其事 謝立帆 李思宇
一種基于網(wǎng)絡(luò)旁路的應(yīng)用系統(tǒng)通用監(jiān)控與預(yù)警系統(tǒng)的設(shè)計和實現(xiàn)
◆臧其事 謝立帆 李思宇
(中國農(nóng)業(yè)銀行上海市分行科技與產(chǎn)品管理部 上海 200233)
隨著銀行IT建設(shè)的不斷深入與發(fā)展,商業(yè)銀行建立了大量的應(yīng)用系統(tǒng)來提供各類服務(wù),這些系統(tǒng)對性能有較為苛刻的要求,同時要求較高的報警響應(yīng)。這些系統(tǒng)的監(jiān)控與預(yù)警是一個通用的需求,需要一個集中與通用的監(jiān)控應(yīng)用系統(tǒng)來負(fù)責(zé)集中處理,同時不能損害原應(yīng)用系統(tǒng)的性能,農(nóng)行上海分行采用網(wǎng)絡(luò)旁路技術(shù)作為基礎(chǔ),將現(xiàn)有鏈路上的網(wǎng)絡(luò)包數(shù)據(jù)通過網(wǎng)絡(luò)旁路設(shè)備導(dǎo)出,作為生產(chǎn)者將數(shù)據(jù)投放入Kafka集群進行分發(fā),下游消費者通過Spark-Streaming流處理進行分析并告警,使用MLlib進行機器學(xué)習(xí)與預(yù)警。
網(wǎng)絡(luò)旁路;Spark-Streaming;通用監(jiān)控
隨著銀行IT建設(shè)的不斷深入與發(fā)展,商業(yè)銀行建立了大量的應(yīng)用系統(tǒng)來提供各類服務(wù),例如柜面系統(tǒng),ATM系統(tǒng),叫號機系統(tǒng)等,這些系統(tǒng)無一例外的對性能有較為苛刻的要求,同時要求較高的報警響應(yīng)。這些系統(tǒng)的監(jiān)控與預(yù)警是一個通用的需求,需要一個集中與通用的監(jiān)控應(yīng)用系統(tǒng)來負(fù)責(zé)集中處理,同時不能損害原應(yīng)用系統(tǒng)的性能,在最優(yōu)情況下,不需要對舊有系統(tǒng)進行改造,避免增加額外的開發(fā)、測試與發(fā)布工作。基于上述需求,農(nóng)行上海分行考慮采用網(wǎng)絡(luò)旁路技術(shù)作為基礎(chǔ),將現(xiàn)有鏈路上的網(wǎng)絡(luò)包數(shù)據(jù)通過網(wǎng)絡(luò)旁路設(shè)備導(dǎo)出,通過大數(shù)據(jù)分析技術(shù)進行數(shù)據(jù)處理,從而解決這一通用需求。
本系統(tǒng)的基礎(chǔ)是網(wǎng)絡(luò)旁路技術(shù),考慮到網(wǎng)絡(luò)旁路產(chǎn)生的巨大的數(shù)據(jù)量,以及其源源不斷產(chǎn)生流量的特性,本文是一個典型的大數(shù)據(jù)流處理應(yīng)用場景,系統(tǒng)使用kafka作為消息隊列,Spark-Streaming作為處理技術(shù),hdfs作為網(wǎng)絡(luò)數(shù)據(jù)存儲。下文中,將首先介紹網(wǎng)絡(luò)旁路技術(shù),其次介紹本系統(tǒng)設(shè)計的基本框架與主要技術(shù),最后進行應(yīng)用總結(jié)。
傳統(tǒng)系統(tǒng)監(jiān)控有幾種形式:一種是在系統(tǒng)中自行完成監(jiān)控部分的功能,一種是通過硬編碼的方式將自身的一些性能數(shù)據(jù)通過約定的數(shù)據(jù)結(jié)構(gòu)提交至集中的監(jiān)控中心,以上兩種形式均需要大量的定制開發(fā)工作,故而基于網(wǎng)絡(luò)的監(jiān)控日益成為主流方式。而在基于網(wǎng)絡(luò)的系統(tǒng)監(jiān)控中,通常采用兩種方式:一種是經(jīng)由代理之類的串聯(lián)方式,一種是經(jīng)由旁路技術(shù)進行監(jiān)控和采集。
網(wǎng)絡(luò)旁路監(jiān)控一般是指通過交換機等網(wǎng)絡(luò)設(shè)備的“端口鏡像”功能來實現(xiàn)監(jiān)控,在此模式下,監(jiān)控設(shè)備只需要連接到交換機的指定鏡像端口,所以形象的稱之為“旁路監(jiān)控”。
相對于在網(wǎng)絡(luò)上設(shè)置代理進行抓取和分析的串行監(jiān)控而言,旁路監(jiān)控具有非常大的靈活性,通常使用智能Hub或是智能交換機的端口鏡像實現(xiàn),對原有網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)毫無影響。同時,通過旁路模式抓取鏡像端口拷貝過來的數(shù)據(jù),不會影響原有端口的轉(zhuǎn)發(fā)效率,對于業(yè)務(wù)性能不會有任何影響。最后,即使旁路設(shè)備宕機或出現(xiàn)故障,現(xiàn)有業(yè)務(wù)依然繼續(xù)進行,只會影響監(jiān)控與分析系統(tǒng),不會影響生產(chǎn)業(yè)務(wù)的正常進行。
本系統(tǒng)的設(shè)計目標(biāo)是,在不改動原有業(yè)務(wù)系統(tǒng)的代碼的情況下,通過網(wǎng)絡(luò)監(jiān)控技術(shù)抓取各個應(yīng)用的網(wǎng)絡(luò)包,監(jiān)測各個應(yīng)用系統(tǒng)的交易情況以獲得性能參數(shù),從而完成一種較為通用的監(jiān)控系統(tǒng)。
為了實現(xiàn)上述需求,本系統(tǒng)設(shè)計和構(gòu)建了一個基于消息隊列的、異步的生產(chǎn)與消費者模型的系統(tǒng)架構(gòu),采用生產(chǎn)-消費者這一經(jīng)典架構(gòu),可以通過調(diào)節(jié)生產(chǎn)和消費者的數(shù)量使系統(tǒng)效率達(dá)到最大化,例如我行的ATM數(shù)量較多,從而可以通過部署多個消費者的形式處理大量的ATM性能數(shù)據(jù),整體架構(gòu)如圖1所示。

圖 1 系統(tǒng)結(jié)構(gòu)模型圖
系統(tǒng)包括如下幾個部分:
原業(yè)務(wù)系統(tǒng)。原業(yè)務(wù)系統(tǒng)部署于生產(chǎn)服務(wù)器上,包括柜面系統(tǒng),ATM系統(tǒng),手機銀行,網(wǎng)銀,電話銀行,叫號機等業(yè)務(wù)系統(tǒng),這些系統(tǒng)是監(jiān)控系統(tǒng)的監(jiān)控對象。這些系統(tǒng)將產(chǎn)生大量的網(wǎng)絡(luò)包,這些網(wǎng)絡(luò)包就是需要抓取的內(nèi)容。
網(wǎng)絡(luò)旁路設(shè)備。網(wǎng)絡(luò)旁路設(shè)備需要以通過交換機端口鏡像的方式抓取,同時抓取規(guī)則被定義在了這里,通常是按IP進行抓取,以混雜模式抓取某一個IP對應(yīng)網(wǎng)卡的所有包。網(wǎng)絡(luò)旁路設(shè)備作為系統(tǒng)的生產(chǎn)者存在。
消息隊列。由于采集產(chǎn)生了海量數(shù)據(jù),而且這些數(shù)據(jù)的分布并不均勻,一次處理需要耗時從毫秒級到分鐘級不等,所以必須采用異步架構(gòu)處理,消息隊列在此處負(fù)責(zé)海量吞吐,并負(fù)責(zé)連接生產(chǎn)與消費者。
消費者應(yīng)用組。由于各個應(yīng)用系統(tǒng)報文的差異性,例如有的是XML報文,有的是定長,有的是json。而是否壓縮,是否經(jīng)由加密機加密等情況將各個報文的處理變得更加復(fù)雜。所以下游消費者需要進行定制化配置與開發(fā),以決定是否解密,是否解壓,最終如何處理這些報文。
監(jiān)控與預(yù)警服務(wù)。消費者根據(jù)配置的告警規(guī)則或?qū)W習(xí)到的異常模式,將符合規(guī)則的數(shù)據(jù)進行告警。告警分為被動監(jiān)控與主動推送兩種形式。被動監(jiān)控由值班業(yè)務(wù)員進行24小時監(jiān)控,主動推送則是將告警推送至一、二線支持與開發(fā)手中。
(1)數(shù)據(jù)采集
數(shù)據(jù)采集處于系統(tǒng)生產(chǎn)者的位置,通過網(wǎng)絡(luò)旁路的方式同步復(fù)制來自交換機的網(wǎng)絡(luò)數(shù)據(jù),并將采集得到的數(shù)據(jù)結(jié)果按不同的topic放入kafka隊列。該功能是整個系統(tǒng)的基礎(chǔ)部分,通過配置抓取規(guī)則,如指定的IP和端口,以及該規(guī)則與topic的對應(yīng)關(guān)系,將抓取到的數(shù)據(jù)包放入消息隊列供下游消費。
(2)數(shù)據(jù)分析
數(shù)據(jù)分析作為系統(tǒng)的消費者,主要接收來自網(wǎng)絡(luò)旁路功能采集的網(wǎng)絡(luò)報文數(shù)據(jù),包括MAC地址、IP 信息、TCP包信息、以及報文內(nèi)容等數(shù)據(jù)。通常以一分鐘為一個觀測單位,結(jié)合報文內(nèi)容的具體特征,如返回碼是否正確,是否超時等信息,得到一分鐘內(nèi)交易筆數(shù),成功率,失敗率,超時率等性能指標(biāo),根據(jù)歷史數(shù)據(jù)得出baseline以及正常浮動范圍,對于超出浮動范圍的部分編制告警信息,并推送至報警服務(wù)。經(jīng)過一段時間的歷史積累后,使用MLlib對異常告警進行學(xué)習(xí),識別異常模式并進行預(yù)警。
(3)展示與告警
數(shù)據(jù)展示主要是以圖表方式呈現(xiàn)被監(jiān)測設(shè)備性能歷史數(shù)據(jù),其圖表如圖2所示。

圖 2 性能數(shù)據(jù)展示
對于超過浮動閾值的性能數(shù)據(jù),以及接收到報文中的錯誤信息,將主動通過告警消息,短信,微信以及語音電話等方式通知運維人員。首先將報錯信息推送至監(jiān)控室的監(jiān)控屏幕上,由運維值班人員進行24小時輪值處理。其次將報錯投遞給系統(tǒng)一、二線支持運維人員,必要時主動推送給開發(fā)。
(1)網(wǎng)絡(luò)旁路技術(shù)
網(wǎng)絡(luò)旁路技術(shù)是本系統(tǒng)的基礎(chǔ),其基本概述與實現(xiàn)方式已經(jīng)在上文中加以論述,此處需要重點指出的是,旁路數(shù)據(jù)量較大的時候,需要將整個網(wǎng)絡(luò)劃分為幾個鏈路,在不同的鏈路上部署不同的旁路設(shè)備以提高性能。
(2)kafka
kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),通過O(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對于即使數(shù)以TB的消息存儲也能夠保持長時間的穩(wěn)定性能,即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬的消息,支持通過Kafka服務(wù)器和消費機集群來分區(qū)消息和Hadoop并行數(shù)據(jù)加載。本系統(tǒng)中,kakfa擔(dān)任了消息隊列的角色,需要特別指出的是,在本系統(tǒng)中,我們允許kafka存在一部分?jǐn)?shù)據(jù)丟失的可能性,以提升性能。因為在我們看來,少量數(shù)據(jù)丟失不會對億萬級的樣本空間產(chǎn)生什么影響,但是性能是這個系統(tǒng)的核心要求。
(3)Spark Streaming
Spark Streaming 是Spark核心API的一個擴展,可以實現(xiàn)高吞吐量的、具備容錯機制的實時流數(shù)據(jù)的處理。支持從多種數(shù)據(jù)源獲取數(shù)據(jù),從數(shù)據(jù)源獲取數(shù)據(jù)之后,可以使用諸如map、reduce、join和window等高級函數(shù)進行復(fù)雜算法的處理。最后還可以將處理結(jié)果存儲到文件系統(tǒng)。本系統(tǒng)中,所有的數(shù)據(jù)消費者采用Spark Streaming對接Kafka消息隊列,對數(shù)據(jù)進行流處理,將結(jié)果推送至告警服務(wù),同時將解析后的報文明細(xì)存放至hdfs。
農(nóng)行上海分行的應(yīng)用監(jiān)控系統(tǒng)以網(wǎng)絡(luò)旁路為基準(zhǔn)協(xié)議,實現(xiàn)了對數(shù)據(jù)中心設(shè)備資源的實時監(jiān)控,并將監(jiān)測到的性能數(shù)據(jù)以圖形方式直觀顯示出來,提高了設(shè)備管理的工作效率,為設(shè)備管理提供了一種安全高效的方式。同時完成了對于失效事件的主動告警,將錯誤信息及時推送給運維人員,將反應(yīng)時間由分鐘縮短到了秒級。由于使用了高安全性的SNMPv3協(xié)議,系統(tǒng)的安全性也得到了較為完善的保障,達(dá)到了性能與安全性的平衡,在類似系統(tǒng)的設(shè)計中具有一定的借鑒意義。
[1]施勝強.淺析計算機網(wǎng)絡(luò)管理[J].計算機光盤軟件與應(yīng)用,2012.
[2]石貴民.基于旁路模式的流量監(jiān)控及防護系統(tǒng)[D].福州: 福州大學(xué),2009.
[3]周旭晨.網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)的搭建應(yīng)用與數(shù)據(jù)分析[D].武漢:武漢科技大學(xué),2012.
[4]李濤,張亞群,劉岱平.面向服務(wù)的校園網(wǎng)流量監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代計算機,2009.