李思毅,馬詩雨,崔麗月,張圣林,孫永謙,張玉志
南開大學(xué),軟件學(xué)院,天津 300350
在移動(dòng)互聯(lián)網(wǎng)背景下,互聯(lián)網(wǎng)等行業(yè)業(yè)務(wù)更新迭代速度加快,需求研發(fā)周期大大縮短,線上應(yīng)用變更十分頻繁。與此同時(shí),新冠疫情加速了傳統(tǒng)行業(yè)線上化和數(shù)字化轉(zhuǎn)型,超大規(guī)模云平臺(tái)作為關(guān)鍵基礎(chǔ)設(shè)施,為我國經(jīng)濟(jì)轉(zhuǎn)型升級(jí)提供了重要支撐,已廣泛應(yīng)用于電信、互聯(lián)網(wǎng)、金融、政府、電力等多個(gè)行業(yè),但這些行業(yè)線上業(yè)務(wù)體量龐大、監(jiān)管嚴(yán)格、對(duì)異常容忍度極低[1]。隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和各行業(yè)業(yè)務(wù)的多元化需求,將會(huì)有越來越多的傳統(tǒng)行業(yè)在數(shù)字化轉(zhuǎn)型和上云過程中采用云原生架構(gòu)[2],將原本的單體應(yīng)用拆分成數(shù)百個(gè)微服務(wù)[3]應(yīng)用,每個(gè)微服務(wù)應(yīng)用部署到上千個(gè)容器實(shí)例上。一個(gè)微服務(wù)應(yīng)用可以同時(shí)為多個(gè)業(yè)務(wù)鏈路提供服務(wù),因此微服務(wù)應(yīng)用之間存在復(fù)雜的調(diào)用關(guān)系。當(dāng)一個(gè)微服務(wù)應(yīng)用出現(xiàn)異常時(shí),它將影響調(diào)用鏈路下游的多個(gè)微服務(wù)應(yīng)用,最終影響整個(gè)業(yè)務(wù)鏈路的成功率。例如,對(duì)于金融行業(yè)實(shí)現(xiàn)合約簽訂、信用審核等微服務(wù)應(yīng)用會(huì)被其他應(yīng)用高頻次調(diào)用。當(dāng)這類微服務(wù)應(yīng)用出現(xiàn)異常時(shí),異常會(huì)擴(kuò)散至多個(gè)微服務(wù)應(yīng)用,形成告警風(fēng)暴,單純依賴人工故障定位很難滿足電信、互聯(lián)網(wǎng)、金融、政府、電力等行業(yè)對(duì)于系統(tǒng)穩(wěn)定性的要求,而對(duì)于這些行業(yè)來說,極短時(shí)間的故障也會(huì)產(chǎn)生巨大資損,給國家造成重大損失。因此,依賴費(fèi)時(shí)費(fèi)力、無法擴(kuò)展的人工方式故障應(yīng)急是不可行的。
鑒于此,本文總結(jié)了面向微服務(wù)架構(gòu)的根因定位方法,探索在微服務(wù)架構(gòu)下系統(tǒng)發(fā)生異常后自動(dòng)、準(zhǔn)確地定位引起異常的根因事件或異常組件,縮短異常修復(fù)時(shí)間,提高云上系統(tǒng)穩(wěn)定性。
微服務(wù)指將大型的單體軟件應(yīng)用拆分成多個(gè)簡(jiǎn)單應(yīng)用,每個(gè)簡(jiǎn)單應(yīng)用描述一個(gè)細(xì)分業(yè)務(wù)或功能,系統(tǒng)中各個(gè)簡(jiǎn)單應(yīng)用可被獨(dú)立部署,且各個(gè)應(yīng)用之間松耦合以實(shí)現(xiàn)系統(tǒng)的持續(xù)快速交付和運(yùn)維[4]。微服務(wù)架構(gòu)與傳統(tǒng)的單體架構(gòu)相比,旨在通過將功能分解到各個(gè)離散的服務(wù)中,實(shí)現(xiàn)單個(gè)系統(tǒng)復(fù)雜度和耦合性降低,通過系統(tǒng)之間的輕量級(jí)通信機(jī)制實(shí)現(xiàn)相互協(xié)作,具有更細(xì)粒度的獨(dú)立部署、獨(dú)立擴(kuò)展、跨語言編程等特點(diǎn)。微服務(wù)架構(gòu)在帶來靈活性、開發(fā)敏捷性的同時(shí)也帶來了運(yùn)維層面的挑戰(zhàn),隨著應(yīng)用服務(wù)數(shù)量的增加,微服務(wù)之間的通信、部署依賴、數(shù)據(jù)一致性、監(jiān)控以及安全性的管理成為新的挑戰(zhàn)。
云原生技術(shù)是基于微服務(wù)架構(gòu)思想、以容器技術(shù)為載體的一種產(chǎn)品研發(fā)運(yùn)營的全新模式。云原生技術(shù)是各行業(yè)在公有云、私有云或混合云中構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用的核心技術(shù)。云原生的代表技術(shù)包括服務(wù)網(wǎng)格(Service Mesh)[5]、基于Kubernetes[6]的容器技術(shù)、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
綜上,基于微服務(wù)架構(gòu)的云原生系統(tǒng)將是未來一段時(shí)間各行業(yè)數(shù)字化轉(zhuǎn)型過程中技術(shù)上主要的發(fā)展趨勢(shì)。
1.2.1 監(jiān)控指標(biāo)
監(jiān)控中臺(tái)是微服務(wù)架構(gòu)下的核心系統(tǒng)之一,面向微服務(wù)場(chǎng)景下的全功能監(jiān)控中臺(tái)包含關(guān)鍵業(yè)務(wù)鏈路監(jiān)控、應(yīng)用監(jiān)控、基礎(chǔ)設(shè)施監(jiān)控和自定義監(jiān)控等功能,為系統(tǒng)監(jiān)控報(bào)警以及后續(xù)運(yùn)維操作提供基礎(chǔ)。監(jiān)控中臺(tái)關(guān)注的主要包含如下指標(biāo):
(1)業(yè)務(wù)指標(biāo):包括關(guān)鍵業(yè)務(wù)鏈路的成功率、失敗數(shù)、平均耗時(shí)等描述業(yè)務(wù)穩(wěn)定性的指標(biāo)。
(2)系統(tǒng)指標(biāo):包括POD 容器、應(yīng)用容器、Sidecar 容器等多個(gè)維度的指標(biāo),主要有:CPU、LOAD(負(fù)載)、MEM(內(nèi)存)、下游請(qǐng)求信息、上游請(qǐng)求信息、磁盤水位等。
監(jiān)控中臺(tái)在整合監(jiān)控?cái)?shù)據(jù)的基礎(chǔ)上,同時(shí)集成了監(jiān)控指標(biāo)的異常檢測(cè)能力,并通過異常事件中心等功能展示給運(yùn)維工程師。
圖1 某金融系統(tǒng)交易成功量(業(yè)務(wù)指標(biāo))Fig.1 The number of successful transactions in the financial system (business indicator)
圖2 云平臺(tái)中某物理機(jī)CPU 使用量(系統(tǒng)指標(biāo))Fig.2 CPU usage of a physical machine in the cloud platform (system metrics)
1.2.2 CMDB
CMDB[7]的全稱是configuration management database(配置管理數(shù)據(jù)庫)。CMDB 是云上所有核心硬件、軟件及其關(guān)聯(lián)關(guān)系的邏輯體現(xiàn)。如圖3所示,CMDB 保存了機(jī)房、機(jī)柜、網(wǎng)絡(luò)位置、網(wǎng)絡(luò)設(shè)備、服務(wù)器、應(yīng)用、應(yīng)用分組、云資源實(shí)例等實(shí)體的物理拓?fù)浜驮粕贤負(fù)潢P(guān)系。CMDB 保存的運(yùn)維元數(shù)據(jù)是異常處理的關(guān)鍵依據(jù)。
圖3 CMDB 中的實(shí)時(shí)拓?fù)潢P(guān)系Fig.3 Real-time topological relationships in CMDB
當(dāng)異常發(fā)生時(shí),監(jiān)控中臺(tái)會(huì)根據(jù)已有的異常告警原則產(chǎn)生大量告警信息,短時(shí)間內(nèi)產(chǎn)生的數(shù)量龐大的告警(告警風(fēng)暴)給運(yùn)維工程師異常處理帶來了極大的挑戰(zhàn),在龐大的業(yè)務(wù)系統(tǒng)和海量的告警信息中迅速發(fā)現(xiàn)告警風(fēng)暴背后的異常關(guān)聯(lián)關(guān)系并鎖定根因的難度非常大。本文調(diào)研了智能運(yùn)維領(lǐng)域關(guān)于根因定位方法的相關(guān)文獻(xiàn),對(duì)微服務(wù)架構(gòu)下基于圖推理的根因定位方法進(jìn)行總結(jié),為大規(guī)模云平臺(tái)的智能根因定位系統(tǒng)建設(shè)提供參考。
在大規(guī)模云平臺(tái)中,智能告警系統(tǒng)通過時(shí)間序列異常檢測(cè)算法結(jié)合人工設(shè)置的指標(biāo)異常檢測(cè)規(guī)則實(shí)時(shí)監(jiān)測(cè)系統(tǒng)狀態(tài),力求在最短時(shí)間內(nèi)發(fā)現(xiàn)指標(biāo)的異常情況。當(dāng)系統(tǒng)發(fā)生異常,由于大型的網(wǎng)絡(luò)、云平臺(tái)內(nèi)部設(shè)備眾多,關(guān)聯(lián)關(guān)系復(fù)雜,清晰的調(diào)用關(guān)系、設(shè)備與鏈接的相互連接關(guān)系是根因定位的重要基礎(chǔ)。除了CMDB 提供的網(wǎng)絡(luò)設(shè)備的物理拓?fù)渲?,還存在指標(biāo)間、協(xié)議間的關(guān)聯(lián)關(guān)系。上述關(guān)聯(lián)關(guān)系對(duì)異常的排查、止損與溯源起著至關(guān)重要的作用。根因定位系統(tǒng)在異常發(fā)生后基于相關(guān)運(yùn)維元數(shù)據(jù)分析結(jié)合智能運(yùn)維算法確定引發(fā)異常的根本原因。具體來講,根因定位系統(tǒng)主要分為兩個(gè)部分:系統(tǒng)首先通過關(guān)系學(xué)習(xí)方法構(gòu)建異常指標(biāo)、異常組件或異常事件之間的故障傳播圖,該圖描述了異常發(fā)生時(shí)刻設(shè)備實(shí)體及其關(guān)鍵指標(biāo)、告警狀態(tài)間的關(guān)聯(lián)關(guān)系或依賴關(guān)系。之后,根因定位系統(tǒng)通過圖推理算法可以得出圖中節(jié)點(diǎn)的根因可能性排名,取Top N 作為推薦根因輸出。
本章介紹微服務(wù)架構(gòu)下用于構(gòu)建故障傳播圖的關(guān)系學(xué)習(xí)方法和對(duì)故障傳播圖進(jìn)行節(jié)點(diǎn)重要性排序?qū)崿F(xiàn)推薦異常根因的相關(guān)算法。
當(dāng)微服務(wù)架構(gòu)下的線上系統(tǒng)發(fā)生異常,由于大型的網(wǎng)絡(luò)、云平臺(tái)內(nèi)部設(shè)備眾多,關(guān)聯(lián)關(guān)系復(fù)雜,清晰的調(diào)用關(guān)系、設(shè)備與鏈接的相互連接關(guān)系是根因定位的重要基礎(chǔ)。除了網(wǎng)絡(luò)設(shè)備的物理拓?fù)渲猓€存在不同的指標(biāo)、協(xié)議等關(guān)聯(lián)關(guān)系。上述這些關(guān)聯(lián)關(guān)系都對(duì)異常的排查、止損與溯源起著至關(guān)重要的作用。根據(jù)異常時(shí)段的關(guān)聯(lián)關(guān)系構(gòu)成的有向無環(huán)圖(Directed Acyclic Graph,DAG)即為故障傳播圖。在故障傳播圖中,異常會(huì)沿著模塊和設(shè)備間的依賴關(guān)系傳播,導(dǎo)致更大范圍的模塊和設(shè)備的異常。
圖4 微服務(wù)根因定位框架Fig.4 Root cause localization framework
由于實(shí)際生產(chǎn)環(huán)境多種多樣,不同系統(tǒng)架構(gòu)下構(gòu)建出的故障傳播圖也各不相同。故障傳播圖按節(jié)點(diǎn)類型主要分為三類:以異常指標(biāo)為節(jié)點(diǎn)的故障傳播圖、以異常組件為節(jié)點(diǎn)的故障傳播圖和以異常事件為節(jié)點(diǎn)的故障傳播圖。相同屬性的節(jié)點(diǎn)多依賴算法挖掘和程序調(diào)用分析,不同屬性的節(jié)點(diǎn)多依賴CMDB 提供的拓?fù)潢P(guān)系,綜上,可以構(gòu)建出描述異常發(fā)生時(shí)段內(nèi)系統(tǒng)的故障傳播圖。
目前,已有的相關(guān)工作通過一些關(guān)系學(xué)習(xí)方法來構(gòu)建故障傳播圖。關(guān)系學(xué)習(xí)方法主要有三種:系統(tǒng)信息構(gòu)建、算法自動(dòng)學(xué)習(xí)和兩者相結(jié)合。這一節(jié)將分別介紹三種關(guān)系學(xué)習(xí)方法。
3.1.1 系統(tǒng)信息
基于系統(tǒng)信息構(gòu)建的故障傳播圖如圖5所示,根據(jù)系統(tǒng)設(shè)備、模塊之間明確的的部署、依賴、調(diào)用關(guān)系等系統(tǒng)信息可以直接構(gòu)建故障傳播圖,其中節(jié)點(diǎn)為異常性能指標(biāo)對(duì)應(yīng)的系統(tǒng)設(shè)備、模塊,邊為上述節(jié)點(diǎn)之間的部署、依賴、調(diào)用關(guān)系。這里的系統(tǒng)信息主要包括靜態(tài)的物理設(shè)備之間的部署關(guān)系(通過CMDB 獲?。┮约皠?dòng)態(tài)的實(shí)時(shí)系統(tǒng)模塊之間的調(diào)用關(guān)系。通過配置數(shù)據(jù)采集模塊、日志分析工具、程序調(diào)用分析工具等手段獲取系統(tǒng)模塊之間的實(shí)時(shí)調(diào)用信息。
圖5 以異常組件為節(jié)點(diǎn)的故障傳播圖示例Fig.5 A example of a fault propagation graph with anomalous components as nodes
根據(jù)系統(tǒng)信息可以直接構(gòu)建故障傳播圖,但在實(shí)際的生產(chǎn)環(huán)境中,收集額外的系統(tǒng)數(shù)據(jù)需要更改線上Web 服務(wù)的架構(gòu)。由于更改線上系統(tǒng)架構(gòu)十分困難,所以基于系統(tǒng)信息的構(gòu)圖方法難以應(yīng)用。
3.1.2 算法自動(dòng)學(xué)習(xí)
采用算法自動(dòng)學(xué)習(xí)的方法構(gòu)建故障傳播圖的原理是通過對(duì)監(jiān)控指標(biāo)數(shù)據(jù)的學(xué)習(xí),按需提取監(jiān)控指標(biāo)之間的依賴關(guān)系,以確定故障傳播圖中的異常節(jié)點(diǎn)及其關(guān)聯(lián)關(guān)系。其中,節(jié)點(diǎn)為監(jiān)控指標(biāo),邊為挖掘出的指標(biāo)之間的依賴關(guān)系。
目前相關(guān)工作中最常用的思路為通過PC 算法[8]自動(dòng)構(gòu)建監(jiān)控指標(biāo)之間的依賴關(guān)系來構(gòu)建故障傳播圖。PC 算法主要分為兩步。首先,通過檢驗(yàn)條件獨(dú)立性確定節(jié)點(diǎn)間的依賴關(guān)系,生成一個(gè)無向圖以構(gòu)建骨架(skeleton)。PC 算法把上述過程轉(zhuǎn)化為d 分隔(d-separation)問題,采用了Fisher Z Test 作為條件獨(dú)立性檢驗(yàn)方法對(duì)任意兩個(gè)節(jié)點(diǎn)進(jìn)行條件獨(dú)立性檢驗(yàn)以判斷d 分隔。然后,利用d 分隔的原理來確定圖中邊的依賴方向,把無向圖擴(kuò)展為有向無環(huán)圖[8]。
除PC 算法之外,也可以通過相關(guān)性分析方法挖掘監(jiān)控指標(biāo)數(shù)據(jù)之間的依賴關(guān)系從而構(gòu)建故障傳播圖。然而,在生產(chǎn)環(huán)境中可能存在一些難以觀察和推導(dǎo)的隱變量,監(jiān)控指標(biāo)數(shù)據(jù)和告警信息也可能存在誤報(bào)、漏報(bào)以及缺損,導(dǎo)致通過算法自動(dòng)學(xué)習(xí)到的故障傳播圖準(zhǔn)確度有限。
3.1.3 兩者結(jié)合
為了構(gòu)建更完整、更準(zhǔn)確的故障傳播圖,也有一些相關(guān)工作將系統(tǒng)信息和自動(dòng)學(xué)習(xí)方法結(jié)合使用。
首先結(jié)合系統(tǒng)架構(gòu)的物理拓?fù)潢P(guān)系和系統(tǒng)模塊之間的實(shí)時(shí)調(diào)用關(guān)系等系統(tǒng)信息構(gòu)造系統(tǒng)模塊之間的故障傳播圖,通過PC 算法或者相關(guān)性分析方法挖掘單個(gè)系統(tǒng)模塊節(jié)點(diǎn)上不同監(jiān)控指標(biāo)之間的因果關(guān)系,最后通過結(jié)合構(gòu)造的系統(tǒng)模塊之間的故障傳播圖和單個(gè)系統(tǒng)模塊節(jié)點(diǎn)上的監(jiān)控指標(biāo)之間的因果圖得到一個(gè)完整的全局故障傳播圖。
3.1 中的故障傳播圖描述了系統(tǒng)異常時(shí)刻關(guān)鍵異常節(jié)點(diǎn)的關(guān)聯(lián)關(guān)系,依據(jù)故障傳播圖提供的節(jié)點(diǎn)類型、異常指標(biāo)、拓?fù)潢P(guān)系等信息,對(duì)圖中節(jié)點(diǎn)進(jìn)行重要性排序,排序結(jié)果可以作為本次異常事件的根因推薦,本章節(jié)將對(duì)相關(guān)算法進(jìn)行介紹。
3.2.1 深度優(yōu)先搜索
深度優(yōu)先搜索算法[9](Depth-First-Search,簡(jiǎn)稱DFS)是一種用于遍歷或搜索樹或圖的算法。DFS會(huì)盡可能深地搜索樹的分支。當(dāng)節(jié)點(diǎn)的所在邊都已被探尋過,搜索將回溯到發(fā)現(xiàn)節(jié)點(diǎn)的那條邊的起始節(jié)點(diǎn)。這一過程一直進(jìn)行到已發(fā)現(xiàn)從源節(jié)點(diǎn)可達(dá)的所有節(jié)點(diǎn)為止。在根因定位領(lǐng)域,根據(jù)上述關(guān)系學(xué)習(xí)方法獲取的故障傳播圖表示了異常的傳播過程,因此對(duì)其進(jìn)行深度優(yōu)先搜索是獲得此次異常根因的方法之一。
3.2.2 皮爾森相關(guān)系數(shù)
在統(tǒng)計(jì)學(xué)中,皮爾森相關(guān)系數(shù)[10](Pearson correlation coefficient)用于度量?jī)蓚€(gè)變量和之間的相關(guān)程度(線性相關(guān))。兩個(gè)變量之間的皮爾森相關(guān)系數(shù)定義為兩個(gè)變量的協(xié)方差除以它們標(biāo)準(zhǔn)差的乘積,其值介于-1 與1 之間。
由于各種監(jiān)控都是以時(shí)間序列的形式存在,因此對(duì)于兩個(gè)異常的系統(tǒng)組件,可以分別選取其異常發(fā)生及前一段時(shí)間的監(jiān)控指標(biāo),計(jì)算兩個(gè)時(shí)間序列的皮爾森相關(guān)系數(shù),表示異常組件的異常關(guān)聯(lián)強(qiáng)度。
3.2.3 PageRank 算法
PageRank 算法[11]是Google 公司所使用的對(duì)其搜索引擎搜索結(jié)果中的網(wǎng)頁進(jìn)行排名的一種算法。其本質(zhì)是一種以節(jié)點(diǎn)之間的連接個(gè)數(shù)和權(quán)值作為主要因素粗略地分析故障傳播圖中節(jié)點(diǎn)重要性的算法。
對(duì)于故障傳播圖中某個(gè)節(jié)點(diǎn)pi,其PageRank 值的計(jì)算公式如下:
一般情況下,云原生場(chǎng)景下的故障傳播圖是有向無環(huán)圖,因此對(duì)于已知的故障傳播圖可以通過PageRank 算法計(jì)算圖中節(jié)點(diǎn)的重要程度。有向無環(huán)圖中節(jié)點(diǎn)的重要性排名也可以作為各節(jié)點(diǎn)對(duì)該異常的影響排名。
3.2.4 隨機(jī)游走算法
隨機(jī)游走[12](Random Walk,縮寫為 RW)是一種數(shù)學(xué)統(tǒng)計(jì)模型,它由一連串的軌跡所組成。在原生隨機(jī)游走算法中,每一次游走的方向都是隨機(jī)的??梢越梃b其原理,設(shè)計(jì)故障傳播圖的游走策略并生成概率轉(zhuǎn)移矩陣。每一次游走因子從當(dāng)前節(jié)點(diǎn)向更有可能是異常根因的節(jié)點(diǎn)轉(zhuǎn)移或繼續(xù)留在當(dāng)前節(jié)點(diǎn),重復(fù)此步驟上萬次,并記錄游走軌跡?;诠收蟼鞑D中每個(gè)節(jié)點(diǎn)被訪問的次數(shù)對(duì)節(jié)點(diǎn)進(jìn)行排序,結(jié)果可作為各節(jié)點(diǎn)對(duì)異常的貢獻(xiàn)度排名,從而確定異常根因。隨機(jī)游走算法分為一階隨機(jī)游走和二階隨機(jī)游走。一階隨機(jī)游走是指假設(shè)下一個(gè)要訪問的節(jié)點(diǎn)只依賴于當(dāng)前節(jié)點(diǎn)(馬爾科夫性),其缺點(diǎn)是無法捕獲高階依賴關(guān)系。一階隨機(jī)游走根據(jù)最后一個(gè)頂點(diǎn)的狀態(tài)選擇下一個(gè)頂點(diǎn),它的轉(zhuǎn)移概率的計(jì)算方式為:
二階隨機(jī)游走在訪問下一個(gè)節(jié)點(diǎn)時(shí)依賴于當(dāng)前節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。因此,二階隨機(jī)游走建立了高階依賴關(guān)系,提高了應(yīng)用的精度。二階隨機(jī)游走是根據(jù)最后兩個(gè)頂點(diǎn)和的狀態(tài)選擇下一個(gè)頂點(diǎn),轉(zhuǎn)移概率是
本章節(jié)介紹上述關(guān)系學(xué)習(xí)方法和基于圖推理的根因分析方法的實(shí)踐。
MonitorRank[13]首先通過收集微服務(wù)應(yīng)用上配置的傳感器記錄微服務(wù)之間的調(diào)用關(guān)系,然后根據(jù)異常時(shí)間段的調(diào)用關(guān)系來構(gòu)建故障傳播圖。其基本思想是:故障傳播圖的指標(biāo)m和異常前端節(jié)點(diǎn)(負(fù)責(zé)接收用戶的請(qǐng)求以及進(jìn)一步調(diào)用下游請(qǐng)求以完成用戶的請(qǐng)求的微服務(wù))的指標(biāo)的相關(guān)性表示了該節(jié)點(diǎn)是根因的可能性。為避免非根因節(jié)點(diǎn)和異常前端節(jié)點(diǎn)的指標(biāo)有較高的相關(guān)性,需要分別考慮指標(biāo)之間的相關(guān)性和服務(wù)節(jié)點(diǎn)之間的依賴關(guān)系。概率轉(zhuǎn)移矩陣的設(shè)計(jì)是隨機(jī)游走算法的關(guān)鍵,MonitorRank主要使用故障傳播圖中不同節(jié)點(diǎn)監(jiān)控指標(biāo)的相關(guān)性來生成轉(zhuǎn)移概率。向量定義了每個(gè)節(jié)點(diǎn)和異常前端節(jié)點(diǎn)指標(biāo)的相關(guān)性因此概率轉(zhuǎn)移矩陣可以定義為在實(shí)際情況中,每個(gè)微服務(wù)節(jié)點(diǎn)的異常根因并非一定由其下游調(diào)用節(jié)點(diǎn)導(dǎo)致,也可能是其自身節(jié)點(diǎn)或上游節(jié)點(diǎn)導(dǎo)致。綜上,MonitorRank 給出的轉(zhuǎn)移概率為:
因此完整的概率轉(zhuǎn)移矩陣的定義為:
MicroRCA[14]在構(gòu)建故障傳播圖時(shí)同樣依賴微服務(wù)應(yīng)用間的調(diào)用關(guān)系。與MonitorRank 不同的是,MicroRCA 同時(shí)會(huì)考慮微服務(wù)應(yīng)用在宿主機(jī)上的部署關(guān)系。因?yàn)樵趯?shí)際的運(yùn)維異常處理場(chǎng)景中,當(dāng)一臺(tái)物理機(jī)宕機(jī),的確會(huì)影響到該異常物理機(jī)上部署的全部微服務(wù)應(yīng)用。MicroRCA 同樣基于皮爾森相關(guān)系數(shù)計(jì)算不同節(jié)點(diǎn)之間的相關(guān)性,用作Personalized PageRank 算法[15]中的權(quán)值來推斷異常根因。
與上述工作相似,TON18[16]通過OpenStack 開源云計(jì)算管理平臺(tái)中的系統(tǒng)接口和PreciseTracer 程序調(diào)用分析工具構(gòu)建模塊之間的故障傳播圖,然后通過隨機(jī)游走算法分析故障傳播圖實(shí)現(xiàn)根因定位。
MicroHECL[17]基于監(jiān)控中臺(tái)的服務(wù)調(diào)用關(guān)系和指標(biāo)動(dòng)態(tài)構(gòu)建一定時(shí)間窗口內(nèi)的目標(biāo)微服務(wù)系統(tǒng)的故障傳播圖。故障傳播圖上除了表示各個(gè)服務(wù)節(jié)點(diǎn)之間的調(diào)用關(guān)系外,還記錄了各種度量指標(biāo),例如響應(yīng)時(shí)間(RT)、錯(cuò)誤數(shù)量(EC)和每秒請(qǐng)求數(shù)(QPS)等信息。由于根因服務(wù)和初始異常服務(wù)通常都處于由一系列的異常服務(wù)組成的異常傳播鏈上,MicroHECL 分析了所有可能的異常傳播鏈路,并采用了剪枝策略來消除不相關(guān)的服務(wù)調(diào)用,從而得到候選異常根因服務(wù)集合。MicroHECL 認(rèn)為初始異常服務(wù)的異常指標(biāo)數(shù)據(jù)與根因服務(wù)的異常指標(biāo)有相似的變化趨勢(shì),因此使用皮爾森相關(guān)性系數(shù)進(jìn)行相關(guān)性分析,基于相關(guān)性值對(duì)候選異常根因服務(wù)進(jìn)行排序。
表1 基于圖推理的根因定位方法實(shí)踐Table 1 Practice of abnormal diagnosis method based on graph reasoning
Groot[18]首先從初始告警或者可疑服務(wù)開始通過分布式執(zhí)行軌跡和日志分析維護(hù)一個(gè)全局服務(wù)依賴圖G,服務(wù)依賴圖中的有向邊表示服務(wù)調(diào)用或其他形式的依賴。然后Groot 將G中的每個(gè)服務(wù)對(duì)應(yīng)的異常情況映射成異常事件,總結(jié)了該系統(tǒng)中的各種類型的指標(biāo)、日志的異常行為。結(jié)合SRE 的領(lǐng)域知識(shí)構(gòu)建事件之間的因果關(guān)系,形成基于事件的實(shí)時(shí)因果關(guān)系圖。Groot 提出了改進(jìn)的PageRank 算法GrootRank,使每條邊都與加權(quán)傳播的加權(quán)分?jǐn)?shù)相關(guān)聯(lián),對(duì)于誤報(bào)率高的警報(bào),算法將其設(shè)置得較低。此外,由于葉子節(jié)點(diǎn)更可能是根本原因,GrootRank算法將個(gè)性化向量定制葉子節(jié)點(diǎn)和其余節(jié)點(diǎn)的分?jǐn)?shù),以增強(qiáng)葉子節(jié)點(diǎn)之間的傳播。Groot 基于事件類型構(gòu)建因果關(guān)系圖有兩個(gè)顯著的優(yōu)點(diǎn):
(1)使用監(jiān)控事件作為基本節(jié)點(diǎn)對(duì)比使用服務(wù)節(jié)點(diǎn)能夠獲得更準(zhǔn)確的結(jié)果;
(2)因果關(guān)系圖支持各種事件類型,例如性能指標(biāo)、狀態(tài)日志和系統(tǒng)變更等,并且允許SRE 和開發(fā)人員引入不同的異常事件類型,使得Groot 更加靈活,并支持更廣泛的事件類型。
CloudRanger[19]提出了一種動(dòng)態(tài)因果關(guān)系分析方法,能夠在缺乏拓?fù)涞那闆r下構(gòu)建故障傳播圖,基于二階隨機(jī)游走的啟發(fā)式搜索算法來識(shí)別根因服務(wù)。CloudRanger 首先基于PC 算法自動(dòng)構(gòu)建監(jiān)控指標(biāo)之間的故障傳播圖。之后,CloudRanger 利用二階隨機(jī)游走算法來識(shí)別根因服務(wù)。利用皮爾森相關(guān)性系數(shù)定義相關(guān)性特征以描述指標(biāo)序列之間的相關(guān)性。給定一個(gè)服務(wù)集,以及對(duì)于任何一對(duì)服務(wù)定義指標(biāo)數(shù)據(jù)矩陣,相關(guān)性,對(duì)與的相關(guān)性定義如下:
此外,CloudRanger 設(shè)置了兩種額外的轉(zhuǎn)換類型,即后向和自向,使算法能夠找到更多的路線并使其隨機(jī)游走更具啟發(fā)性。假設(shè)表示已經(jīng)被訪問過的節(jié)點(diǎn),是從當(dāng)前服務(wù)到它的鄰居的后向轉(zhuǎn)移概率,受后向常數(shù)限制,后向轉(zhuǎn)移概率計(jì)算如下:
給定故障傳播圖,CloudRanger 根據(jù)以上公式計(jì)算前向、后向、自我轉(zhuǎn)移概率隨機(jī)游走,記錄每個(gè)服務(wù)節(jié)點(diǎn)的訪問次數(shù)并將其降序排序輸出為根因識(shí)別結(jié)果。
與CloudRanger 相似的是,MSRank[20]、Service-Rank[21]也通過自動(dòng)構(gòu)建監(jiān)控指標(biāo)之間的故障傳播圖去定位根因。它們首先利用PC 算法構(gòu)造有向無環(huán)圖表示監(jiān)控指標(biāo)間的依賴關(guān)系,然后使用不同的算法遍歷生成的故障傳播圖實(shí)現(xiàn)根因定位。其中,MSRank 使用了二階隨機(jī)游走算法去定位根因,ServiceRank 使用皮爾森相關(guān)系數(shù)進(jìn)行相關(guān)性分析以實(shí)現(xiàn)根因定位。
MicroCause[22]在上述工作的基礎(chǔ)上提出一些改進(jìn)。在PC 算法的基礎(chǔ)上提出PCTS(Path Condition Time Series)算法構(gòu)建監(jiān)控指標(biāo)間的依賴關(guān)系,使用TCORW(Temporal Cause Oriented Random Walk)算法去定位根因。當(dāng)關(guān)鍵性能指標(biāo)(Key Performance Indicator,簡(jiǎn)稱KPI) 中檢測(cè)到在線異常 時(shí),MicroCause 將被激活。發(fā)生異常微服務(wù)在異常前數(shù)小時(shí)的監(jiān)控指標(biāo)數(shù)據(jù)將用作MicroCause 的輸入。MicroCause 利用PCTS 算法用于生成該異常的故障傳播圖。使用改進(jìn)的PC 算法用于學(xué)習(xí)時(shí)間序列的因果圖。PCTS 算法假設(shè),如果時(shí)間序列A 和時(shí)間序列B 在某個(gè)時(shí)間點(diǎn)中存在因果關(guān)系,那么在故障傳播圖中A 代表節(jié)點(diǎn)和B 代表節(jié)點(diǎn)間就會(huì)存在一條邊。因此,因果關(guān)系最終會(huì)被合并轉(zhuǎn)化為故障傳播圖。與此同時(shí),異常檢測(cè)模塊檢測(cè)輸入數(shù)據(jù)集是否存在異常。故障傳播圖學(xué)習(xí)模塊和異常檢測(cè)模塊可以并行處理。MicroCause 還設(shè)計(jì)了面向時(shí)間因果的隨機(jī)游走(TCORW)。MicroCause 利用偏相關(guān)系數(shù)(Partial Correlation)來計(jì)算轉(zhuǎn)移概率矩陣。與Pearson 相關(guān)性不同的是,和異常KPI 因果性更強(qiáng)的系統(tǒng)指標(biāo)將具有更高的偏相關(guān)系數(shù),而皮爾森相關(guān)性更注重兩個(gè)指標(biāo)之間的相關(guān)性,因此和異常KPI 因果性更強(qiáng)的系統(tǒng)指標(biāo)將在隨機(jī)游走中獲得更高的訪問次數(shù)。然后隨機(jī)游走的結(jié)果和指標(biāo)的異常程度對(duì)于異常的指標(biāo)計(jì)算潛在根因得分,計(jì)算方式如下:
除PC 算法外,也有一些論文采用相關(guān)性分析的方法構(gòu)建故障傳播圖。例如,BRCA[23]通過分析應(yīng)用服務(wù)監(jiān)控指標(biāo)數(shù)據(jù)中的告警信息去構(gòu)造故障傳播圖,然后通過基于故障傳播圖設(shè)計(jì)排序算法實(shí)現(xiàn)根因定位。
另外也有一些算法結(jié)合系統(tǒng)信息和自動(dòng)學(xué)習(xí)方法以構(gòu)建更完整的故障傳播圖。Microscope[24]首先通過PC 算法和網(wǎng)絡(luò)IP 及端口信息構(gòu)建了微服務(wù)內(nèi)各子服務(wù)之間的故障傳播圖,然后通過一些預(yù)定義的規(guī)則去獲取候選根因列表,并使用皮爾森相關(guān)性系數(shù)對(duì)候選根因排序。CauseInfer[25]通過不同服務(wù)節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信數(shù)據(jù)去構(gòu)造服務(wù)節(jié)點(diǎn)之間的故障傳播圖,基于PC 算法去構(gòu)造單個(gè)服務(wù)節(jié)點(diǎn)上不同監(jiān)控指標(biāo)之間的因果圖,結(jié)合構(gòu)造的服務(wù)節(jié)點(diǎn)之間的故障傳播圖和單個(gè)服務(wù)節(jié)點(diǎn)上的因果圖,通過DFS算法搜索所有異常節(jié)點(diǎn),并根據(jù)得分對(duì)根因進(jìn)行排序輸出。DFS 算法遍歷得到的故障傳播圖,當(dāng)某個(gè)異常節(jié)點(diǎn)無異常子節(jié)點(diǎn),則判斷此指標(biāo)為根因指標(biāo)。如果該節(jié)點(diǎn)指標(biāo)正常,則對(duì)父節(jié)點(diǎn)指標(biāo)進(jìn)行異常檢測(cè),重復(fù)此步驟。由于存在多條因果路徑,DFS 算法最終得到的是根因節(jié)點(diǎn)的集合?;趜-score 方法計(jì)算每個(gè)根因節(jié)點(diǎn)的得分,對(duì)其進(jìn)行排序輸出。計(jì)算公式如下,其中和是平均值和標(biāo)準(zhǔn)滑動(dòng)窗口的偏差。
本文介紹了云原生架構(gòu)下面臨的運(yùn)維挑戰(zhàn),總結(jié)了通用的微服務(wù)架構(gòu)根因定位框架,分別介紹了基于指標(biāo)、系統(tǒng)拓?fù)潢P(guān)系、異常告警等信息構(gòu)造故障傳播圖,以及異常根因推理的方法。文中介紹的微服務(wù)架構(gòu)根因定位方案有以下特點(diǎn):
(1)通用性強(qiáng):基于圖推理的根因定位方法適用于云原生架構(gòu)的多種類型異常。
(2)可解釋性強(qiáng):本文闡述的故障傳播圖的構(gòu)建方案能夠自動(dòng)梳理告警風(fēng)暴背后的邏輯關(guān)聯(lián),直觀地將異常在系統(tǒng)中的傳播關(guān)系展現(xiàn)給運(yùn)維工程師,且故障傳播圖的構(gòu)建依賴準(zhǔn)確的系統(tǒng)拓?fù)浣Y(jié)構(gòu)和應(yīng)用調(diào)用日志,因此具有很強(qiáng)的可解釋性。
(3)自適應(yīng)且輕量級(jí):以上方案只需要少量人工干預(yù),節(jié)約了大量人力,并且該框架可以適應(yīng)網(wǎng)絡(luò)應(yīng)用的動(dòng)態(tài)變化(如線上系統(tǒng)的頻繁變更)。
現(xiàn)有的框架僅通過可捕獲的時(shí)空數(shù)據(jù)挖掘潛在的依賴關(guān)系,但這類挖掘方法的準(zhǔn)確度有限。此外,現(xiàn)有的方法在挖掘到依賴關(guān)系后僅依賴故障傳播圖進(jìn)行異常的定位,鎖定可能導(dǎo)致異常的關(guān)鍵指標(biāo)、關(guān)鍵組件或關(guān)鍵異常事件,尚未有方法能夠給出對(duì)應(yīng)止損策略。另外,如果能夠結(jié)合運(yùn)維人員專家經(jīng)驗(yàn),就能構(gòu)建出更準(zhǔn)確、更精簡(jiǎn)的故障傳播圖。在異常根因推理過程中,可以基于強(qiáng)化學(xué)習(xí)等方法提高定位的準(zhǔn)確性,實(shí)現(xiàn)快速、準(zhǔn)確的止損。
利益沖突說明
所有作者聲明不存在利益沖突關(guān)系。