陳 剛,夏 雷,李 林,梁多姿,晁 京
(中國鐵路上海局集團有限公司 科技和信息化部,上海 200071)
隨著鐵路運輸信息化水平快速提升,一些重要的信息系統(tǒng)的規(guī)模不斷擴大,系統(tǒng)架構日益復雜,數據海量增長,對業(yè)務連續(xù)性要求和運行維護(簡稱:運維)質量的要求不斷提高,與此同時,系統(tǒng)的運維也越來越復雜,運維管理難度越來越大??v觀全路,各鐵路局集團有限公司(簡稱:鐵路局)的信息系統(tǒng)建設規(guī)模雖有一定差異,但總體上處在同一發(fā)展水平,運維人員的精簡化與系統(tǒng)規(guī)模擴張化的矛盾逐步凸顯,雖已采用運維工具對信息系統(tǒng)進行日常監(jiān)控,初步實現了信息系統(tǒng)運維的信息化管理,但是,大量信息系統(tǒng)的應用日志、系統(tǒng)運行狀態(tài)數據未得到有效利用,其數據蘊藏的經濟效益和管理價值未得到深度挖掘。路外行業(yè)針對智能化管理的研究取得了長足發(fā)展[1],但是,在鐵路運輸領域,特別是在信息系統(tǒng)的智能化運用層面,仍處在探索階段。
鐵路局信息系統(tǒng)狀態(tài)診斷與輔助管理決策系統(tǒng)以上海鐵路局信息化管理方面的短板為切入點,充分利用機器系統(tǒng)運行日志和應用系統(tǒng)日志,結合Hadoop、Kafka大數據技術,基于Ripple、STL算法,構建了一個集成化、智能化、科學化的綜合處理與決策平臺,為信息化管理工作提供輔助決策,提高數據中心資源利用率,提升運維智能化水平,推進數據中心向綠色、節(jié)能方向轉變。
系統(tǒng)采用B/S架構[2],利用大數據組件進行數據存儲與檢索,通過智能化算法進行智能檢測。
根據功能性要求及非功能性要求設計系統(tǒng)的整體架構。邏輯架構由8個模塊組成,如圖1所示。
圖1 邏輯架構圖
(1)數據采集:采用“目標源—代理中繼—有效過濾—落地使用”的原則,獲取原始數據,為后期數據處理分析提供基礎。
(2)數據處理:利用隊列服務器的處理思想,并利用流處理引擎完成,將獲取的數據轉換、傳送至數據持久化模塊。
(3)數據存儲:將結構化、非結構化、半結構化的數據進行緩存處理,轉變成有效利用的合理化數據。
(4)查詢引擎:采用Ripple、STL等算法,對日志、數據加以解析,提供更為科學、貼近人工理解的查詢手段,為系統(tǒng)決策分析提供支撐。
(5)告警引擎:依據設定條件,結合算法推理,提供自動告警功能,輔助用戶開展運維決策工作。
(6)分析引擎:結合業(yè)務邏輯與實際生產數據的推理分析,通過Hadoop的海量數據,分析得出模型預測數據,為用戶提供多角度分析工具。
(7)展現引擎:利用可視化、多元化的報表、圖表插件,為用戶提供更為友好的訪問界面。
(8)系統(tǒng)管理:靈活配置數據采集、預警、查詢、分析等相關功能模塊的參數,為用戶提供方便、可視、直觀的業(yè)務管理手段。
8個模塊都可支持橫向擴展,提升每個模塊的吞吐量及處理能力,同時,每個模塊內部都是多點分布式部署,保證了系統(tǒng)高可用、數據安全。在數據采集、處理、存儲及分析等模塊,采用了目前比較主流、成熟的開源組件。
充分考慮架構的先進性、避免重復建設、減輕后期維護工作等方面,系統(tǒng)中需要的大數據相關組件滿足用戶要求,其他增量節(jié)點支持虛擬機,非存儲節(jié)點支持Docker或者Kubernetes部署,可調整節(jié)點數量,為后期系統(tǒng)的智能化擴容提供基礎[3]。系統(tǒng)物理架構如圖2所示。
圖2 物理架構圖
數據采集分為有代理采集和無代理采集。無代理采集為在服務端采集,支持SNMP, DATABSE,TCP/UDP, SYSLOG, Restful等采集協(xié)議。有代理采集則用于本地文件采集、腳本采集等,采用多進程方式,即守護進程和工作進程的方式,既保證采集代理的穩(wěn)定性,又可以對工作進程的資源消耗進行控制,避免代理客戶端對被采集對象的資源消耗過大。數據采集流程如圖3所示。
圖3 數據采集流程圖
流處理層基于Kafka Streaming,實現分布式的數據處理。
Kafka Streaming采用no-receiver方式直接從Kafka分區(qū)上并行讀取數據[4]。
通過對數據的處理類型進行抽象提取,根據不同類型的數據源提供不同的可配置的數據處理邏輯接口,用戶可以通過界面配置的方式來配置數據的解析、轉換和處理邏輯。數據處理采用ZooKeeper、Kafka的流處理技術,通過接口方式,為數據持久化提供有效支撐。同時,借助Spark、hive、Hadoop等大數據相關數據庫,對數據進行存儲。數據處理流程如圖4所示。
Kafka streaming在處理完數據后,需要根據不同的數據類型將數據寫入不同的數據庫,結構化數據寫入HBase,非結構化數據寫入Elastic Search和Hadoop HDFS,兩者都是分布式數據庫,都基于分區(qū)/分片的方式存儲數據,默認在向上述兩個數據庫寫入數據時,依賴于外部數據庫進行數據路由處理,存在數據二次移動的問題,影響數據寫入效率,為此,在寫入之前預先計算好數據最終區(qū)/分片,避免數據的二次轉發(fā)。
數據存儲模塊提供數據冷熱自動轉儲功能,針對不同類型的數據,能夠支持以下3種存儲方式[5]:(1)業(yè)務數據,以固定的格式進行存儲,可方便查詢和分析時間序列數據,采用組件為HBase[6-7]和InfluxDB;(2)半結構化數據,可對數據進行實時全文檢索和分詞搜索,采用組件為Elasticsearch;(3)關系型數據采用MySQL數據庫;非關系型數據選用Neo4j數據庫。
圖4 數據處理流程圖
資源分為硬件資源、軟件資源、應用資源和資源池。通過收集硬件信息、軟件信息、應用信息及其資源池信息,實現軟、硬件資源的集中管理。
通過大數據管理的方式查看一段時間內的CPU、磁盤、內存、磁盤IO速率、IP連接數和網絡IO數據,方便管理人員查看應用系統(tǒng)整體使用趨勢和服務器的運行狀態(tài)。運行指標圖如圖5所示。
圖5 運行指標圖
(1)應用總覽:展示應用特征、客戶端操作系統(tǒng)、客戶端瀏覽器和訪問返回狀態(tài)。
(2)資源利用:按時間分布,展示CPU、內存及磁盤利用的變化,并判斷其是否處于合理區(qū)間。
(3)應用歷史狀態(tài):分析資源使用的歷史狀態(tài),為合理使用資源和預測風險做參考。從CPU、內存、存儲、訪問量、IP增長率等多個維度綜合展示資源和使用情況的變化趨勢,并對歷史軌跡進行聚類,為系統(tǒng)從橫向的多維度與縱向的多角度進行綜合畫像,如圖6所示。
圖6 系統(tǒng)畫像圖
3.4.1 應用趨勢預測
主要從CPU資源利用、內存資源利用、存儲資源利用、IP連接數、訪問狀況趨勢、網絡IO等6個維度進行預測分析,為系統(tǒng)提出未來修、預測修、精準檢的解決方案。
3.4.2 應用訪問分析
(1)通過大數據算力,集合全部應用的訪問客戶端操作系統(tǒng)和瀏覽器,分析每一個操作系統(tǒng)和瀏覽器的類型和版本,提出升級建議;(2)分析服務器錯誤返回碼 ,建議維護處理;(3)分析錯誤返回碼中涉及應用問題的次數,提示維護應用。
3.4.3 資源管理建議
資源管理建議主要包括資源優(yōu)化應用列表和資源擴容應用列表:(1)資源優(yōu)化應用列表中的應用,說明資源分配過多,需要進行優(yōu)化調整;(2)資源擴容應用列表中的應用,說明資源需要擴容,應當分配更多資源。
3.4.4 異常AI檢測
異常人工智能(AI)檢測包括應用名稱、指標狀態(tài)展示、統(tǒng)計指標展示、結論描述等:(1)利用Ripple算法,計算各指標的異常情況。Ripple是一種基于互聯(lián)網的開源協(xié)議,實現去中心化的基本功能;(2)可查看指標,并直觀顯示出異常指標;(3)通過圖表直接查看異常點,如圖7所示。
圖7 異常指標顯示圖
3.4.5 節(jié)能控制預測
節(jié)能控制預測主要包括信息系統(tǒng)節(jié)能方案、預測節(jié)能功耗和信息系統(tǒng)功耗圖形化展示:(1)根據資源使用周期和趨勢,提供服務器資源關停、啟用時間段等建議;(2)測算系統(tǒng)節(jié)能方案的節(jié)能功耗;(3)圖形化展示系統(tǒng)能耗的使用情況,如圖8所示。
3.4.6 統(tǒng)一展示
圖8 節(jié)能預測圖
為用戶提供友好界面,如圖9所示。
圖9 輔助決策圖
本文所涉及的各類算法均采用通用的Java、GO、Scala等語言,借助my eclipse開源平臺實現,采用Matlab工具對算法進行驗證,并在系統(tǒng)實際運行過程中進一步確認和優(yōu)化。
4.1.1 單指標異常檢測
通過STL(Seasonal-Trend decomposition procedure based on loess)算法對單個時間序列指標進行異常檢測[7]。算法支持周期性和非周期性的時間序列,支持靈敏度調節(jié)和異常去噪功能。
4.1.2 多指標異常檢測
基于自組織映射(SOM,Self Organizing Maps)神經網絡算法?;跉v史數據的學習,生成基于每個輸入指標的神經網絡,確定每個激活神經元的鄰域半徑。檢測時,計算輸入多指標向量和相應神經元的距離,并確定異常及主要根因指標。
基于可分解時間序列模型,考慮趨勢項、季節(jié)項和節(jié)假日效應,對服務器或系統(tǒng)運行的正常與異常時間序列進行預測。
使用機器學習中的貝葉斯先驗概率,尋找數據中潛藏的趨勢改變點,擬合分段趨勢項,并利用傅立葉變換擬合季節(jié)項,通過貝葉斯采樣提升預測精度[8]。正常與異常時間序列預測結果的表示式為:
式(1)中:
g(t)—擬合時間序列中的分段線性增長或指數增長等趨勢;
s(t)—擬合周期項(如:每周/每年的季節(jié)性);
h(t)—擬合非規(guī)律性的特殊日效應;
εt—反映未在模型中體現的異常變動。
日志記錄的好壞直接關系到出現問題時定位的速度,根據日志結構的特性,提出一種高效的實時日志聚類算法。
4.3.1 封裝預處理
定義日志中每個詞的封裝結構,共包含normal、regex、important及verb共4種類型封裝結構。
4.3.2 原始日志預處理
(1)正則化替換
利用正則表達式,將原始日志中詳細的IP地址、端口號、時間等利用$IP、$IPPort及DateTime等字符串替換,并進行簡單的封裝。
(2)敏感詞庫提出
根據語義分析和設置的敏感詞模式,對原始日志中的敏感詞進行處理,并將其類型設置為important。
(3)分詞器分詞
為對原始日志進行精準分詞,自定義3種類型的分詞器,分別用來處理中文分詞、英文分詞及中英文混合分詞等不同類型的分詞需求。
(4)公有變量提取
將原始日志中的數字、需要忽略的詞進行處理。
(5)詞性標注
利用事先建立的verb字典樹、normal字典樹和nltk插件進行詞性標注,防止在提取公共模板時,有意義的詞被泛化。其中,字典樹是一種實現字符串快速檢索的多叉樹結構,能夠降低搜索字符串的時間。
4.3.3 獲取模板步驟
(1)日志分組
對處理后的原始日志進行分組處理,以便能夠快速定位。共定義了7個大組,每個大組中含有個數不等的小組,并且對它們都設置了匹配優(yōu)先級,原始日志優(yōu)先匹配級別較高的組,當同一條日志匹配到多個組時,將最先匹配到的組設置為該條日志所屬的組。
(2)倒排表打分
對日志進行分組之后,需要對日志匹配或者生成模板。通過對原始日志的分析,采用打分的方式判斷原始日志屬于哪個模板,為獲得最精確的模板,在打分時,綜合考慮關鍵詞得分、位置得分和鄰近詞得分3個方面因素。
關鍵詞得分是指對原始日志預處理后,該詞的類型是否為關鍵詞,當該詞為關鍵詞并且該詞在原始日志中的位置和在模板中的位置相差在合理的范圍內,則該詞在該模板上得分較高,否則得分為1。具體打分方式如式(2):
式(2)中,key為關鍵字集合,idxq為詞在原始日志中位置,為詞在該條模板中的位置,scope為用戶設置的閾值,θ為根據業(yè)務需求而設置的動態(tài)參數。
位置得分原則:各個位置的詞具有同樣的重要性;位置越靠前的詞權重越高。用戶可以根據不同的需求選擇不同的打分方式。
鄰近詞得分是指判斷在原始日志中的上一鄰近詞與模板中的是否相同,相同時,該詞的得分為1,否則給出懲罰。
為了提高打分效率,根據倒排表的思想,對每個詞建立倒排表,降低搜索時間。
(3)獲取模板
倒排表打分后,會得到該條日志在每個模板上的得分情況。設置得分閾值,對于達到得分閾值的模板,判斷模板中是否有關鍵詞被泛化,如果沒有,則說明該條日志與該條模板匹配成功;如果該條日志在每個模板上的得分都小于閾值,則利用該條日志創(chuàng)建一個新模板,添加到模板庫中。
(4)更新模板展示層內容和倒排表內容。
本文從底層架構的設計理念出發(fā),設計了鐵路局信息系統(tǒng)狀態(tài)診斷與輔助管理決策系統(tǒng),介紹了系統(tǒng)的數據處理流程,以及系統(tǒng)的功能模塊與應用效果,重點解析了系統(tǒng)的關鍵技術。系統(tǒng)已投入運行,運行結果表明,系統(tǒng)的應用提高了信息系統(tǒng)運維管理水平,運維模式正在由半自動向自動化、智能化方向轉變,同時,提升了信息化投資決策水平,極大地提高了數據中心的資源利用率,促進信息化基礎設施投資更加科學合理,減少重復投資、資源浪費等現象,提升鐵路信息化投資決策水平。