?

一種基于深度學習的微服務性能異常檢測方法

2024-03-23 08:07方浩天李春花
計算機研究與發展 2024年3期
關鍵詞:根因調用向量

方浩天 李春花 王 清 周 可

(武漢光電國家研究中心(華中科技大學) 武漢 430074)

隨著云計算的發展,越來越多的應用軟件使用微服務架構來構建.微服務架構[1]將一個大型應用程序拆分成許多小型的、松散耦合的微服務,可以更好地適應快速變化的業務需求.然而,基于微服務架構的軟件服務的故障也影響了用戶的正常使用,并給企業帶來造成了不小的損失.例如,2018 年亞馬遜在一次大型銷售活動中因故障停機1 h,造成了高達1億美元的損失.因此,保障線上微服務的高可靠性和高可用性十分重要[2],一旦系統出現故障,需要及時發現并診斷問題以采取相應措施進行修復.

隨著微服務系統的規模和復雜性的不斷增加,同一個微服務可能會出現在不同的調用鏈中完成不同的業務請求,導致微服務的性能指標(例如響應時間)存在多個正常的數值區間,這使得常規的異常檢測方法在微服務場景下變得不適用.同時,微服務之間復雜的交互使得理解微服務是單獨失敗還是級聯失敗變得更加困難.一旦某個微服務出現性能異常,異??赡軙刂{用鏈的調用方向進行反向傳播,使得大量微服務表現出性能異常,然而這些被影響的微服務并非都是引起故障的根本原因.因此,如何準確地發現微服務系統中的異常并定位異常的根本原因成了運維工作的難點.另一方面,系統的運維數據(監控指標、日志以及調用鏈)規模變得越來越大.據Gartner 預測 ,企業IT 基礎設施平均每年生成的IT運營數據正在以2~3 倍的速度不斷增長,使得運維人員很難通過人工分析發現和診斷系統的各種問題.

由于微服務系統較高的復雜性,現代工業微服務系統通常配備了分布式跟蹤系統,它可以跟蹤微服務系統中跨服務實例的請求執行,采集系統的跟蹤數據,用于分析和監視微服務應用程序的行為.同時,面對系統海量的數據和更加復雜的軟件架構,伴隨著人工智能、機器學習等技術的興起,智能運維[3]應運而生.將運維知識、運維數據和人工智能結合,能夠實現更加有效的異常檢測與根因定位.Liu 等人[4]針對調用軌跡,提出了基于深度貝葉斯神經網絡的異常檢測方法TraceAnomaly,通過比較調用軌跡的模式與學習到的正常調用軌跡的模式判斷是否存在異常情況.Nedelkoski 等人[5]分別利用變分自編碼器和卷積神經網絡來檢測跟蹤異常并識別異常類型,他們還提出了一種多模態長短期記憶神經網絡模型[6],基于系統正常運行時收集的跟蹤數據,通過組合2個單模態網絡來學習跟蹤數據中事件序列和響應時間序列的正常模式,基于預測發生的事件以及事件可能的響應時間來判斷系統是否出現了異常.

這些方法雖然取得了一定的檢測效果,但是都不能很好地建模微服務在跨調用路徑下具有不同的響應時間的復雜模式,從而導致異常檢測的效率不高,同時對檢測的異常缺乏可解釋性,也無法快速準確地定位問題的根因.

針對上述問題,本文針對微服務系統中的調用鏈,提出基于Transformer 的性能異常檢測與根因定位方法TTEDA(Transformer trace explore data analysis).TTEDA 首先將調用鏈構建為微服務調用序列和對應的響應時間序列.然后,借助自注意力機制捕捉微服務之間的調用關系,并通過編碼器-解碼器建立微服務的響應時間與其調用路徑之間的關聯關系,使其能夠有效學習到微服務在不同的調用鏈上的正常響應時間分布.接著,基于學習到的正常模式檢測出異常的調用鏈,并能夠檢測出異常調用鏈上的異常微服務.最后,在異常檢測的基礎上,TTEDA 利用微服務之間的調用關系以及異常的傳播方式,通過對出現性能異常的微服務進行反向拓撲排序來進行準確快速地根因定位.同時利用所提出的方法設計了微服務性能異常檢測與根因定位的框架.

本文的主要貢獻包括3 個方面:

1)提出了一種基于Transformer 模型的性能異常檢測與根因定位方法TTEDA.以調用鏈為研究對象,在考慮微服務調用路徑的前提下,利用自注意力機制學習微服務響應時間的正常模式,能夠更加準確地檢測到微服務的性能異常.

2)提出了一種調用鏈的特征構建方式,利用調用鏈的結構信息和特征信息將調用鏈構建為微服務調用序列和路徑向量,解決了現有特征構建方式向量稀疏和表義不明的問題,能夠實現有效的模型學習.

3)設計了針對微服務系統的異常檢測和根因定位框架.首先利用歷史跟蹤數據離線學習調用鏈的正常模式,然后利用模型在線實時檢測系統中的微服務性能異常推斷根因,便于操作人員及時采取準確的措施,提高系統的可靠性.

