本文介紹通過端云互聯(lián)請(qǐng)求服務(wù)調(diào)用鏈路和參數(shù)分析,有效地提高問題排查效率。
前提條件
在IntelliJ IDEA中安裝2021.4.1及以上版本Cloud Toolkit。相關(guān)操作,請(qǐng)參見在IntelliJ IDEA中安裝和配置Cloud Toolkit。
背景信息
在應(yīng)用運(yùn)行過程中,當(dāng)出現(xiàn)服務(wù)調(diào)用異常或資源訪問失敗時(shí),開發(fā)人員通常會(huì)選擇斷點(diǎn)調(diào)試來排查問題。但斷點(diǎn)調(diào)試在某些場(chǎng)景下并不適用,可能存在如下問題:
- 缺乏整體調(diào)用概況:上層服務(wù)收到請(qǐng)求后,往往會(huì)拆分成多個(gè)子請(qǐng)求,最后將這些子請(qǐng)求的處理結(jié)果進(jìn)行匯總。例如,服務(wù)收到請(qǐng)求后可能會(huì)先訪問緩存,當(dāng)緩存訪問超時(shí)后才訪問數(shù)據(jù)庫(kù),最后匯總數(shù)據(jù)返回。服務(wù)發(fā)起了哪些子請(qǐng)求?這些子請(qǐng)求的耗時(shí)如何?斷點(diǎn)調(diào)試難以明確這類問題。
- 類嵌套太深,調(diào)試效率低下:得益于各種服務(wù)框架封裝,我們進(jìn)行微服務(wù)調(diào)用、緩存訪問、數(shù)據(jù)庫(kù)訪問等操作時(shí)無需知曉太多內(nèi)部處理細(xì)節(jié),但實(shí)際上往往是比較復(fù)雜的。從上層入口到底層異常之間通常嵌套多個(gè)類調(diào)用,并且包含各種同步和異步處理,這種情況下的斷點(diǎn)調(diào)試是非常困難。
- 斷點(diǎn)調(diào)試本身影響系統(tǒng)性能:斷點(diǎn)調(diào)試過程一般耗時(shí)較長(zhǎng),而另一方面服務(wù)框架處理時(shí)會(huì)進(jìn)行超時(shí)判斷,使用斷點(diǎn)調(diào)試容易使調(diào)試本身的耗時(shí)造成服務(wù)處理超時(shí)。
啟用端云互聯(lián)并打印鏈路信息
查看請(qǐng)求鏈路
啟動(dòng)應(yīng)用后,當(dāng)應(yīng)用發(fā)起服務(wù)調(diào)用或訪問外部資源時(shí),可看到輸出如下鏈路。
鏈路輸出中包含如下信息:
TraceId
:用于標(biāo)記請(qǐng)求的整體處理過程。在分布式微服務(wù)調(diào)用場(chǎng)景下,TraceId會(huì)從最前端的應(yīng)用節(jié)點(diǎn)透?jìng)髦料掠捂溌犯鱾€(gè)節(jié)點(diǎn),可根據(jù)此TraceId在EDAS控制臺(tái)或ARMS控制臺(tái)查詢整體鏈路處理過程。Service
:當(dāng)前應(yīng)用的請(qǐng)求處理入口,如Spring Cloud服務(wù)、Dubbo服務(wù)、HSF服務(wù)等。API
:鏈路處理過程中的方法簽名。Line
:方法處理的具體行數(shù)。Cost
:此方法及其下游處理的耗時(shí),單位毫秒。Ext
:擴(kuò)展信息,包含請(qǐng)求處理狀態(tài)碼、數(shù)據(jù)庫(kù)訪問SQL、資源目標(biāo)地址等信息。Console link
:ARMS控制臺(tái)上收集的此鏈路信息。ARMS調(diào)用鏈采集為準(zhǔn)實(shí)時(shí),如打開此鏈接未展示調(diào)用鏈,請(qǐng)稍等片刻刷新頁面。
分析請(qǐng)求鏈路
通過查看請(qǐng)求鏈路,可以方便地了解請(qǐng)求處理過程中關(guān)鍵節(jié)點(diǎn)的概要信息。如果需要進(jìn)一步分析關(guān)鍵節(jié)點(diǎn)處理的參數(shù)、返回值或異常,可以結(jié)合插件中集成的Arthas進(jìn)一步分析。