從一個(gè)Rac故障的分析談起
昨天在機(jī)場(chǎng)候機(jī)的時(shí)候,突然有了一些感想,寫了一些讓人莫名其妙的文字。實(shí)際上也不是莫名其妙,對(duì)于從事運(yùn)維知識(shí)圖譜工作的朋友來(lái)說(shuō),可能還是明白我在說(shuō)什么的。
專家分析故障的時(shí)候,是根據(jù)經(jīng)驗(yàn)與掌握的知識(shí)去做問(wèn)題發(fā)現(xiàn)的,發(fā)現(xiàn)的依據(jù)是系統(tǒng)運(yùn)行狀態(tài),指標(biāo),日志等數(shù)據(jù)。因?yàn)槿思染哂杏洃浰季S,又具有邏輯推理能力,因此大部分問(wèn)題的解決來(lái)自于對(duì)以往案例的積累與基于知識(shí)的邏輯推理。這些年,Oracle RAC的性能問(wèn)題和故障已經(jīng)被大家研究的比較透了,下面是一個(gè)RAC常見(jiàn)問(wèn)題分析的思維導(dǎo)圖。
上面的思維導(dǎo)圖是專家梳理出來(lái)的RAC性能分析的一些常見(jiàn)分析路徑,根據(jù)專家腦子中的類似的思維導(dǎo)圖,人的思維可以根據(jù)現(xiàn)實(shí)的實(shí)際情況進(jìn)行發(fā)散和收斂,靈活度很大,而且不同的專家的思路不一樣,其發(fā)散與收斂的方法也不一致。不管怎么樣,只要專家對(duì)RAC問(wèn)題分析的功力足夠,要想定位我說(shuō)的那個(gè)用戶RAC故障還是比較容易的。
從事后分析來(lái)看,當(dāng)時(shí)的故障模型告警中我們可以看到明確的RAC性能方面的告警,因?yàn)閱?wèn)題出現(xiàn)后如果沒(méi)有解決,系統(tǒng)會(huì)對(duì)嚴(yán)重告警事件重復(fù)告警,因此上圖的告警時(shí)間只是記錄了最后一次告警的時(shí)間,不能根據(jù)時(shí)間來(lái)作為判斷告警出現(xiàn)先后的依據(jù)。針對(duì)gc block lost告警,通過(guò)診斷工具也可以就這個(gè)問(wèn)題進(jìn)行下鉆分析。
通過(guò)點(diǎn)擊“診斷分析”按鈕,就可以逐條去做相應(yīng)的分析了。用戶當(dāng)時(shí)急迫想要獲得的就是一個(gè)結(jié)論。
D-SMART也提供了一系列診斷工具用于分析,現(xiàn)場(chǎng)的DBA點(diǎn)擊了其中幾個(gè)工具,從中也發(fā)現(xiàn)了系統(tǒng)中存在的一些問(wèn)題,包括TOP SQL,全局熱塊沖突,私網(wǎng)流量過(guò)大,PING延時(shí)過(guò)高等問(wèn)題。不過(guò)以他的經(jīng)驗(yàn),無(wú)法判斷是SQL引起了問(wèn)題還是系統(tǒng)出了其他問(wèn)題。實(shí)際上領(lǐng)導(dǎo)等待的并不是這些問(wèn)題分析,而是做一個(gè)決策,是不是重啟一下應(yīng)用,就能夠解決問(wèn)題。要想很明確的回答這個(gè)YES OR NO,確實(shí)是需要一定的經(jīng)驗(yàn)的,因此現(xiàn)場(chǎng)DBA根據(jù)這些分析結(jié)論并不能直接回答這個(gè)問(wèn)題。
實(shí)際上,專家在從某一個(gè)診斷路徑往下下鉆分析的時(shí)候,并不一定是按照這張腦圖去遍歷問(wèn)題的可能路徑的,會(huì)在中間產(chǎn)生跳轉(zhuǎn),甚至重新啟動(dòng)一個(gè)新的腦圖。而自動(dòng)化運(yùn)維工具要么通過(guò)籠統(tǒng)的異常檢測(cè)去做分析,要么就只能沿著知識(shí)圖譜,不斷通過(guò)臨近發(fā)現(xiàn)去掃描各種可能性。
如果分析工具寫的很死,那么覆蓋整個(gè)分析的邏輯就會(huì)十分復(fù)雜,而且缺乏靈活性,一旦系統(tǒng)狀態(tài)有些略微不同,就可能無(wú)法完成完美的分析。而如果考慮到充分的靈活性,將分析過(guò)程拆分為多個(gè)知識(shí)點(diǎn),通過(guò)知識(shí)點(diǎn)之間的關(guān)聯(lián)發(fā)現(xiàn)來(lái)自動(dòng)發(fā)現(xiàn)下鉆路徑,實(shí)現(xiàn)遍歷,就會(huì)把整個(gè)分析過(guò)程完全打亂,很難做到最終實(shí)現(xiàn)準(zhǔn)確的根因歸納。
這是因?yàn)槲覀冏罱K要定位根因,從而輔助決策,而不是找到問(wèn)題點(diǎn)。如果現(xiàn)場(chǎng)有專家支撐,或者有專家可以隨時(shí)快速響應(yīng),那么找到問(wèn)題點(diǎn)就足以定位根因了,而如果僅僅依靠現(xiàn)場(chǎng)運(yùn)維人員,那么工具就需要有更準(zhǔn)確的結(jié)論。
解決這個(gè)問(wèn)題的方法有二,最簡(jiǎn)單的就是我前幾天說(shuō)過(guò)的,把智能運(yùn)維的最后一公里交給專家,這會(huì)大大降低智能運(yùn)維工具的技術(shù)難度。只要我們能夠統(tǒng)一指標(biāo)標(biāo)準(zhǔn),讓遠(yuǎn)程的專家可以和現(xiàn)場(chǎng)運(yùn)維人員,以及被運(yùn)維的數(shù)據(jù)庫(kù)系統(tǒng)都用同一種語(yǔ)言進(jìn)行對(duì)話,就可以構(gòu)建一個(gè)完美的運(yùn)維體系。
專家不需要到現(xiàn)場(chǎng)采集和分析數(shù)據(jù),僅僅利用智能化運(yùn)維工具產(chǎn)生的報(bào)告就可以十分快速的幫助現(xiàn)場(chǎng)人員定位問(wèn)題,這樣可以實(shí)現(xiàn)7*24的專家快速介入,并實(shí)現(xiàn)高質(zhì)量低成本的分析定位。
當(dāng)然我們有更高的目標(biāo),那就是提升運(yùn)維診斷工具的智能化分析能力。要想實(shí)現(xiàn)通過(guò)靈活組合的知識(shí)點(diǎn)分析,同時(shí)確保問(wèn)題收斂與推理獲得合理的結(jié)論。在軟件實(shí)現(xiàn)上,我們就不能完全采用樹(shù)狀的發(fā)散結(jié)構(gòu)了。必須首先把影響RAC性能的因素進(jìn)行扁平化分解,將其分解為多個(gè)同一級(jí)別的檢測(cè)點(diǎn)。如果運(yùn)維知識(shí)分解到了這個(gè)粒度,那么每個(gè)檢測(cè)點(diǎn)都會(huì)發(fā)現(xiàn)一些標(biāo)準(zhǔn)的狀態(tài)異常,比如熱塊沖突,比如網(wǎng)絡(luò)故障等。
最終根據(jù)這些異常的匯總,就可以得到一個(gè)問(wèn)題發(fā)現(xiàn)的組合體。再根據(jù)這個(gè)組合體進(jìn)行問(wèn)題收斂與歸類,進(jìn)一步定位問(wèn)題根因。目前D-SMART中的智能指標(biāo)分析的實(shí)現(xiàn)方式與此類似,不過(guò)智能指標(biāo)分析面向的范圍太廣,因此根因收斂只能到達(dá)一個(gè)范圍,而無(wú)法十分精準(zhǔn)。而針對(duì)某個(gè)具體問(wèn)題的根因歸類要簡(jiǎn)單的多,發(fā)現(xiàn)的問(wèn)題類目也會(huì)比較集中,也會(huì)更加具體,因此根因定位也可以做到更為精準(zhǔn)。比如今天這個(gè)RAC問(wèn)題,無(wú)外乎網(wǎng)絡(luò)過(guò)載、網(wǎng)絡(luò)故障、TOP SQL、事務(wù)與鎖沖突、數(shù)據(jù)維護(hù)、數(shù)據(jù)庫(kù)參數(shù)配置等幾個(gè)方面。
采用這個(gè)方法必須對(duì)某個(gè)問(wèn)題的分析十分透徹,主要分析要素都已經(jīng)被很好的歸納了。相當(dāng)于把一個(gè)專家腦子里的分析模型都已經(jīng)做了高度抽樣,這樣再輔助一些驗(yàn)證算法,讓最終的診斷結(jié)論接近于專家分析就有可能了。要實(shí)現(xiàn)這樣的分析,首先需要構(gòu)建一個(gè)分析某個(gè)問(wèn)題的指標(biāo)集,然后構(gòu)建分析問(wèn)題的知識(shí)點(diǎn)集合,同時(shí)定義出問(wèn)題發(fā)現(xiàn)的類型集合。以及根因收斂的規(guī)則圖譜。有了這些基礎(chǔ),自動(dòng)化根因定位就具備條件了。
采用上面的方法實(shí)現(xiàn)精準(zhǔn)分析,針對(duì)某些關(guān)鍵問(wèn)題還是可以實(shí)現(xiàn)的。不過(guò)需要有運(yùn)維專家參與算法的設(shè)計(jì),而且一個(gè)專家不可能覆蓋很廣泛的知識(shí)面,因此要想建成一個(gè)覆蓋面廣的,能夠精準(zhǔn)分析的運(yùn)維自動(dòng)化系統(tǒng),必須依賴生態(tài)。通過(guò)生態(tài),發(fā)現(xiàn)更多的故障模型,通過(guò)生態(tài),更快速的完成知識(shí)圖譜的建設(shè),依靠生態(tài),可以對(duì)工具進(jìn)行驗(yàn)證,從而更快速的迭代提升工具的能力。