4)在開源基準微服務系統 Train-Ticket 的數據集和AIops 挑戰賽數據集上驗證了本文方法的有效性.實驗結果表明,相比于同類異常檢測方法AEVB,Multimodal LSTM,TraceAnomaly,精確率平均提高了48.6%,30.2%,3.5%,召回率平均提高了34.7%,11.1%,4.1%;相比于根因定位方法 MonitorRank 和TraceAnomaly,根因定位的準確率分別提高了35.4%和6.1%.

1 相關工作

近年來,隨著云計算技術的不斷發展,許多軟件應用程序開始部署在云計算平臺上[1],單體架構逐漸被面向服務的架構所取代.針對微服務系統的異常檢測[7]與根因定位受到越來越多的關注,一些研究以分布式跟蹤(調用鏈)為研究對象,提出了異常檢測與根因定位的方法.

Liu 等人[4]提出了TraceAnomaly 對調用軌跡進行異常檢測.該方法將調用鏈編碼為微服務跟蹤向量,將其作為輸入訓練了一個具有后驗流的深度貝葉斯神經網絡,用于學習調用鏈的正常模式.通過比較調用軌跡的模式與學習到的正常調用軌跡的模式,來判斷是否存在異常情況.在檢測出異常跟蹤的基礎上,TraceAnomaly 通過比較與異常跟蹤具有相同結構的跟蹤向量,在相同維度上采用3-sigma 原則確定異常微服務,并將處于最下游的微服務作為可能的異常根因.Nedelkoski 等人[5]使用變分自編碼器對應用程序正常狀態下的跟蹤進行建模,并利用卷積神經網絡對注入特定故障的應用程序運行時收集的跟蹤信息進行訓練,使其可以識別導致微服務性能異常的故障類型,并利用重構誤差來檢測異常跟蹤.此外,他們還提出了一種多模態長短期記憶神經網絡模型[6],通過組合2 個單模態網絡來學習跟蹤數據中事件序列和響應時間序列的正常模式.其中一個網絡用于學習事件之后可能發生的事件的概率分布,另一個網絡則用于學習微服務響應時間的概率分布.在線檢測時,模型通過預測一個事件之后可能發生的事件以及事件可能的響應時間來判斷系統是否出現了異常.如果預測結果中未出現某個事件,或者微服務響應時間不在預測的范圍內,則意味著應用程序出現了功能異?;蛐阅墚惓?張攀等人[8]提出了一種在線實時微服務調用鏈異常檢測方法MicroTrace,利用基于注意力機制的雙向長短期記憶網絡模型學習正常調用鏈的模式.吳佳潔等人[9]提出了一種基于TCN 和注意力機制的異常檢測算法,用于檢測從系統采集的時序數據中的點異常和窗口異常.Bogatinovski 等人[10]使用了一種自監督編碼器-解碼器神經網絡對跟蹤建模,它能夠根據鄰近事件的上下文預測跟蹤中給定“掩碼”位置記錄的事件情況.訓練好的網絡提供了在輸入跟蹤的任何掩碼位置可能出現的事件的概率分布.在線檢測時能獲得跟蹤的每個位置應該記錄的事件的排序列表.如果實際記錄的事件不在相應位置預測出現的事件之中,視為異常事件.然后計算跟蹤的異常得分(即異常事件數除以跟蹤長度)來判斷系統的功能異常.Jin 等人[11]首先對跟蹤數據進行矩陣表示,然后通過主成分分析確定異常跟蹤,接著使用無監督算法(如孤立森林[12]、單類支持向量機[13]、局部離群因子和3-sigma 原則[14])處理微服務收集到的性能指標來分析微服務是否異常.文獻[4-14] 所述的方法雖然取得了一定的檢測效果,但是沒有很好地考慮到微服務的響應時間和調用路徑之間的依賴關系,檢測效果有待提高.

針對上述討論的異常檢測方法存在的問題,本文利用分布式跟蹤數據,提出基于Transformer 的跨調用路徑的微服務異常檢測方法,能夠在考慮微服務的響應時間與調用路徑的關聯關系的前提下學習到微服務響應時間的正常分布模式,更加準確地檢測到微服務的性能異常.同時以可解釋的方式識別出調用鏈中的異常微服務,在異常檢測的基礎上能夠直觀快速地定位異常的根因.

2 TTEDA 方案描述

2.1 設計思想

由于微服務系統較高的復雜性,現代工業微服務系統通常配備了分布式跟蹤系統,例如谷歌公司的Dapper、Cloudera 的HTrace、Twitter 的Zipkin 等.分布式跟蹤系統可以跟蹤微服務系統中跨服務實例的請求執行,能夠用于分析和監視微服務應用程序的行為.該系統將微服務操作的每次調用記錄為一個跨度(Span)并將每個外部請求的執行過程,即實現同一用戶請求的所有調用,記錄為跟蹤(Trace),也稱調用鏈.本文對AIops 挑戰賽提供的某開源微服務系統中采集到的跟蹤數據進行了分析,通過觀察到的現象設計了本文的方案.表1 展示了跟蹤數據的相關數據屬性、格式以及示例,主要包括時間戳、對象名、span_id、trace_id、處理時間、操作名、parent_span等信息.

