邵 瑛,徐 斌
1(上海電子信息職業(yè)技術學院 電子技術與工程學院,上海 201411)
2(上海諾基亞貝爾股份有限公司 固網事業(yè)部,上海 201206)
當前,計算機已經融入到了我們的日常生活中,生活的各個方面都會涉及到各種計算機系統(tǒng),為了監(jiān)視這些系統(tǒng)運行是否正常并能在系統(tǒng)出現(xiàn)故障時幫助用戶及時定位,系統(tǒng)中通常會設計日志系統(tǒng)來輸出一些有用的日志信息,很多系統(tǒng)還提供了各種人機接口命令(CLI)用來獲取系統(tǒng)的配置、告警和狀態(tài)等信息,這些信息也是以一定的文本格式輸出.通過對這些信息的充分分析和評估,可以有效地幫助用戶對系統(tǒng)目前的運行狀況譬如安全性[1]、負荷信息[2]等進行深度了解并采取必要的優(yōu)化措施.許多科研技術人員在這方面也做了很多研究工作[3,4],并開發(fā)了ELK[5–8]等類似的系統(tǒng)文本日志處理框架,但這些研究或框架在功能上普遍缺乏通用性研究,特別是缺乏通用的可配置的日志評估功能及對微服務的支持.本文基于該需求,設計了一種系統(tǒng)日志的通用性評估方案,該方案包括架構的設計和系統(tǒng)日志通用性評估模型的設計.在架構設計上,采用了微服務架構,實現(xiàn)是基于Spring Boot/Spring Cloud[9]來實現(xiàn),部署支持Docker Stack 方式和K8S 方式部署.在系統(tǒng)日志通用性評估模型方面,采用了引擎與規(guī)則分離的原則,來實現(xiàn)評估的通用性.
2014 年“微服務架構”[10,11]被提出后,其思想經由 Martin Fowler 闡述后,在近幾年持續(xù)受到重視,理論與相關實踐都不斷發(fā)展,目前它已經成為了主流軟件架構模式.微服務將一個大的系統(tǒng)提供的功能分解成了許多小的服務,這些小的服務都是獨立實現(xiàn)、這些小的服務之間一般采用輕量級的通信協(xié)議,小的服務之間是松耦合且獨立部署,這些小的服務就被稱為微服務.微服務架構具有如下的一些特點:
(1)每個服務足夠內聚,足夠小,代碼容易理解;
(2)服務獨立測試、部署、升級、發(fā)布;
(3)每個服務可以各自進行擴展,每個服務可以根據(jù)自己的需要部署到合適的硬件服務器上;
(4)容易擴大開發(fā)團隊,可以針對每個服務(service)組件開發(fā)團隊;
(5)提高容錯性(fault isolation),一個服務的內存泄露并不會讓整個系統(tǒng)癱瘓.
在圖1總體架構中,控制節(jié)點和工作節(jié)點在系統(tǒng)微服務能力上完全相同,區(qū)別在于啟用的微服務能力不一樣.工作節(jié)點開啟的微服務能力包括日志的上傳、集成性檢查、解析、組織入庫,而控制節(jié)點則負責匯總各個工作節(jié)點的數(shù)據(jù),并根據(jù)配置的健康檢查規(guī)則對數(shù)據(jù)進行健康檢查,同時根據(jù)評估規(guī)則生成項目的評估報告

圖1 評估框架總體架構
日志的分析一般的流程是收集、解析、入庫和分析,節(jié)點上微服務構架如圖2,也是基于該流程來設計的,除此之外,本框架中還加入了評估功能.
在圖2的微服務架構中,支撐服務層包括 MariaDB,ES和ActiveMQ,ES 用作原始log 分析后的存儲,MariaDB 用作組織后的數(shù)據(jù)的存儲,ActiveMQ 用作前后端以及基礎服務層之間的消息通信的中間件.基礎服務的各個部分都作為獨立的服務來運行,這些服務都是基于Spring Boot/Spring Cloud 框架來開發(fā).利用Spring Boot/Spring Cloud,不但可以方便地實現(xiàn)微服務的開發(fā),而且還能方便地集成對MariaDB,ES,ActiveMQ等服務的訪問.

