天天看點

根因分析的好方法

轉載來自于連結:https://www.zhihu.com/question/50112545/answer/2479210316

引言

近年來,随着IT系統監控能力的日益成熟,IT系統運作時問題的​​根因分析​​領域吸引了很多研究者的目光。本文通過調研大量運維領域根因分析的相關文獻,并結合運維的實際需要,将根因分析問題進行了拆解,并對各子問題的解決方案進行了總結和分析。

一、IT系統及其穩定性的概念及抽象

IT系統,即IT基礎設施。其定義千差萬别,但一般認為是包括營運整個組織所必需的一系列實體裝置和應用軟體的集合,也包括由管理層預算所決定的組織範圍内的人和技術能力的服務集合。業界經常提到的資訊技術硬體、軟體、服務方面的投資,其實就是IT基礎設施。對于企業來說,這些設施能夠為客戶服務、與供應商建立聯系和内部管理提供基礎。IT基礎設施的支出往往占到大型企業資訊技術支出的25%-30%。IT系統運維的任務要盡可能保證服務運作環境的穩定性——即在有限的IT基礎設施所提供的資源條件内,保證服務得以平穩運作。如圖1所示,通過監控系統運作狀态(狀态監控),運維人員需要分析其中的故障點(故障檢測),并通過回溯排查問題的源頭(根因分析),進而對系統進行管理(控制政策及控制信号生成),以使系統運作恢複正常或保持平穩。

<img src="https://pic1.zhimg.com/50/v2-c6340db1244430dd782208681e23d493_720w.jpg?source=1940ef5c" data-captinotallow="" data-size="normal" data-rawwidth="397" data-rawheight="408" class="content_image" width="397">

根因分析的好方法

根因分析作為 IT 運作的重要組成部分,旨在找出哪些事件真正觸發了 IT 系統中的現象或症狀。與​​臨床診斷​​類似,操作人員通過綜合分析名額資料和系統日志,判斷系統的主要問題在哪裡,進而實作故障定位。在很多企業當中,出于對控制成本,維持服務穩定等方面的考慮,根因分析技術是有巨大需求的。良好而成熟的根因分析技術可以幫助系統的運維人員快速定位到系統問題,進而加快問題的修複速度,以盡量小的代價解決IT系統在運作過程中遇到的問題,增加系統的平穩運作時間,減少企業損失。在圖1中,根因分析作為問題發現子產品和問題解決子產品之間的樞紐環節,起到非常重要的作用。一方面,當今的IT系統十分複雜,系統動辄上千節點,且節點之間的結構和功能高度耦合,單點的問題也往往有相當大的影響範圍,使得運維人員往往無法直接确定系統的故障點。另一方面,為了化解系統故障帶來的影響,運維人員修複系統需要以根因分析的結果作為依據來對症下藥,使得系統得以在盡可能短的時間内恢複正常。

傳統運維需要通過人工方式進行。運維人員在該階段排查故障根因往往需要經曆艱辛的過程,需要通過檢視系統日志、監控名額,了解系統狀态,才能推斷系統故障的原因所在。而随着自動化運維的發展,系統的自動監控和資訊收集日趨完善,運維人員對系統的監控越來越直覺,且實時化程度大大提高。在面對小型IT系統時,自動化運維極大地加強了運維人員對系統的掌控能力,得以減少運維人員在縮小問題根因範圍方面所投入的工作量。但與此同時,随着DevOps和​​雲技術​​的發展,IT系統的規模變得越來越大,一個獨立系統擁有上千節點已不算罕見。另外,服務的微服務化也使得IT系統的結構變化越來越迅速,系統結構對于大型系統的根因分析,由于監控資料量龐大,僅僅依靠運維人員來進行根因分析便顯得捉襟見肘。

由于人工排障仍然具有諸多不足,自動化的根因分析能力便成了大家關注的熱點。自動化的根因分析,是利用算法對給定的故障問題進行自動化分析,輸出推薦結果來輔助運維人員排查系統問題的過程。實作自動化的根因分析,可以減輕運維人員的工作負擔,減少系統問題的平均修複時間,提高系統的平均可用時長。另外,對于C端的企業來說,它更是減少客戶投訴,減少運維成本,進而提高經濟效益的重要手段。

二、根因分析思路與方法總結

根因分析(root cause analysis)一詞本不是運維的發明。在IT領域裡,根因分析起初是指分析導緻程式運作異常的問題點,即我們平時所說的“找bug”。後來,随着運維與開發變得越發密不可分,開發口中的根因分析一詞也逐漸拓展到了運維行業,演變成我們現在了解的IT運維中的根因分析。

顧名思義,根因分析是一個從問題現象探究到問題本質的過程。根據IT運維本身的特點,根因分析問題可以進一步分成兩部分。首先,我們需要從宏觀層面上确定問題發生的位置,給出相關的位置資訊和大緻的問題範圍;這個過程我們稱之為根因範圍壓縮。其次,我們要根據根因範圍壓縮的結果對單點進一步進行排查,具體定位到節點上的問題事件,為運維人員解決問題提供相關的邏輯證據;這個過程我們稱之為根因事件查找。

在下面的篇幅中,我們分别介紹目前已有的針對根因範圍壓縮和根因事件查找的思路和方法,并對各方法的優缺點進行簡單的分析。

1、根因範圍壓縮方法

根因範圍壓縮的主要目的是從IT系統龐大的監控資料當中篩查出問題的主要故障點。是以,該過程中所用的方法主要以資料驅動為主,運維邏輯為輔,通過資料的統計特征和運維經驗的結合來篩選出問題源頭的範圍。由于資料驅動的模型和方法不可避免地會受到資料品質的影響,是以該過程也需要對結果的可信程度進行估計。