Table 1 Trace Data Attributes and Content Instances表1 跟蹤數據屬性與內容實例

由于微服務系統高度的動態性和復雜性,一個微服務同時會在不同的業務邏輯中發揮作用,即同一個微服務會出現在多條調用鏈中.圖1(a)中展示了4 個微服務在正常情況下部分響應時間的分布情況.可以觀察到,每個微服務的響應時間會呈現多個不同的區間,例如微服務A的響應時間有一部分小于50 s,一部分集中在50 s 附近,還有一部分大于50 s,即出現了多個正常的指標區間.進一步地,圖1(b)展示了不同調用鏈中同一微服務的部分響應時間的分布情況,在調用鏈1 中微服務的響應時間主要集中在區間2~4 s.而在調用鏈2 中微服務的響應時間主要集中在區間50~100 s.這說明了微服務的響應時間與其所處的調用鏈之間存在著一定的關聯性.微服務的響應時間受多個因素影響,其中包括微服務本身執行的操作以及從調用入口微服務到該使用服務的調用路徑.由于不同調用鏈涉及的調用鏈操作和調用的路徑不同,導致微服務在不同的調用鏈中會表現出不同的響應時間特征.這種微服務間調用鏈關聯性的認識對于分析和優化微服務系統的性能至關重要.

圖1 微服務的調用鏈及其響應時間分布的關系Fig.1 Relationship between the microservices’ call trains and its response time distribution

以往的研究中,一些工作[5,11]會針對每個微服務的響應時間進行建模,學習微服務的正常模式.然而由于微服務的響應時間在正常情況下也會出現顯著不同,所以可能導致建模失效,并因此帶來不準確的檢測結果.一些工作[4,6,8-9]考慮了微服務的響應時間和微服務的調用路徑之間的關聯關系,但是缺乏一定的可解釋性,在檢測到異常時往往無法確定調用鏈中的異常微服務,因此也難以定位異常的根因.為此,本文基于Transformer[15]提出一種適用于微服務系統的性能異常檢測與根因定位方法,在建模微服務響應時間的正常分布時,考慮了微服務所處的調用路徑.本文針對調用鏈數據設計了具有明確意義的特征構建方式,并利用Transformer 模型的自注意機制捕捉微服務之間的調用關系,通過編碼器-解碼器架構建立微服務的響應時間與其調用路徑之間的關聯關系,從而學習微服務在跨調用路徑下響應時間的正常分布情況.基于此檢測異常調用鏈并確定其中的異常微服務,根據異常的傳播模式有效地定位導致該異常的根因微服務.

2.2 異常檢測

2.2.1 異常檢測框架

本文針對微服務系統設計了基于Transformer 的異常檢測框架TraceCatcher,如圖2 所示,該框架分為離線訓練和在線檢測2 個部分.

圖2 基于Transformer 的異常檢測框架TraceCatcherFig.2 Transformer-based anomaly detection framework TraceCatcher

在離線訓練階段,TraceCatcher 利用從系統采集的跨度日志,將其組裝成跟蹤,并進一步處理得到訓練樣本.在組裝跟蹤的過程中,通過跨度中傳遞的Trace_ID 聚合屬于同一跟蹤的所有跨度,并使用深度優先搜索算法搜索跟蹤中從根節點到葉子節點的所有路徑,得到不同的微服務調用序列和對應的響應時間序列.為了提高模型的魯棒性和降低模型的運算復雜度,本文使用CART[16]回歸樹對同一微服務的多個響應時間進行分箱,將分箱后的微服務響應時間作為特征值構建路徑向量,最終得到多條成對的微服務調用序列和路徑向量組成的訓練樣本,分別作為Transformer 模型編碼器和解碼器的輸入.通過模型學習跟蹤中不同微服務的響應時間的正常分布情況.

在線檢測階段,將新產生的跨度日志經過相同的數據處理得到微服務調用序列和路徑向量.將微服務調用序列作為訓練好的Transformer 模型編碼器的輸入,經過模型的編碼器-解碼器層生成一個輸出向量,并經過模型的線性層和Softmax 層輸出每個微服務的特征值的概率分布,利用概率分布獲取到路徑向量中微服務實際特征值的概率,作為微服務的

異常得分來判斷微服務是否出現了性能異常.

2.2.2 特征構建

在檢測微服務性能異常的過程中,需要先將跟蹤數據構建為特征向量的形式用于建模.現有的方法通常是將微服務系統中的調用鏈以某種編排方式,例如先序、后序或者廣度優先遍歷等,表示為1 個1維向量.下面介紹2 種常見的方式.