圖2 節(jié)點上微服務架構的設計
方案中設計了兩種模型.
(1)通用日志分析模型
日志分析模型拆分成了分析引擎和分析規(guī)則,通過在分析規(guī)則中配置數(shù)據(jù)源來實現(xiàn)分析引擎與數(shù)據(jù)源的松耦合,分析引擎不針對某個特定的數(shù)據(jù),只根據(jù)分析規(guī)則來對數(shù)據(jù)信息進行處理.
(2)通用日志評估模型
日志評估模型拆分成了評估引擎和評估規(guī)則,通過在評估規(guī)則中配置數(shù)據(jù)源來實現(xiàn)分析引擎與數(shù)據(jù)源的松耦合,評估引擎不針對某個特定的數(shù)據(jù),只根據(jù)評估規(guī)則來對數(shù)據(jù)信息進行處理.
通用日志分析模型包括分析引擎和分析規(guī)則,在模型中,分析引擎通過分析分析規(guī)則來實現(xiàn)對系統(tǒng)日志的分析檢查.
(1)模型工作的前置條件
1)被分析數(shù)據(jù)存放在關系數(shù)據(jù)表中;
2)每張數(shù)據(jù)表需要一個額外的字段來存儲分析結果,這里暫命名為“checkrs”;
(2)相關定義
1)數(shù)據(jù)集:將要被檢查的同一張關系數(shù)據(jù)表中的所有數(shù)據(jù)稱為一個數(shù)據(jù)集.假設數(shù)據(jù)集有l(wèi)列m行,其表示如下:

2)有效數(shù)據(jù)集:數(shù)據(jù)集中具有對應檢查規(guī)則的列的數(shù)據(jù)組成的數(shù)據(jù)集合.假設有效數(shù)據(jù)集有n列,其表示如下:

3)分析規(guī)則集:用來分析有效數(shù)據(jù)集V的規(guī)則的集合,規(guī)則集里規(guī)則的列數(shù)必須與有效數(shù)據(jù)集V的列數(shù)一致.假設分析規(guī)則集有p行規(guī)則,其表示如下:

4)分析結果標記集:當有效數(shù)據(jù)vj,i(1≤i≤n,1≤j≤p) 不能滿足規(guī)則時輸出的結果標記,其中ei與ri一一對應,其表示如下:
E={e1,e2,···,en}
(3)分析算法
分析算法見圖3.該算法中,輸入包含:分析規(guī)則集、規(guī)則中關聯(lián)的有效數(shù)據(jù)集、及對應的分析結果標記集,輸出為分析結果數(shù)組.

圖3 分析算法
(4)分析規(guī)則的設計
在本模型中,設計了4 種分析規(guī)則.
第1 種規(guī)則:相等規(guī)則.分析規(guī)則中配置數(shù)字或字符串,分析引擎對有效數(shù)據(jù)與規(guī)則中配置的數(shù)據(jù)進行相等性判斷;
第2 種規(guī)則:正則表達式規(guī)則.規(guī)則以“! ”開始表示正則表達式規(guī)則,分析規(guī)則中配置正則表達式,分析引擎判斷有效數(shù)據(jù)是否滿足規(guī)則中提供的正則表達式;
第3 種規(guī)則:數(shù)字范圍規(guī)則.分析規(guī)則中包含數(shù)字范圍,輸入方式為[X–Y],表示數(shù)字在X 與Y之間都是有效的.例如規(guī)則“vlan[1–100]”,那么vlan1,vlan2,…,vlan100 都是合法的.
第4 種規(guī)則:SQL 條件規(guī)則.規(guī)則中以“? ”開始表示SQL 規(guī)則.該規(guī)則以SQL的條件子句為分析規(guī)則.例如:”? F1>100 and F2=1000”,表1是一條分析規(guī)則的例子.

表1 分析規(guī)則
這條規(guī)則將對有效數(shù)據(jù)進行分析,檢查F1 字段是否是字符串“SH”,判斷F2 字段是否是數(shù)字,判斷F3 字符串是否是vlan100 或vlan101 或…或vlan300,判斷F4 字段是否大于100 且小于200.
(5)模型的實現(xiàn)例子
下面是一個對寬帶網絡用戶利用率進行分析檢查的例子.數(shù)據(jù)集如表2,有效數(shù)據(jù)集如表3,分析規(guī)則集和分析結果標記如表4.表4中第1 行是對應的有效數(shù)據(jù)集中的字段名;第2 行是分析規(guī)則集;第3 行是分析結果標記集.分析結果如表5.通過檢查,發(fā)現(xiàn)用戶的可利用帶寬的配置都不正常,分析結果見checkrs 列中的結果標記.

表2 數(shù)據(jù)集

表3 有效數(shù)據(jù)集

表4 分析規(guī)則集和分析結果標記集

表5 分析結果
通用日志評估模型同樣包括評估引擎和評估規(guī)則,在模型中,評估引擎同樣通過評估規(guī)則來實現(xiàn)對日志的評估.
(1)相關定義和解釋
數(shù)據(jù)集:根據(jù)某個或某些特征組合在一起數(shù)據(jù),這些數(shù)據(jù)存儲在多個關系數(shù)據(jù)表中.其表示如下:

