本文將解密如何使用Java Chassis 3可觀測能力來快速定位問題,以及這個(gè)能力是如何構(gòu)建起來的。
本文分享自華為云社區(qū)《Java Chassis 3技術(shù)解密:實(shí)用的可觀測性》,作者:liubao68。
狹義的可觀測性指的是日志、調(diào)用鏈和指標(biāo);而廣義的可觀測性則包括更多內(nèi)容,一般來說,應(yīng)用程序暴露出的便于理解其運(yùn)行狀態(tài)、運(yùn)行軌跡、內(nèi)部結(jié)構(gòu)和功能集合的信息都屬于可觀測性的范圍。本文重點(diǎn)討論狹義的可觀測性。日志揭露了應(yīng)用程序內(nèi)部運(yùn)行的軌跡,通過異常日志可以理解錯(cuò)誤產(chǎn)生的原因;調(diào)用鏈反映了一次業(yè)務(wù)操作經(jīng)過的關(guān)鍵處理節(jié)點(diǎn),可以幫助快速確定問題發(fā)生的邊界;指標(biāo)反映了錯(cuò)誤發(fā)生時(shí)應(yīng)用程序的當(dāng)前或歷史狀態(tài),幫助分析需要一定時(shí)間或流量積累才會(huì)發(fā)生的問題,比如過載問題、性能問題等?梢,為了分析故障,具備可觀測性能力非常重要。
微服務(wù)系統(tǒng)具備復(fù)雜的調(diào)用關(guān)系和分布式部署特征。為了更好地分析和處理日志、調(diào)用鏈和指標(biāo),通常會(huì)部署ELK、SkyWalking和Prometheus等外部系統(tǒng)。然而,這些系統(tǒng)的完全搭建將花費(fèi)數(shù)十萬計(jì)算成本,而且很可能并沒有顯著提升日常問題定位的效率。不當(dāng)?shù)氖褂眠可能會(huì)引入性能問題。針對(duì)問題定位難的情況,Java Chassis 3提供了非常簡單高效、低成本的解決方案。由于采集的數(shù)據(jù)都與Java Chassis運(yùn)行過程和系統(tǒng)架構(gòu)強(qiáng)相關(guān),也避免了采集海量無關(guān)數(shù)據(jù),使得數(shù)據(jù)對(duì)于問題分析更具針對(duì)性,能夠更快速識(shí)別問題根因。
以下是我們首先解密如何使用可觀測能力來快速定位問題,然后再解密這個(gè)能力是如何構(gòu)建起來的。
在很多組織里,問題定位通常由不太熟悉系統(tǒng)結(jié)構(gòu)和技術(shù)細(xì)節(jié)的運(yùn)維人員開始,或者由剛接觸系統(tǒng)的新人開始。這給快速定界問題、收集和問題相關(guān)的信息帶來了巨大的挑戰(zhàn)。一個(gè)問題從發(fā)現(xiàn)到傳遞給責(zé)任模塊,數(shù)個(gè)小時(shí)的時(shí)間就過去了。設(shè)計(jì)一個(gè)簡單的問題定位流程,快速定界問題和收集關(guān)聯(lián)信息,是可觀測系統(tǒng)搭建的起點(diǎn)。
當(dāng)用戶識(shí)別到一個(gè)故障,比如交易失敗,在系統(tǒng)層面,會(huì)對(duì)應(yīng)到一次系統(tǒng)請(qǐng)求的失敗。在系統(tǒng)設(shè)計(jì)之初,會(huì)采用一個(gè)請(qǐng)求標(biāo)識(shí)將用戶故障和系統(tǒng)請(qǐng)求關(guān)聯(lián)起來,即TraceId,這是所有調(diào)用鏈系統(tǒng)設(shè)計(jì)的基礎(chǔ)。通常建議前端在發(fā)送請(qǐng)求時(shí)攜帶TraceId,便于將前后端請(qǐng)求進(jìn)行關(guān)聯(lián)。在前端未按照要求攜帶TraceId的情況下,Java Chassis會(huì)在應(yīng)用網(wǎng)關(guān)Edge Service生成TraceId,并在給前端響應(yīng)的HTTP頭中攜帶TraceId。當(dāng)用戶識(shí)別到一個(gè)故障,可以通過瀏覽器等前端工具獲取TraceId。問題定位的起點(diǎn)是獲取TraceId。
在管理控制臺(tái),輸入TraceId和問題發(fā)生的大概時(shí)間,可以檢索出關(guān)鍵的調(diào)用鏈信息和關(guān)鍵日志信息。通過調(diào)用鏈信息,可以知道請(qǐng)求的執(zhí)行軌跡和發(fā)生問題的節(jié)點(diǎn);通過關(guān)鍵日志信息,能夠快速確定問題根因。對(duì)于一些簡單常見的問題,經(jīng)過這個(gè)簡單的步驟,就能夠確定問題根因。
對(duì)于一些復(fù)雜的問題,需要獲取上下文日志或指標(biāo)進(jìn)行深入的分析,運(yùn)維人員可以在檢索結(jié)果里將完整的日志文件和指標(biāo)信息下載下來,提供給故障服務(wù)的技術(shù)人員。
從上面的過程可以看出,運(yùn)維人員在不理解系統(tǒng)實(shí)現(xiàn)細(xì)節(jié)的情況下,也能快速定界和定位一些簡單問題,并能夠快速收集詳細(xì)和問題強(qiáng)相關(guān)的信息,提供給技術(shù)人員進(jìn)一步處理。
Java Chassis在設(shè)計(jì)之初就內(nèi)置了大量的可觀測能力。使用上述流程,無需部署ELK、SkyWalking和Prometheus去采集數(shù)據(jù),也不需要集成這些工具的SDK或Agent。通過一些開發(fā)規(guī)范約束和可觀測API,就能夠?qū)崿F(xiàn)一個(gè)簡單高效和易用的定位系統(tǒng)。
動(dòng)手試試:可以通過下載和運(yùn)行fence項(xiàng)目,體驗(yàn)上述問題定位流程和了解本章節(jié)介紹的實(shí)現(xiàn)原理。也可以在實(shí)際的業(yè)務(wù)系統(tǒng)中,參考該項(xiàng)目構(gòu)筑業(yè)務(wù)需要的可觀測能力。
Java Chassis通過集成應(yīng)用性能監(jiān)控、微服務(wù)調(diào)用鏈來生成調(diào)用鏈和指標(biāo),日志則使用slf4j來記錄。這些數(shù)據(jù)構(gòu)成了可觀測的基礎(chǔ),接下來就是如何存儲(chǔ)和采集這些數(shù)據(jù)。
通過配置log4j2,可以將日志、調(diào)用鏈和指標(biāo)都輸出到日志文件。特別的,該日志配置約束了數(shù)據(jù)存儲(chǔ)的規(guī)則、路徑,為可觀測API提供了簡單的實(shí)現(xiàn)方案。
每個(gè)微服務(wù)都集成和實(shí)現(xiàn)可觀測API。
最后,我們可以開發(fā)一個(gè)管理控制服務(wù),實(shí)現(xiàn)管理面可觀測API,就完成了可觀測能力的構(gòu)建。
與部署ELK、SkyWalking和Prometheus去采集數(shù)據(jù)的傳統(tǒng)方案對(duì)比,上述方案非常簡單和實(shí)用,能夠幫助實(shí)時(shí)在線分析問題。該方案也無需將日志、調(diào)用鏈和指標(biāo)等數(shù)據(jù)集中存儲(chǔ)下來,可以節(jié)省大量的存儲(chǔ)設(shè)備空間。當(dāng)然,它的缺點(diǎn)也是顯而易見的,對(duì)于已經(jīng)下線的服務(wù),或者對(duì)于歷史問題需要追溯的情況,則采集不到相關(guān)的信息。站在問題定位的角度,存儲(chǔ)海量的日志、調(diào)用鏈和指標(biāo)數(shù)據(jù),大量數(shù)據(jù)都是和問題無關(guān)的,并且多數(shù)情況是要在第一時(shí)間完成問題定界和信息收集,因此上述方案相比傳統(tǒng)方案就有了非常大的競爭力優(yōu)勢。
客戶故事:很多客戶花了大量成本構(gòu)建可觀測能力,依然無法指導(dǎo)運(yùn)維人員快速定界和定位問題。通過建立一個(gè)簡單實(shí)用的問題定界流程和采集數(shù)據(jù)的手段,可以幫助提升問題定位效率。
點(diǎn)擊關(guān)注,第一時(shí)間了解華為云新鮮技術(shù)~
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)