1)1 維特征向量構建.這種方式通過對調用樹進行先序遍歷來對微服務進行排序,然后利用微服務的特征值(如微服務A的響應時間445 s)來構建表示調用鏈的特征向量,能夠反映微服務之間的部分先后調用關系,但并不能完全地體現微服務之間的調用關系.在一些情況下,無法做到有效區分正常和異常的調用鏈.如圖3 所示,經過特征構建之后,正常調用鏈1 和異常調用鏈2 的1 維特征向量非常相似,并因此會導致模型錯誤地將異常調用鏈2 識別為正常調用鏈1.

圖3 正常調用鏈與異常調用鏈相似的1 維特征向量構建Fig.3 Construction of similar one-dimensional feature vectors with normal call chain and abnormal call chain

2)服務跟蹤向量構建.除了1 維特征構建方式,在TraceAnomaly 中提出了一種不同的針對調用鏈的1 維特征向量構建方式,并將其稱之為服務跟蹤向量(service trace vector,STV).如圖4 所示,該方法將所有調用鏈中出現的不同的調用對(調用者,被調用者)對應到向量的不同維度上,在向量中每個維度的值代表相應調用對中被調用者的響應時間.對于未出現在調用鏈中的調用對,該方法用“-1”來設置向量中對應維度的值,以此表示該調用對在向量中缺失.當調用關系過多,而一條調用鏈中包含的調用關系較少時,向量中會出現大量的無效維度,會導致向量中有效維度過于稀疏,在一定程度上會影響模型訓練的收斂速度和檢測的效果.

圖4 TraceAnomaly 服務跟蹤向量構建Fig.4 TraceAnomaly service trace vector construction

為了解決上述2 種特征構建存在的問題,同時更好地支持模型訓練和檢測異常并定位異常根因,本文基于調用鏈的領域知識提出了一種新的方法,該方法將跟蹤數據表示為成對的微服務調用序列和路徑向量用于建模.如圖5 所示,在同一條調用鏈中,一個微服務可能會被調用多次,每次調用可能執行不同的業務邏輯,在執行不同的業務邏輯時微服務會執行不同的操作,可能會有多個特征值.本文通過構建基于事件表示的調用鏈樹形結構,將每個節點表示為一個調用事件,如節點A→B表示微服務A調用了微服務B的事件.然后使用深度優先搜索算法從調用鏈的樹形結構中提取出不同的調用序列,并從節點信息中獲取特征(響應時間),構建相應的路徑向量.

圖5 構建調用序列向量和路徑向量Fig.5 Constructing call sequence vectors and path vectors

采用上述方式,可以有效地保留調用鏈的結構和特征信息,同時避免了特征向量過于稀疏的問題,使模型能夠更加有效地建模服務的正常模式.此外,對于不同的調用鏈類型,服務調用序列和路徑向量的維度會有所不同,由于Transformer 能夠處理不同長度的序列,因此不會對模型建模造成影響.

2.2.3 模型輸入

通過特征構建,調用鏈被表示為不同的微服務調用序列向量(op0,op1, ···,opn-1)和路徑向量(D0,D1,...,Dn-1).為了使模型能更好地理解系統中的行為,opi由表1 中對象名和微服務操作名組成.

對于一個微服務調用序列,Transformer 首先使用一個V×dmodel維的嵌入矩陣將輸入序列中的每個微服務映射成詞向量用于表示微服務的語義信息,其中V是微服務的數量,dmodel是詞向量的維度.在訓練過程中,模型會通過更新嵌入矩陣的參數來學習更好的語義表示,而在推理時則會使用固定的嵌入矩陣將微服務映射為詞向量.然后需要對序列中的每個元素進行位置編碼,引入位置編碼有助于模型理解微服務之間的依賴關系,建模事件模板的上下文信息.Transformer 采用正弦和余弦位置編碼為序列中的不同位置賦予不同的編碼向量,編碼向量的維度與詞向量的維度相同.對于給定的位置pos和給定的維度i,位置編碼的計算方式如式(1)(2)所示:

其中PE(pos,i)表示位置pos的第i維的位置編碼,dmodel表示向量的維度.位置編碼的參數10 0002i/dmodel是一個基于位置和詞向量維度計算的值,當i是偶數時這個值是10 0002i/dmodel,當i是奇數時這個值是10 0002(i-1)/dmodel.從位置編碼函數的定義中可以看出,對于給定位置pos的每個維度i,其對應的位置編碼值都是由不同周期的正弦曲線和余弦曲線組成.這種位置編碼方式可以確保不同位置在所有dmodel維度上被編碼成不完全相同的值,使得序列中不同位置上的事件模板都能獲得獨一無二的位置編碼.其次,由于三角函數的特性, 如正弦函數sin(a+b)=sin(a)cos(b)+cos(a)sin(b),其對于pos+k處的信息,可以由pos位置編碼值計算得到,因此,這種位置編碼方式能夠表示序列不同距離的元素的相對關系.位置編碼會在模型訓練過程中被動態更新和調整,以更好地捕捉序列中的依賴關系.

通過將詞向量和位置編碼相加,得到模型的輸入向量.詞向量用來表征事件模板的語義信息,位置編碼用來表征微服務在序列中的位置關系.

2.2.4 模型訓練

