摘要:針對(duì)結(jié)構(gòu)復(fù)雜、規(guī)模龐大的檢察機(jī)關(guān)辦案系統(tǒng)服務(wù)請(qǐng)求失敗、響應(yīng)延時(shí)等異常問題,如何快速進(jìn)行故障診斷是保障系統(tǒng)可靠性的關(guān)鍵所在。本文引入動(dòng)態(tài)插樁方法實(shí)現(xiàn)跨組件請(qǐng)求軌跡的監(jiān)測(cè),采用調(diào)用樹對(duì)執(zhí)行軌跡進(jìn)行刻畫和自動(dòng)構(gòu)建,基于主成分分析方法對(duì)應(yīng)用異常進(jìn)行自動(dòng)監(jiān)測(cè)和細(xì)粒度定位。利用基于局部異常因子的無監(jiān)督學(xué)習(xí)異常檢測(cè)算法和異常頻繁項(xiàng)聯(lián)動(dòng)算法,構(gòu)建針對(duì)業(yè)務(wù)異常頻繁項(xiàng)集的異常關(guān)聯(lián)規(guī)則庫(kù),實(shí)現(xiàn)覆蓋應(yīng)用關(guān)聯(lián)的全鏈路數(shù)據(jù)實(shí)時(shí)監(jiān)控和異常提?。唤?yīng)用異常知識(shí)庫(kù),實(shí)現(xiàn)檢察機(jī)關(guān)辦案系統(tǒng)運(yùn)行過程中的異常智能告警。
關(guān)鍵詞:全鏈路;執(zhí)行軌跡;異常檢測(cè);故障診斷
一、引言
隨著計(jì)算機(jī)技術(shù)的發(fā)展,應(yīng)用架構(gòu)從集中式單體架構(gòu)到分布式的面向服務(wù)的架構(gòu)(SOA)[1]。微服務(wù)等分布式框架在解決高并發(fā)和高可用等方面確實(shí)表現(xiàn)出了顯著的優(yōu)勢(shì),這使其成為互聯(lián)網(wǎng)應(yīng)用的發(fā)展趨勢(shì)[2,3]。
目前,互聯(lián)網(wǎng)應(yīng)用的復(fù)雜化程度日益提高,且大部分應(yīng)用通過大規(guī)模分布式集群實(shí)現(xiàn),跨多個(gè)數(shù)據(jù)中心運(yùn)行。這種分布式架構(gòu)在帶來高性能和可擴(kuò)展性的同時(shí),也帶來了性能問題探查和故障定位的困難。結(jié)構(gòu)復(fù)雜、規(guī)模龐大以及故障定位困難已成為當(dāng)前系統(tǒng)運(yùn)維的主要痛點(diǎn)[4]。王子勇等針對(duì)微服務(wù)架構(gòu)面臨的問題,采用覆蓋測(cè)試構(gòu)建請(qǐng)求執(zhí)行軌跡的方法,各組件在目標(biāo)方法調(diào)用處插入監(jiān)測(cè)代碼,不用考慮整個(gè)系統(tǒng)行為,即能構(gòu)建服務(wù)的執(zhí)行軌跡,但是,該方法無法有效診斷與物理資源相關(guān)的故障[5]。
針對(duì)應(yīng)用復(fù)雜化、性能問題探查困難和故障定位困難等痛點(diǎn),采用探針(Agent)實(shí)時(shí)采集應(yīng)用運(yùn)行時(shí)的數(shù)據(jù),提供全局的業(yè)務(wù)流拓?fù)浜蜆I(yè)務(wù)調(diào)用關(guān)系,從而實(shí)現(xiàn)對(duì)用戶從發(fā)送請(qǐng)求到請(qǐng)求處理完成的全鏈路、完整生命周期的服務(wù)監(jiān)控。告警組件提供故障的實(shí)時(shí)告警,可通過郵件、短信等方式通知運(yùn)維管理人員,從而幫助其及時(shí)處理問題,提高運(yùn)維服務(wù)效率。
二、系統(tǒng)設(shè)計(jì)
(一)業(yè)務(wù)架構(gòu)
在設(shè)計(jì)全鏈路智能精準(zhǔn)監(jiān)控平臺(tái)的業(yè)務(wù)架構(gòu)過程中,主要從五個(gè)方面考慮:1.輕量化采集探針,確保數(shù)據(jù)采集過程業(yè)務(wù)無侵入;2.數(shù)據(jù)采集低消耗,一套探針可應(yīng)對(duì)各種分析場(chǎng)景;3.全面兼容國(guó)產(chǎn)化環(huán)境,可支持阿里云、華為云等云平臺(tái);4.采集和分析過程分離,避免對(duì)業(yè)務(wù)運(yùn)行造成影響;5.通過融合全方位的采集數(shù)據(jù),采用智能大數(shù)據(jù)分析手段,提供精準(zhǔn)全面的全鏈路監(jiān)控分析和系統(tǒng)健康度分析。
支持多種探針部署,采集應(yīng)用運(yùn)行狀態(tài)數(shù)據(jù)和網(wǎng)絡(luò)指標(biāo);監(jiān)測(cè)數(shù)據(jù)統(tǒng)一匯聚到數(shù)據(jù)分析相關(guān)組件,集中完成數(shù)據(jù)收集、聚合壓縮和關(guān)聯(lián)分析,為前端的統(tǒng)一監(jiān)測(cè)視圖展示提供服務(wù)。通過統(tǒng)一可視化頁(yè)面的方式實(shí)現(xiàn)終端監(jiān)控、應(yīng)用監(jiān)控、智能告警、統(tǒng)計(jì)分析。
(二)業(yè)務(wù)流程設(shè)計(jì)
構(gòu)建應(yīng)用運(yùn)行全方位感知分析體系的關(guān)鍵在于對(duì)度量指標(biāo)數(shù)據(jù)與調(diào)用依賴數(shù)據(jù)的收集,因此,需要強(qiáng)化系統(tǒng)的數(shù)據(jù)采集能力。全鏈路智能精準(zhǔn)監(jiān)控平臺(tái)采用應(yīng)用探針、網(wǎng)絡(luò)探針和瀏覽器探針獲取指標(biāo)數(shù)據(jù)和調(diào)用依賴數(shù)據(jù),以此完成對(duì)目標(biāo)系統(tǒng)的全面、持續(xù)監(jiān)控,確保鏈路信息更加完整、準(zhǔn)確。
1.應(yīng)用探針收集到應(yīng)用服務(wù)的狀態(tài)數(shù)據(jù)和運(yùn)行數(shù)據(jù)后,會(huì)以加密方式將數(shù)據(jù)傳輸?shù)饺溌肪珳?zhǔn)監(jiān)控平臺(tái)。系統(tǒng)采用平均鏈路聚類法和圖論模型算法,識(shí)別應(yīng)用運(yùn)行方式和鏈路拓?fù)?,?gòu)建業(yè)務(wù)應(yīng)用拓?fù)鋱D,并將資源信息、應(yīng)用實(shí)例和應(yīng)用鏈路進(jìn)行關(guān)聯(lián)識(shí)別,完成基于業(yè)務(wù)鏈路維度的關(guān)聯(lián)分析,綜合匯聚數(shù)據(jù)后,完成業(yè)務(wù)畫像建模。
2.網(wǎng)絡(luò)探針以非侵入式的方式對(duì)業(yè)務(wù)資源中的各類事件進(jìn)行采集、組裝和分析,完成數(shù)據(jù)采集,且整個(gè)過程不影響業(yè)務(wù)運(yùn)行。
3.瀏覽器探針對(duì)狀態(tài)數(shù)據(jù)進(jìn)行元數(shù)據(jù)拆分,構(gòu)建監(jiān)測(cè)用戶排查邏輯,形成用戶端使用信息,實(shí)現(xiàn)對(duì)業(yè)務(wù)應(yīng)用的全方位、多尺度監(jiān)測(cè)。
(三)組件設(shè)計(jì)
系統(tǒng)部署了探針,用于收集應(yīng)用服務(wù)運(yùn)行時(shí)的數(shù)據(jù)。探針將收集的數(shù)據(jù)發(fā)送到Kafka存儲(chǔ),數(shù)據(jù)分析組件從Kafka中提取數(shù)據(jù),隨后對(duì)數(shù)據(jù)進(jìn)行預(yù)處理工作。完成預(yù)處理后,這些數(shù)據(jù)會(huì)被存儲(chǔ)到數(shù)據(jù)庫(kù)中,以確保數(shù)據(jù)的持久性。為了使用戶能夠方便地查詢這些數(shù)據(jù),設(shè)計(jì)了數(shù)據(jù)展示組件。用戶可以通過前端頁(yè)面與這個(gè)組件進(jìn)行交互,從而查詢并展示所需的數(shù)據(jù)。
探針:采用非侵入式部署,通過AOP(Aspect-Oriented Programming)與字節(jié)碼增強(qiáng)的方式實(shí)現(xiàn)對(duì)應(yīng)用運(yùn)行數(shù)據(jù)的采集。
數(shù)據(jù)分析:負(fù)責(zé)預(yù)處理探針采集的數(shù)據(jù),包括錯(cuò)誤數(shù)據(jù)的丟棄、拓?fù)鋱D的解析、同類型數(shù)據(jù)的歸并等。當(dāng)需要監(jiān)控的應(yīng)用服務(wù)數(shù)量眾多時(shí),為了有效處理龐大的數(shù)據(jù)量,數(shù)據(jù)分析組件會(huì)采用集群化的部署方式,以確保能夠高效地完成數(shù)據(jù)處理任務(wù)。數(shù)據(jù)分析組件會(huì)將處理好的數(shù)據(jù)持久化到數(shù)據(jù)庫(kù)中。
Kafka:主要負(fù)責(zé)數(shù)據(jù)的緩沖,通過調(diào)節(jié)數(shù)據(jù)采集與數(shù)據(jù)分析之間速度不匹配的問題,避免出現(xiàn)因?yàn)樘结槹l(fā)送數(shù)據(jù)過多而數(shù)據(jù)分析組件無法及時(shí)處理而造成的數(shù)據(jù)阻塞或丟失。
Elasticsearch集群:為了在大數(shù)據(jù)環(huán)境下實(shí)現(xiàn)秒級(jí)查詢的高效性能,選擇使用Elasticsearch作為數(shù)據(jù)持久化的存儲(chǔ)數(shù)據(jù)庫(kù),存放數(shù)據(jù)分析組件分析后的數(shù)據(jù)。還可以通過內(nèi)部的發(fā)現(xiàn)機(jī)制實(shí)現(xiàn)橫向節(jié)點(diǎn)的擴(kuò)充,實(shí)現(xiàn)PB級(jí)別數(shù)據(jù)查詢的能力[6]。
數(shù)據(jù)展示:負(fù)責(zé)處理用戶發(fā)出的請(qǐng)求,通過深入分析用戶的請(qǐng)求路徑,并依據(jù)路徑所關(guān)聯(lián)的代碼邏輯,在Elasticsearch集群中精確篩選所需數(shù)據(jù)。經(jīng)過篩選和處理的數(shù)據(jù)最終會(huì)通過前端界面清晰地展示給用戶。
自監(jiān)控:負(fù)責(zé)監(jiān)控系統(tǒng)中各組件的運(yùn)行狀態(tài),可設(shè)置自動(dòng)清除數(shù)據(jù)規(guī)則,保證系統(tǒng)資源有效性和系統(tǒng)組件的穩(wěn)定運(yùn)行。
告警:根據(jù)需要配置告警規(guī)則,通過多種方式,如短信、郵件等發(fā)布告警通知。
(四)故障診斷
1.執(zhí)行軌跡構(gòu)建
基于調(diào)用圖的故障分析方法,在測(cè)試和運(yùn)行階段,對(duì)請(qǐng)求調(diào)用的執(zhí)行軌跡進(jìn)行信息采集,獲取請(qǐng)求調(diào)用的執(zhí)行軌跡,構(gòu)建執(zhí)行軌跡集合,作為檢測(cè)目標(biāo)系統(tǒng)故障的基準(zhǔn)。為確保目標(biāo)系統(tǒng)運(yùn)行過程中不遺漏任何正確的執(zhí)行路徑,管理員在監(jiān)控到異常執(zhí)行軌跡時(shí),會(huì)憑借自身經(jīng)驗(yàn)進(jìn)行必要的調(diào)整,隨后驗(yàn)證并確認(rèn)調(diào)整后的正確執(zhí)行軌跡,最后將這個(gè)新的正確執(zhí)行軌跡加入到執(zhí)行軌跡的集合當(dāng)中。
2.故障定位
若目標(biāo)系統(tǒng)遭遇故障,其執(zhí)行軌跡會(huì)偏離正常路徑,具體表現(xiàn)為軌跡結(jié)構(gòu)的異常變動(dòng)和執(zhí)行時(shí)間的顯著波動(dòng)。為評(píng)估請(qǐng)求處理中的故障情況,本文采用了樹編輯距離[7]作為評(píng)估手段,通過細(xì)致分析執(zhí)行軌跡之間的差異,能夠精確地定位到故障發(fā)生時(shí)所涉及的方法調(diào)用。
其中,請(qǐng)求i所需的執(zhí)行時(shí)長(zhǎng)被記錄為xi,而對(duì)于某一特定類型的請(qǐng)求,其平均執(zhí)行時(shí)長(zhǎng)則用μ來表示。CV(變異系數(shù))是一個(gè)衡量數(shù)據(jù)離散程度的指標(biāo),它等于該類型請(qǐng)求執(zhí)行時(shí)間的標(biāo)準(zhǔn)差與平均執(zhí)行時(shí)間μ的比值。CV數(shù)值越大,說明性能異常程度越高,則需要對(duì)執(zhí)行時(shí)間進(jìn)行異常分析。
采用主成分分析(Principle Component Analysis,簡(jiǎn)稱PCA)[8],將n維數(shù)據(jù)削減為p個(gè)主成分(p≤n)以有效地表現(xiàn)原始數(shù)據(jù)信息。其中a為主成分與調(diào)用方法執(zhí)行時(shí)間的系數(shù),表示主成分與原始數(shù)據(jù)維度的相關(guān)性,其數(shù)值越大,表明這個(gè)維度對(duì)應(yīng)的方法引起性能問題的可能性越大,因此,通過判斷a值,能快速定位故障位置。
(五)規(guī)則和知識(shí)庫(kù)
通過對(duì)辦案系統(tǒng)應(yīng)用、網(wǎng)絡(luò)、硬件等鏈路監(jiān)控?cái)?shù)據(jù)的全量采集,利用基于局部異常因子的無監(jiān)督學(xué)習(xí)異常檢測(cè)算法和異常頻繁項(xiàng)聯(lián)動(dòng)算法,將數(shù)據(jù)配置在數(shù)據(jù)庫(kù)中。異常規(guī)則表包括異常類型、異常方法、類名稱、探針I(yè)D等關(guān)鍵信息;異常監(jiān)控配置表包括集群標(biāo)識(shí)、服務(wù)IP、收包內(nèi)容等關(guān)鍵信息;網(wǎng)絡(luò)異常規(guī)則過濾表包括應(yīng)用的屬性集群IP、節(jié)點(diǎn)命名空間、虛機(jī)節(jié)點(diǎn)和過濾類型等關(guān)鍵信息;網(wǎng)絡(luò)異常規(guī)則過濾詳情表包括事務(wù)過濾URL、關(guān)聯(lián)網(wǎng)絡(luò)異常規(guī)則過濾表的ID等關(guān)鍵信息;重要URL過濾表包括集群標(biāo)識(shí)、重要URL、閾值等信息。構(gòu)建針對(duì)業(yè)務(wù)異常頻繁項(xiàng)集的異常關(guān)聯(lián)規(guī)則庫(kù),可實(shí)現(xiàn)對(duì)覆蓋應(yīng)用關(guān)聯(lián)的全鏈路數(shù)據(jù)的實(shí)時(shí)監(jiān)控和異常提取。
設(shè)計(jì)不同的索引將各種探針采集到的數(shù)據(jù)存到Elasticsearch數(shù)據(jù)庫(kù)中。針對(duì)應(yīng)用探針采集的事務(wù)數(shù)據(jù),設(shè)計(jì)JavaTraceData索引,包含單次事務(wù)請(qǐng)求的詳細(xì)信息、系統(tǒng)出錯(cuò)信息追蹤、數(shù)據(jù)庫(kù)查詢信息、WAR包之間調(diào)用的信息等。針對(duì)應(yīng)用探針采集的應(yīng)用訪問數(shù)據(jù)庫(kù)的數(shù)據(jù),設(shè)計(jì)DBType索引;針對(duì)應(yīng)用探針采集到的應(yīng)用之間的訪問信息數(shù)據(jù),設(shè)計(jì)Relationship索引,以拓?fù)湫问秸故?;針?duì)應(yīng)用探針記錄的事務(wù)詳情數(shù)據(jù),設(shè)計(jì)Response索引,記錄每一次事務(wù)具體操作各個(gè)階段的耗時(shí);針對(duì)網(wǎng)絡(luò)探針采集目標(biāo)系統(tǒng)的網(wǎng)絡(luò)調(diào)用數(shù)據(jù),設(shè)計(jì)HttpData索引記錄調(diào)用詳情數(shù)據(jù),設(shè)計(jì)SnifferData索引記錄調(diào)用關(guān)系數(shù)據(jù);針對(duì)網(wǎng)絡(luò)探針采集到的進(jìn)程信息數(shù)據(jù),設(shè)計(jì)Process索引;針對(duì)網(wǎng)絡(luò)探針采集到的主機(jī)信息數(shù)據(jù),設(shè)計(jì)System索引記錄IP、內(nèi)存信息、CPU使用情況;針對(duì)網(wǎng)絡(luò)探針采集到的磁盤信息數(shù)據(jù),設(shè)計(jì)Filesystem索引記錄各個(gè)分區(qū)的磁盤情況。建立應(yīng)用異常知識(shí)庫(kù),為辦案系統(tǒng)運(yùn)行過程中的異常智能告警提供服務(wù)。
三、系統(tǒng)部署
全鏈路智能精準(zhǔn)監(jiān)控平臺(tái)采用分布式部署,在三臺(tái)服務(wù)器上部署不同組件,其中,在數(shù)據(jù)收集服務(wù)器上部署數(shù)據(jù)采集組件、配置組件;在數(shù)據(jù)存儲(chǔ)服務(wù)器上部署自監(jiān)控組件、告警組件、Elasticsearch、Kafka;在數(shù)據(jù)處理服務(wù)器上部署數(shù)據(jù)展示組件、數(shù)據(jù)分析組件、Aerospike。每臺(tái)服務(wù)器的資源配置為:CPU為16核、內(nèi)存32G、系統(tǒng)盤為100G、數(shù)據(jù)盤為500G、數(shù)據(jù)庫(kù)為Elasticsearch。
四、系統(tǒng)應(yīng)用
通過全鏈路智能精準(zhǔn)監(jiān)控平臺(tái)的部署應(yīng)用,實(shí)現(xiàn)對(duì)檢察機(jī)關(guān)辦案系統(tǒng)的應(yīng)用服務(wù)、硬件資源、瀏覽器頁(yè)面等的監(jiān)測(cè),實(shí)現(xiàn)對(duì)故障的快速分析與定位。
在應(yīng)用監(jiān)控方面,采用拓?fù)鋱D的形式展示某個(gè)時(shí)間段內(nèi)與應(yīng)用直接關(guān)聯(lián)的服務(wù);展示指定時(shí)間段耗時(shí)最長(zhǎng)Web事務(wù)圖表、響應(yīng)時(shí)間和吞吐量,提供慢事務(wù)追蹤的功能,精準(zhǔn)定位慢事務(wù);展示應(yīng)用實(shí)例存在的異常及對(duì)異常的分析詳情;展示應(yīng)用所訪問的數(shù)據(jù)庫(kù)詳情,耗時(shí)最長(zhǎng)的SQL語(yǔ)句、響應(yīng)時(shí)間和吞吐率。在硬件監(jiān)控方面,展示監(jiān)控服務(wù)的系統(tǒng)負(fù)載、CPU使用率、內(nèi)存使用率、內(nèi)存使用量、磁盤使用率、磁盤使用量、進(jìn)程CPU使用率、進(jìn)程內(nèi)存使用率、連接成功率、磁盤I/O讀寫次數(shù)、磁盤I/O吞吐量、磁盤掛載等信息。在瀏覽器監(jiān)控方面,展示所有頁(yè)面的用戶感知平均時(shí)間,可分解為白屏、可交互、PV時(shí)間;展示服務(wù)器端的響應(yīng)時(shí)間、HTML加載、頁(yè)面渲染性能;展示主機(jī)目錄和主機(jī)下的頁(yè)面及其加載耗時(shí);展示主機(jī)AJAX請(qǐng)求的信息。
五、結(jié)束語(yǔ)
本研究通過利用應(yīng)用探針、網(wǎng)絡(luò)探針、瀏覽器探針對(duì)檢察機(jī)關(guān)辦案系統(tǒng)應(yīng)用、網(wǎng)絡(luò)、硬件等鏈路監(jiān)控?cái)?shù)據(jù)的全量采集,構(gòu)建了針對(duì)業(yè)務(wù)異常頻繁項(xiàng)集的異常關(guān)聯(lián)規(guī)則庫(kù)和應(yīng)用異常知識(shí)庫(kù)。引入動(dòng)態(tài)插樁方法實(shí)現(xiàn)跨服務(wù)組件的請(qǐng)求軌跡監(jiān)測(cè),采用調(diào)用樹對(duì)執(zhí)行軌跡進(jìn)行刻畫和自動(dòng)構(gòu)建,基于主成分分析方法對(duì)應(yīng)用異常進(jìn)行自動(dòng)監(jiān)測(cè)和細(xì)粒度定位,能夠?yàn)闄z察機(jī)關(guān)辦案系統(tǒng)的穩(wěn)定運(yùn)行提供有力保障。
作者單位:李志榮 中華人民共和國(guó)最高人民檢察院王廷帥 北京計(jì)算機(jī)技術(shù)及應(yīng)用研究所
賈煒 北京計(jì)算機(jī)技術(shù)及應(yīng)用研究所
周益周 北京計(jì)算機(jī)技術(shù)及應(yīng)用研究所
參考文獻(xiàn)
[1]FabianAulkemeier,MilanSchramm,Maria-EugeniaIacob,JosvanHillegersberg.AService-OrientedE-CommerceReferenceArchitecture[J].JournalofTheoreticalandAppliedElectronicCommerceResearch,2016,11(1).
[2]唐志濤,劉星.企業(yè)應(yīng)用系統(tǒng)架構(gòu)演進(jìn)[J].科技創(chuàng)新與應(yīng)用,2017(35):120-121.
[3]NadareishviliI,MitraR,McLartyM,eta1.Microservicearchitecture:aligningprinciples,practices,andculture[M].“O’ReillyMedia,Inc.”,2016.
[4]梁偉,楊明川,馮明,等.應(yīng)用性能管理技術(shù)的研發(fā)與應(yīng)用[J].電信技術(shù),2017(06):42-45.
[5]王子勇,王燾,張文博,等.一種基于執(zhí)行軌跡監(jiān)測(cè)的微服務(wù)故障診斷方法[J].軟件學(xué)報(bào),2017,28(06):20.
[6]ElasticN.V.;ElasticsearchServiceIsNowAvailableonGoogleCloudPlatformGCPinJapan[J].ComputerTechnologyJournal,2019.
[7]Bille P. A survey on tree edit distance and related problems. Theoretical Computer Science, 2005,337(1):217-239.
[8]Jolliffe I. Principal Component Analysis. Wiley Online Library, 2002.