基于分類器的模型,例如​​決策樹​​、支援向量機(二分類模型)、神經網絡(二分類或多分類)等模型,将系統狀态轉換為特征,通過對系統的特征和特征之間的隐含邏輯進行學習,進而對系統所處的狀态和對應的根因範圍進行判斷。通過統計學習或​​機器學習​​的手段,分類器模型都可以很友善地進行對系統限制關系的自動抽取,進而推斷出不同情況下的根因範圍,是以該類模型具有較好的适用範圍:隻要能對系統的特征進行提取和對資料進行标注,往往可以使用該類模型進行根因範圍壓縮。但随之而來的是,基于分類器的方法普遍具有結果可解釋性比較差的問題,且系統知識隐含在模型結構中;對于根因分析問題,我們很難驗證模型所學到的“運維知識”是否真實存在。另一方面,目前我們還未發現有較為有效的特征提取和篩選的通用方法。對于不同的運維資料,需要關注哪些特征來解決根因範圍壓縮的問題,也需要經過一定時間的積累。是以,此類方法對系統監控資料的數量和品質是有一定的要求的。

此外,還有一類較為常見的模型例如馬爾可夫模型,随機Petri網等,通過對系統結構的模拟,利用内置在模型中的運維經驗對根因範圍進行估計。此類模型的特點是,以資料為導向,通過圖模型搭建系統的大緻架構,而後通過機器學習的手段确定模型中轉移關系的機率分布,進而自動生成運維知識的機率模型。在此類模型中有現階段比較流行的根因分析思路,即在節點或名額的關聯拓撲上,利用統計學習進行系統​​模組化​​,而後将運維經驗設計為算法邏輯進行根因範圍壓縮。例如,一些方法利用故障的分布特征對根因位置進行識别,其前提假設為,如果大量異常業務經過某節點,則該節點成為根因的可能性會更大。該系列方法将系統模型與運維經驗結合起來,可以起到較好的根因範圍壓縮效果。

總的來說,資料驅動的方法在縮小根因範圍方面确實可以起到一定的作用,但其在大部分場景下依然無法對後續分析提供足夠的幫助,對問題細節的展現并不充分。在更深層次上,因為“​​因果性​​”與“相關性”兩個概念之間差異難以彌合,算法所抽取的相關性與系統故障傳播的因果關系較難進行良好的對應。運維經驗在算法中的融合可以适當地拉近根因分析中“因果性”和“相關性”的距離,但仍不足以使運維人員擷取足夠的資訊進行問題的修複。是以,隻有根因範圍壓縮的能力,我們仍然需要部分的人工問題排查,很難實作IT系統控制閉環的自動化。

2、根因事件查找方法

目前對根因事件查找問題的解決方法較為少見,學術界對此問題的讨論并不充分。貝爾實驗室早在1999年提出了一個基于事件推理的根因分析架構。該架構提出了基于事件關系圖的根因推理方法,并且考慮了不完全資訊下的根因推理問題以及時序資訊的引入對事件關系圖模組化能力的影響。該方法對現今的智能運維根因分析有很好的指導和借鑒意義,但可惜的是,後來對該方向的深入研究大部分轉到了Petri Net上,漸漸地脫離了現在的運維場景——從分析運維資源占用情況的角度講,這樣的方法仍然可以解決一部分簡單系統的運維問題,但随着運維系統規模越來越大,服務的數量越來越多,資源的占用情況越來越複雜,基于Petri Net的分析慢慢的開始變得無力。可以預見,直接以資源占用的細節開始進行運維故障的分析會給分析引擎帶來極大的負擔。另一個有趣的想法來自一篇于2012年發表在IEEE/ACM ToN上的論文。這篇論文中提到的G-RCA系統是根因分析的一種很好的思路——通過分析系統事件之間的關系來建構事件的​​因果圖​​,而後利用不同的推理方法來進行根因事件分析。其中介紹的知識抽取方法,對于解決和刻畫運維領域的根因分析問題也相當有借鑒意義。另外,其他一些基于SAT理論,誘導邏輯程式(機率模型或确定模型)等的根因推理的架構或模型,也在部分研究中提到過,但因推理的複雜度過高(尤其是一些非on-the-fly的方法)或與運維場景的需求相去甚遠,并未有在IT運維場景落地的前景。

根因分析法(RootCauseAnalysis,RCA)是一項結構化的問題處理法,用以逐漸找出問題的根本原因并加以解決,而不是僅僅關注問題的表征。

根因分析法的理論模型是“瑞士奶酪模型”,也叫“Reason 模型”或“航空事故理論模型”,是由英國曼徹斯特大學精神醫學教授詹姆斯 • 瑞森等人在 1990 年提出,主要思想是:組織活動可以分為不同層面,每個層面都有潛在的漏洞,不安全因素就像一個不間斷的光源,剛好能透過所有這些漏洞時,事故就會發生。這些層面疊在一起,猶如有孔奶酪疊放在一起,是以被稱為“瑞士奶酪模型”。

<img src="https://pic3.zhimg.com/50/v2-684e61ec6b9d3f3fea6626c1251e92b6_720w.jpg?source=1940ef5c" data-size="normal" data-rawwidth="364" data-rawheight="123" data-default-watermark-src="https://pica.zhimg.com/50/v2-18c6efec9c4eae69c29dfffb50ed300b_720w.jpg?source=1940ef5c" class="content_image" width="364">

根因分析的好方法

繼續閱讀