Tranformer 模型主要由編碼器和解碼器2 部分組成,每個部分主要包含了2 個子層:1)多頭注意力機制層,可以捕捉輸入序列中的多層次信息和長距依賴關系;2)前饋神經網絡,用于對注意力機制計算的輸出作進一步處理.

本文的核心思路是通過關聯微服務的響應時間和調用路徑來學習微服務在不同調用鏈中的響應時間的正常分布模式.為此,首先利用自注意力機制對微服務的上下文信息進行建模,以捕捉微服務之間的調用關系;然后利用編碼器-解碼器的架構關聯微服務的響應時間和調用路徑.

1)捕捉微服務之間的依賴關系.編碼器的第1 層為多頭注意力層.利用自注意機制,模型可以計算微服務之間的相關性分數,捕捉微服務之間的依賴關系.給定一組輸入矩陣(X1,X2,···,Xn),其中Xi表示通過詞嵌入和位置編碼構造的序列中第i個微服務的向量表示.在自注意力機制中,模型首先通過權重矩陣Wq,Wk,Wv對Xi進行線性變換,分別得到query,key,value向量q,k,v,在訓練過程中,權重矩陣Wq,Wk會不斷更新.然后,利用向量q和k計算微服務之間的相關性分數(注意力分數),計算過程如式(3)所示.由 ∝i,j組成的注意力得分(attention score)矩陣代表了微服務調用序列中不同微服務之間的依賴程度.

接著,利用Softmax 函數對 αi,j歸一化處理得到:

隨后,通過將向量v與歸一化后的相關性分數進行加權和計算得到表征微服務上下文的向量Yi.如式(5)所示:

總的來說,通過自注意力機制,對于一組輸入矩陣X=(X1,X2,···,Xn),可以將其轉換為包含上下文信息的另一組矩陣Y=(Y1,Y2,···,Yn),整個過程如圖6所示.因此,模型能夠有效建模微服務的上下文信息,并捕捉到微服務之間的依賴關系.

圖6 通過自注意力機制計算微服務帶有上下文的向量Fig.6 Computing the vectors with the context of the microservice through the self-attention mechanism

為了增強自注意力層的學習能力,模型使用了多頭注意力機制,即將多個自注意力機制集成在一起,每個注意力模塊稱為一個注意力頭.使用多頭注意力,模型可以更全面地捕捉輸入序列的特征.具體地,在訓練過程中,模型會將數據X分別輸入到多個注意力頭中,每個注意力頭會分別進行q,k,v向量的計算,并得到不同的特征矩陣Yi,將多個Yi拼接得到最終的特征矩陣Y.編碼器的第2 層是前饋神經網絡(feedforward neural network,FFN),用于對多頭自注意力層的輸出進行非線性變換和特征提取,為模型提供更多的非線性變換和學習能力.

2)建立微服務調用序列和響應時間序列的關聯關系.在模型訓練過程中,編碼器中的多頭注意力機制和前饋神經網絡能夠生成帶有微服務上下文信息的特征矩陣,從而能夠捕捉微服務之間的依賴關系.利用編碼器-解碼器注意力機制則能夠建模微服務調用序列和響應時間序列之間的關聯關系,并最終結合微服務的調用關系學習微服務響應時間的正常分布模式.

編碼器-解碼器注意力模塊的部分輸入來自于帶掩碼的多頭注意力(masked multi-head attention)模塊,該模塊使用掩碼技術處理路徑向量.模型在推理時,因為在生成目標輸出時無法使用到未來時間步信息,因此在訓練時采用了掩碼的方式,將目標輸入序列中當前時間步之后的內容進行掩蔽.也就是,將需要掩蔽的向量設置為負無窮,在經過點積和Softmax 計算注意力得分時,這些位置的權重會趨于零,不會對后續的計算結果產生影響.

在編碼器的注意力模塊中,輸入向量被用于構建向量q,k,v,而在編碼器-解碼器注意力模塊中,向量q來自于帶掩碼的多頭注意力層對路徑向量處理后的輸出,向量k和向量v則來自編碼器對微服務調用序列處理后得到的特征矩陣Y.通過Attention 的方式,即注意力計算過程,從而使得微服務調用序列和響應時間序列在訓練過程中被關聯起來.

3)學習微服務響應時間的正常分布模式.解碼器輸出的特征向量在經過一層線性層和Softmax 層之后,會為目標序列的每個位置輸出一個概率分布.通過模型預測的概率分布與真實目標序列之間的差異,計算模型的損失函數.

具體地,模型的損失函數基于目標序列與模型預測的響應時間序列之間的交叉熵損失函數計算得到.解碼器的輸出通過線性層和Softmax 函數,可以得到每個微服務的特征值的概率分布情況.將模型生成的目標序列中下一個響應時間特征值對應的概率作為該時間步的預測值.該預測值與真實值之間的交叉熵損失函數可通過式(6)來計算.訓練時,模型旨在為每個時間步預測下一個響應時間,通過計算預測值與真實值之間的差異,最小化損失函數的值來不斷更新模型參數,以此達到建模微服務正常響應時間分布的目的.