其中,ti為一張二維數(shù)據(jù)表的所有數(shù)據(jù),fj(i1≤j≤im)為表ti中的一列數(shù)據(jù).
評估規(guī)則:一組用來對數(shù)據(jù)中的數(shù)據(jù)進行評估的規(guī)則.其表示如下:
R={r1,r2,···,rk}
其中,ri作用在指定表的指定列(字段)的數(shù)據(jù)上.
排除鍵值(EV):數(shù)據(jù)評估的時候,用來清洗被評估數(shù)據(jù).當被評估數(shù)據(jù)包含排除鍵值時,那么該數(shù)據(jù)將被過濾掉.在規(guī)則中設置.
期望鍵值(KV):被評估數(shù)據(jù)的期望值.在規(guī)則中設置.
評估權重(W):該項占百分值評估的分值權重.在規(guī)則中設置.
有效數(shù)據(jù):如果被評估數(shù)據(jù)包含期望鍵值,該數(shù)據(jù)即為有效數(shù)據(jù).
負面數(shù)據(jù):如果被評估數(shù)據(jù)不包含期望鍵值,該數(shù)據(jù)即為負面數(shù)據(jù);
作用類型(PN):配置被評估對象的數(shù)據(jù)取值為期望鍵值時,獲取的評估分值是正還是負.在規(guī)則中設置.
有效范圍(vScope):有效策略為計數(shù)統(tǒng)計策略和平均值策略的時候,統(tǒng)計得到的數(shù)據(jù)計算評估得分時的判斷依據(jù).
評估方法策略(M):本模型中定義了3 種評估策略:
· 百分占比策略:計算有效數(shù)據(jù)數(shù)占總數(shù)(有效數(shù)據(jù)加負面數(shù)據(jù))的百分比,然后根據(jù)計算出的百分比來計算該項的評估得分.
· 計數(shù)統(tǒng)計策略:按照指定條件分組并統(tǒng)計各分組中不同數(shù)據(jù)出現(xiàn)的次數(shù).并把得到的這些次數(shù)與某個設定范圍(有效范圍vScope)進行比較來計算該項的評估得分.
· 平均值策略:按照指定條件分組并統(tǒng)計各分組中數(shù)據(jù)的平均值.并把得到的這些平均值與某個設定范圍(有效范圍vScope)進行比較來計算該項的評估得分.
評估方法策略在規(guī)則中設置.
(2)評估算法
評估算法見圖4.該算法中,輸入包含:評估規(guī)則及規(guī)則中關聯(lián)的數(shù)據(jù),輸出為評估得分數(shù)組score.

圖4 評估算法
(3)模型的實現(xiàn)例子
1)規(guī)則的定義
由于規(guī)則數(shù)百條,表6是小部分規(guī)則例子.

表6 評估規(guī)則
2)評估結果
根據(jù)數(shù)據(jù)得到的評估結果如表7所示,見score (得分)列.

表7 評估結果
PON是一種典型的無源光纖網絡,是指 (光配線網中) 不含有任何電子器件及電子電源,ODN 全部由光分路器 (splitter) 等無源器件組成,不需要貴重的有源電子設備.一個無源光網絡包括一個安裝于中心控制站的光線路終端 (OLT),以及一批配套的安裝于用戶場所的光網絡單元 (ONUs) 目前PON 網絡作為接入網在全球得到了廣泛的應用,小的PON 接入網可能只有幾十臺OLT,大的可能有數(shù)萬甚至數(shù)十萬臺OLT,ONU的數(shù)量相對于OLT 來說,更是成倍甚至數(shù)十倍,如何維護和管理這些OLT和ONU,特別如何對正在服務的PON 網絡進行一個健康情況的評估并進行優(yōu)化就變得特別重要.
基于本文介紹的基于微服務的系統(tǒng)日志通用性評估方案,作者等開發(fā)了一套PON 網絡健康檢查系統(tǒng),目前該系統(tǒng)已經在多個PON 網絡的健康評估中得到了應用.處理過的最小的網絡只需要建立一個節(jié)點來處理,該節(jié)點既是工作節(jié)點,又是控制節(jié)點;最大網絡建立了7 個工作節(jié)點,1 個控制節(jié)點來處理,處理的日志約1 TB,該PON 網絡有25 000 多個OLT 上百萬個ONT.從日志開始檢查,分析到最后輸出數(shù)百張圖表及最終的評估報告,總的耗時約7 小時.該系統(tǒng)在實際的項目中對PON 網絡的健康服務起到了非常重要的作用,極大地提高了服務的效率,得到了用戶的高度評價.圖5為某外國電信運營商利用基于本文介紹的分析評估模型開發(fā)的系統(tǒng)進行網絡評估得到的評估結論.

圖5 分析評估模型應用實例
本文介紹了一種系統(tǒng)日志的通用性評估方案,該方案采用單控制節(jié)點/多工作節(jié)點模式,擴展靈活,支持TB 級的系統(tǒng)日志數(shù)據(jù)分析和評估;相對于當前流行的ELK 等方案,設計了配置驅動的評估方法,具有很好的通用性,同時該方案方便定制性的二次開發(fā).基于該方案而實現(xiàn)的PON 網絡健康檢查評估系統(tǒng)在實際中也得到了很好的應用,極大地提升了服務的效率.該方案對于今后需要進行系統(tǒng)日志類信息分析和評估的工作人員具有非常好的參考和借鑒作用.