其中Ty表示目標序列的長度,yt,i表示目標序列在時間步t時第i個特征值的one-hot 表示,表示模型在時間步t時預測的第i個特征值的概率值.

本文使用大量的從跟蹤數據中提取的微服務調用序列和路徑向量進行無監督訓練.考慮到在訓練樣本中可能會存在一些異常的噪聲數據,但由于模型采用隨機梯度下降進行訓練,每次按照輸入數據中的最小批次的數據去更新模型參數,這使得模型只學習到輸入序列中最顯著的模式.因此,模型的最終性能不會受到訓練集中的少量異常數據的影響.

2.3 根因定位

根因定位是現代基于微服務的軟件系統運維中的一個重要環節,通過快速準確地定位系統異常的根本原因,可以有效地提高系統的可靠性和穩定性.本文提出的方法在異常檢測基礎上,利用微服務的調用關系,同時能夠快速準確定位異常的根因.

針對一條異常調用鏈,本文的異常檢測方法能夠細粒度檢測出調用鏈中的異常微服務,在此基礎上,對異常微服務進行反向拓撲排序,以形成排序列表.具體而言,通過遍歷調用鏈中的異常微服務,迭代輸出異常出度(指向異常微服務的邊的個數)為0的微服務,每輸出一個異常微服務,就將調用它的微服務的異常出度減1,直到輸出所有的異常微服務.然后按照列表中的順序輸出不存在調用關系的微服務,將其確定為異常的根本原因.如圖7 所示,在線檢測時,調用路徑中的根因微服務G和微服務E以及被影響上游微服務會獲得較低的異常得分從而被判定為異常微服務,然后在這些異常微服務中不斷尋找異常出度(即是否有指向異常服務的邊)為0 的節點,將其選出并更新指向節點的異常出度,最終得到排序列表[G,E,D,C,B,A],將其作為根因列表輸出,其中微服務G和E排序靠前且不存在依賴關系,會被判定為最終根因.在一些情況下,調用鏈中可能會出現多個根因,如圖7 所示,本文的異常檢測與根因定位方法同樣適用于多根因的情況.最后將根因列表反饋給運維人員,運維人員可以更全面地了解系統的運行狀態,以便分析系統故障原因并采取相應措施.

圖7 通過檢測的異常微服務定位根因Fig.7 Locating the root cause by detecting anomalous microservices

3 實驗評估

3.1 數據描述

本文的數據集來自于AIops 挑戰賽的數據集以及一個開源的基于微服務架構的火車訂票系統Train-Ticket.

1)AIops 挑戰賽數據集.該數據來源于基于微服務架構的模擬電商系統.系統基于谷歌公司開源的hipstershop 進行改造,采用動態部署架構,主要包含10個核心服務和6 個虛擬機.每個服務部署了4 個Pod,共有40 個Pod,40 個Pod 動態部署在6 個虛擬機上,分別在服務(Service)級別、Pod 級別和虛擬機節點(Node)級別注入故障.Service 級別故障是指對該服務下的所有Pod 都注入故障,而Pod 級別的故障只針對某一個Pod 進行故障注入.其中Service 級別和Pod 級別的故障主要是針對k8s 容器進行故障注入,包括網絡延遲、CPU 壓力突增、內存壓力突增、磁盤讀寫壓力等.針對Node 級別的故障注入包括內存壓力突增、磁盤空間滿、磁盤讀、磁盤寫、CPU 壓力等.這些故障部分會導致服務的響應時間異常.表2 展示了部分故障注入信息.

2)Train-Ticket 數據集.火車票訂票系統是目前最大的開源微服務系統之一,并且已經廣泛應用于現有的一些研究中[17-19].該系統一共包含41 個微服務,實現了完整的訂票流程.Train-Ticket 通過Kubernetes 部署在7 臺物理機器上運行,其中每個服務都部署了多個實例.通過系統在正常運行狀態下收集正常數據集用于訓練,由于偶發的系統問題,可能會存在一小部分的異常數據.異常數據采用故障注入的方法構造,通過網絡模擬工具模擬網絡延遲來實現服務的響應時間異常.此外,考慮了在3 個不同級別組件上注入故障,包括微服務、容器和API 級別.最后,訓練集中包含了系統在無故障注入條件下收集到的214 782 條調用鏈數據,測試集中一共包含35 977 條調用鏈數據,其由31 964 條正常調用鏈數據和4 013 條異常調用鏈數據組成.

3.2 實驗設置

實驗環境如表3 所示.為了驗證模型的性能,本文選用準確率、精確率、召回率、F1-Score 作為評價指標.

Table 3 Experimental Environment Configuration表3 實驗環境配置

3.3 模型性能分析

3.3.1 異常檢測效果評估

本文分別在AIops 數據集和Train-Ticket 數據集上對本文方法進行了評估.AIops 數據集中包含從系統中采集到的連續4 天的各種類型的數據(指標、日志和調用鏈).本文使用其中的調用鏈數據對本文方法TTEDA 進行評估,調用鏈的基本信息如表1 所示.每天的調用鏈數據規模如表4 所示.

Table 4 AIops Dataset Information表4 AIops 數據集信息

表4 中Path 數量表示所有的Trace 中包含的微服務調用序列的數量.第1 天的數據(Day-1)是系統在正常狀態下運行時采集的數據,其他3 天分別注入了不同類型的故障.每次采用1 天的調用鏈數據進行模型訓練.測試集來自于注入故障的后3 天數據,其中在不同層級注入的不同類型的故障并不是都會導致微服務的響應時間異常,少部分經過被注入故障的微服務的請求可以被正常處理.

為了篩選出合適的測試集,首先根據故障注入時間以及注入單元篩選出故障注入后10 min 內經過被注入故障的微服務的所有調用鏈數據,然后根據相同結構的調用鏈的響應時間模式,將顯著偏離調用鏈響應時間模式的調用鏈和微服務標記為異常.具體而言,本文基于分布密度和 3σ原則劃分數據,密度閾值設為0.1.將數據集中各個調用鏈中的各個位置的微服務響應時間按降序排列,在故障注入的一段時間內的調用鏈數據中,如果調用鏈中的某個位置上的微服務響應時間超過對應位置微服務響應時間的密度閾值和μ+3σ閾值,則將該調用鏈和微服務標記為異常.測試集的數據規模如表5 所示.

Table 5 Test Dataset Information表5 測試集信息

本文分別利用第1 天和第2 天的數據訓練模型Model-1 和Model-2,然后利用訓練好的模型檢測測試集中的異常調用鏈,最終的各項評價指標數據如圖8 所示.圖8(a)是通過正常數據訓練模型測試得到的各項指標結果,圖8(b)的訓練數據則包含了部分異常數據.其中Model-1 在Test-A上的準確率、精確率、召回率以及F1-Score 分別達到了98.57%,95.80%,99.20%,97.47%;在Test-B上的各項指標分別達到了99.11%,96.91%,98.83%,97.86%;在Test-C上的各項指標分別達到了98.93%,95.30%,97.85%,96.56%.Medel-2 在Test-B上的準確率、精確率、召回率以及F1-Score 分別達到了98.14%,94.88%,96.09%,95.49%;在Test-C上的準確率、精確率、召回率以及F1-Score 分別達到了98.78%,95.45%,96.67%,96.05%.可以看出模型具有較高的檢測性能,并且性能不會受到訓練集中少量異常數據的影響.

圖8 Model-1 和Model-2 的檢測效果Fig.8 Detection effect of Model-1 and Model-2

除了在AIops 數據集上驗證模型的性能和效果,同樣在Train-Ticket 數據集上,針對不同級別的故障注入,也分別對模型的異常檢測的效果進行了測試,測試結果如圖9 所示.在微服務、容器以及API 這3個不同層級上,模型的精確率分別達到了89.26%,85.29%,83.53%;召回率分別達到了91.41%,84.46%,88.07%;F1-Score 分別達到了90.32%,84.87%,85.74%;準確率分別達到了98.65%,96.37%,88.99%.可以看出,模型對異常具有較高的檢測效率.

圖9 在Train-Ticket 不同層級測試集上的檢測效果Fig.9 Detection effect on the test set of different levels of Train-Ticket

此外,本文在AIops 數據集和Train-Ticket 數據集上對針對3 種基線方法TraceAnomaly[4],AEVB[5],Multi-LSTM[6]的效果進行了評估,并與本文方法TTEDA 進行了對比.如表6 所示相比于3 種異常檢測的基準方法,TTEDA 在所有指標上都取得了最高的分數.在2種數據集下,TTEDA 在精確率上平均提高了48.6 個百分點、30.2 個百分點、3.5 個百分點 ,在召回率上平均提高了34.7 個百分點、11.1 個百分點、4.1 個百分點.上述實驗結果可以看出,本文方法TTEDA 的性能要優于其他的基線模型.這說明本文將調用鏈表示為成對的微服務調用序列和路徑向量是有效的,利用自注意力機制挖掘微服務的響應時間與其調用路徑之間的關聯關系可以有效地學習到微服務響應時間的正常分布模式,從而提高異常檢測性能.實驗結果驗證了本文所提出模型的有效性.同時表7 給出了不同方法的訓練和測試開銷,可見,本文方法TTEDA在帶來良好性能的同時其開銷是可以接受的.

Table 6 Anomaly Detection Effect of Different Methods表6 不同方法的異常檢測效果%

Table 7 Training and Testing Overheads of Different Methods on AIops Dataset表7 不同方法在AIops 數據集上的訓練和測試開銷

3.3.2 根因定位效果評估

本文選擇了3 種根因定位的基準算法與本文的方法TTEDA 在AIops 測試集上對比了根因定位方面的性能,實驗結果如表8 所示.采用常見的評估排序結果的指標Top-k準確率(A@k)來評估算法根因定位的效果.A@k計算過程如式(7)所示,其中k=1,2,3.

Table 8 Comparison of Root Cause Location Effects of Different Methods表8 不同方法根因定位效果對比%

其中n表示樣本中異常調用鏈的數量,表示通過算法確定的前k個根因微服務是否包含實際的根因微服務.A@k表示根本原因包含在Top-k結果中的概率,即前k個結果中包含根因微服務的調用鏈數量占總的異常調用鏈數量的比例.

1)SBFL(spectrum-based fault localization).基于頻譜的故障定位在程序調試中應用較多.SBFL 在運行測試用例時收集程序元素的覆蓋率信息,然后使用預定義的評分函數來計算程序元素的可疑分數.其基本思想是,由較少通過的測試和更多失敗的測試覆蓋的程序元素更有可能是根本原因.這項技術在Micro-Rank[20]被用微服務的根因定位.通過統計微服務出現在異常路徑上的次數Oef、出現在正常路徑上的次數Oep、不包含微服務的異常路徑數量Onf以及不包含微服務的正常路徑數量Onp來計算微服務的異常評分,其中評分越高的微服務是根因的可能性越大,異常評分的計算為

2)MonitorRank[20].該方法定期處理應用程序服務產生的調用數據,為每個時間段生成調用圖.基于調用圖,利用微服務的鄰接矩陣和指標之間的相關性,使用隨機游走方法PageRank 來定位根因.

3)TraceAnomaly[4].該方法在檢測出異常跟蹤的基礎上,通過比較所有與異常跟蹤具有相同結構的跟蹤向量HSTV 來定位根因,即在向量的每一維上使用3-sigma 原則找出1 個或多個異常服務,即顯著偏離平均響應時間的服務.然后將這些異常服務最下游的微服務作為可能的根本原因.

由表8 可知,本文方法TTEDA 根因定位最準確.原因分析如下:

SBFL 基于服務的頻譜數據來定位根因,并沒有考慮不同調用鏈的重要性,不同調用鏈在系統中出現的次數不同,出現次數較多的調用鏈中包含的服務計算的異常得分偏小,且如果調用鏈出現異常,其包含的所有服務的異常次數都會增加,這其中也包含了正常的服務,因此效果不佳.MonitorRank 使用隨機游走算法定位根因,如果某個正常的服務在不同的異常調用鏈中多次出現,它可能會被方法多次遍歷,因此具有較高的異常分數,這會導致方法出現誤判,使得算法性能變差.TraceAnomaly 在檢測異常上,通過比較與異常調用鏈具有相同結構的調用鏈來定位根因,雖然算法取得了一定的效果,但是這增加了一定的比較開銷.

而本文方法將調用鏈表示為具有明確成對關系的微服務調用序列和路徑向量,通過模型將其關聯,從而能夠細粒度地檢測出異常調用鏈中的異常服務,在正確檢測到異常調用鏈的情況下準確定位到根因微服務.相比于現有的根因定位方法 MonitorRank 和TraceAnomaly,根因定位的準確率分別提高了35.4 個百分點和 6.1 個百分點.由于本文是按照異常服務的拓撲順序對微服務進行排序,即在調用路徑中越下游的異常服務排序越靠前,在單根因的情況下,如果根因列表中的第1 位不是實際根因,那么后續的服務可能均不是根因,因此不適合計算A@2 和A@3.

4 結 論

本文以微服務系統的調用鏈為研究對象,通過分析發現微服務的響應時間與調用鏈存在一定的依賴關系,進而提出一種基于Transfomer 的微服務性能異常檢測與根因定位方法TTEDA.通過構建微服務調用序列和路徑向量的方式有效表示了調用鏈的結構信息和服務的特征信息,借助自注意力機制捕捉微服務之間的調用關系,并通過編碼器-解碼器注意力機制建立服務響應時間和調用路徑之間的關聯關系,從而能夠有效學習到微服務在不同調用鏈上的正常響應時間分布,提高了異常檢測的準確性,且將異常檢測粒度精確到了微服務級別.此外,本文方法主要是檢測調用鏈中微服務的性能異常,即服務的響應時間異常.在實際的場景中,往往還存在功能異常的情況,即服務調用路徑異常(例如調用中斷),這種功能異常不太常見,但可能與攻擊等嚴重問題有關,因此依然值得關注.同時還需要更加細粒度地定位根因,如與服務有關的根因KPI,以便運維人員采取止損措施.這些工作將作為本文的未來工作進行展開.

作者貢獻聲明:方浩天提出了方法思路和實驗方案,并完成了實驗和論文初稿的撰寫;李春花指導研究方案設計并修改論文;王清參與論文修改和實驗驗證;周可提出指導性意見并參與論文的修訂.

猜你喜歡
根因調用向量
根因分析法提高藥品不良反應報告合格率
向量的分解
聚焦“向量與三角”創新題
核電項目物項調用管理的應用研究
LabWindows/CVI下基于ActiveX技術的Excel調用
基于矩陣編碼的自動路測根因定位方法
根因分析法在提高科室備用藥品質量管理中的應用
基于系統調用的惡意軟件檢測技術研究
向量垂直在解析幾何中的應用
高齡PICC導管堵塞的根因分析及護理對策
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合