自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高德打車構(gòu)建可觀測性系統(tǒng)實(shí)踐

企業(yè)動態(tài)
高德打車業(yè)務(wù)的發(fā)展歷程同樣經(jīng)歷了從單體大應(yīng)用到服務(wù)化拆分的過程,業(yè)務(wù)仍在持續(xù)快速的發(fā)展中,如何保障這套龐大又復(fù)雜的系統(tǒng)持續(xù)高性能、高可用、高可控?構(gòu)建360度無死角的多維度可觀測能力顯得愈發(fā)重要。

[[401297]]

一、寫在前面

互聯(lián)網(wǎng)工程的高速發(fā)展,分布式、微服務(wù)、容器化架構(gòu)的流行,互聯(lián)網(wǎng)已全面進(jìn)入云原生時代。構(gòu)建系統(tǒng)的方式由最初的單體大應(yīng)用演變?yōu)榉植际郊軜?gòu),一臺服務(wù)器可能僅存幾小時甚至幾分鐘,這種復(fù)雜性大大增加了把系統(tǒng)運(yùn)行狀態(tài)可視化的難度。

高德打車業(yè)務(wù)的發(fā)展歷程也不例外,同樣經(jīng)歷了從單體大應(yīng)用到服務(wù)化拆分的過程,龐大的應(yīng)用體系和架構(gòu)的不斷升級,保障了多個節(jié)假日出行高峰的穩(wěn)定,業(yè)務(wù)仍在持續(xù)快速的發(fā)展中,如何保障這套龐大又復(fù)雜的系統(tǒng)持續(xù)高性能、高可用、高可控?構(gòu)建360度無死角的多維度可觀測能力顯得愈發(fā)重要。

二、談系統(tǒng)可觀測性

1. 什么是系統(tǒng)可觀測性

可觀測性(observerbality),是一個最近幾年開始在監(jiān)控社區(qū)流行起來的術(shù)語,可觀測性的提出最早來自于 Google 著名的 SRE 體系和 Apple 工程師 Cindy Sridharan 的博文《Monitoring and Oberservability》,感興趣的同學(xué)可以看一下。

可觀測性不是一種具體的工具或技術(shù),更偏向于是一種理念,目前已成為復(fù)雜分布式系統(tǒng)成功管理的關(guān)鍵組成部分,它是指運(yùn)行中的系統(tǒng)可被調(diào)試的能力,這種可調(diào)試能力的核心就是能夠在系統(tǒng)運(yùn)行時對其理解、詢問、探查和調(diào)度。

理解,詢問,探查體現(xiàn)在幫助工程師發(fā)現(xiàn)問題 -> 定位問題 -> 解決問題(止損),調(diào)度體現(xiàn)在可根據(jù)系統(tǒng)運(yùn)行狀態(tài)做出的自動化,智能化決策的能力。

可觀測性的目標(biāo)是增強(qiáng)工程師對系統(tǒng)運(yùn)行狀況的了解,增強(qiáng)對系統(tǒng)的信心。

目前,業(yè)界廣泛推行的可觀測性包含三大支柱:日志事件(Logging),分布式鏈路追蹤(Tracing) 和 指標(biāo)監(jiān)控(Metrics)。

  • Logging:不能單純的理解就是日志,泛指的是應(yīng)用運(yùn)行而產(chǎn)生的可以詳細(xì)解釋系統(tǒng)運(yùn)行狀態(tài)的各種事件,日志記錄是其中最常用一種手段。
  • Tracing:全鏈路追蹤,面向的是請求,通過對請求打標(biāo)、透傳、串聯(lián),最終可以還原出一次完整的請求,可幫助工程師分析出請求中的各種異常點(diǎn)。
  • Metrics:是對Logging事件的聚合,泛指各種指標(biāo)監(jiān)控和大盤,通過多維度聚合、分析和可視化展示,幫助工程師快速理解系統(tǒng)的運(yùn)行狀態(tài)。

2. 可觀測性與監(jiān)控的關(guān)系

可觀測性 != 監(jiān)控

第一印象很容易把“可觀測性”認(rèn)為就是“監(jiān)控”,人類一般傾向于用之前的認(rèn)知來理解一些新概念,其實(shí)兩者是不一樣的。

監(jiān)控是機(jī)器代替人工,長期的觀察系統(tǒng)的行為和輸出,幫助團(tuán)隊(duì)觀察和了解其系統(tǒng)狀態(tài)的工具或技術(shù)解決方案。監(jiān)控與可觀測性的區(qū)別如下:

(1) 關(guān)注點(diǎn)不同

監(jiān)控更多關(guān)注的是具體指標(biāo)的變化和報警,關(guān)注系統(tǒng)的失敗因素,多與運(yùn)維相關(guān),強(qiáng)調(diào)從外到內(nèi),從外部通過各種技術(shù)手段去看到內(nèi)部,關(guān)注的是點(diǎn)。而可觀測性關(guān)注的是應(yīng)用本身的狀態(tài),是對系統(tǒng)的一種自我審視,強(qiáng)調(diào)從內(nèi)到外,站在宏觀的角度去聚合分析各種指標(biāo),不僅了解分布式系統(tǒng)所有鏈路的運(yùn)行狀況,還能在多指標(biāo)同時發(fā)生問題時知道什么是因,什么是果,讓工程師“理解”系統(tǒng)發(fā)生的一切行為,關(guān)注的是點(diǎn)線面的結(jié)合。

(2) 關(guān)注時間不同

監(jiān)控更加注重問題的發(fā)現(xiàn)與預(yù)警,關(guān)注軟件交付過程中以及交付后的1到2天,也就是我們常說的“事中與事后”。而“可觀測性”是要對一個復(fù)雜分布式系統(tǒng)所發(fā)生的一切行為給出合理解釋,關(guān)注的是研發(fā)與運(yùn)維的全生命周期。

(3) 目的不同

監(jiān)控是告訴我們系統(tǒng)在什么時間、什么地方、發(fā)生了什么問題,僅提供對已知問題或故障的答案。而可觀測性是為了告訴我們那里為什么發(fā)生了問題,還允許工程師提出新問題。具備可觀測性的系統(tǒng),工程師既可以直觀的觀察到系統(tǒng)的整體運(yùn)行狀態(tài),又可以輕易深入到系統(tǒng)運(yùn)行的各個細(xì)節(jié)角落。在正常運(yùn)行時,能對系統(tǒng)進(jìn)行評估,提供操作建議,在發(fā)生故障時,可協(xié)助工程師快速理解、定位和修復(fù)問題。

監(jiān)控與可觀測性又是相輔相成的,監(jiān)控是可觀測性的一項(xiàng)基礎(chǔ)設(shè)施和手段,監(jiān)控是可觀測性的子集,抽象如下圖:

三、我們做了什么

分享下高德打車在探索可觀測性系統(tǒng)建設(shè)過程中的一些具體實(shí)踐,交流學(xué)習(xí)。

1. 統(tǒng)一日志

首先對日志進(jìn)行了統(tǒng)一治理,日志事件(Logging)是可觀測性的三大支柱之一,當(dāng)應(yīng)用數(shù)上百,微服務(wù)數(shù)上千時,各應(yīng)用的日志還任由開發(fā)人員根據(jù)自己喜好隨心所欲的打,可能會形成一場噩夢。例如五花八門的格式、級別、分類,甚至于error和info都混雜在一起。我們將日志統(tǒng)一歸為三類:監(jiān)控日志,業(yè)務(wù)日志,錯誤日志,并封裝提供專門的日志sdk,將“有效”的日志進(jìn)行統(tǒng)一管控,還能間接達(dá)到控制成本的目的。

(1) 監(jiān)控日志

監(jiān)控日志只用來做監(jiān)控,和其他日志進(jìn)行區(qū)分,輸出到一個單獨(dú)的滾動文件里。

監(jiān)控的原則是用來發(fā)現(xiàn)問題,而不是用來定位問題,要定位具體的問題,需要更詳細(xì)的日志,通過監(jiān)控日志中的traceId去關(guān)聯(lián)其他內(nèi)容即可。

監(jiān)控日志統(tǒng)一以monitor開頭,業(yè)務(wù)較多時,也可分多個,如monitor-biz1.log, monitor-biz2.log。監(jiān)控日志分隔符固定用豎線 | , 監(jiān)控指標(biāo)成功失敗統(tǒng)一歸類為 success,fail (業(yè)務(wù)失敗),error (接口失敗)。耗時邏輯統(tǒng)一在sdk中實(shí)現(xiàn),刪除原代碼中遍地存在的 long start=System.currentTimeMillis()。

統(tǒng)一監(jiān)控日志還有另一個好處:當(dāng)開發(fā)人員看到調(diào)用監(jiān)控日志api的代碼,會自然而然引起內(nèi)心的重視,明白這是用來做監(jiān)控的,我不能隨意修改,避免不同開發(fā)人員協(xié)作時誤改代碼而導(dǎo)致監(jiān)控錯誤。

sdk偽代碼:

  1. //定義key值,標(biāo)記起始時間 
  2. MonitorLog mlog = MonitorLog.start("access", "url", "httpcode", "bizcode"); 
  3. try { 
  4.     //doSomeThing1... 
  5.     //標(biāo)記start到something1 做完后的時間 
  6.     mlog.addTimeScope("time1"); 
  7.     //doSomeThing2... 
  8.     if ("成功") { 
  9.         mlog.success(url, httpStatus, response_code); 
  10.     } else { 
  11.         mlog.faild(url, httpStatus, response_code); 
  12.     } 
  13. } catch (Exception e) { 
  14.     mlog.error(url, httpStatus, response_code); 

(1) 業(yè)務(wù)日志

這里的業(yè)務(wù)日志并不是指代碼中開發(fā)人員隨意打出的 log.info(...) ,而是指專用于定位業(yè)務(wù)問題,根據(jù)自己的業(yè)務(wù)特點(diǎn),經(jīng)過認(rèn)真規(guī)劃,打出的需要統(tǒng)一收集、存儲和分析的業(yè)務(wù)相關(guān)的日志。

含關(guān)鍵信息,非關(guān)鍵信息,附加信息:

  • 關(guān)鍵信息是業(yè)務(wù)流程中的重要標(biāo)識,一般會建立查詢索引,比如高德打車的訂單ID,用戶ID等。
  • 非關(guān)鍵信息一般為業(yè)務(wù)日志描述,如“用戶下單成功”,非關(guān)鍵信息可不建索引。
  • 附加信息一般為業(yè)務(wù)流程中的附加信息,如“訂單狀態(tài)”,“訂單標(biāo)記”等,可不建索引。

(2) 錯誤日志

錯誤日志也進(jìn)行格式統(tǒng)一,方便對異常的全鏈路分析和追蹤。格式舉例如下,如果某一項(xiàng)沒有數(shù)據(jù),會使用'-'進(jìn)行占位。

2. 全鏈路追蹤

分布式全鏈路追蹤(Tracing)是可觀測性的第二大支柱,全局唯一的TraceId利用阿里中間件鷹眼Id的現(xiàn)成解決方案實(shí)現(xiàn),保證了在整個鏈路的唯一性,然后解決掉在分布式調(diào)用鏈路中,同步改異步丟失traceId的問題,該traceId會同時在監(jiān)控日志,服務(wù)日志,和錯誤日志以及其他日志中透傳并記錄,traceId持續(xù)的傳下去,就是給整個請求鏈路打上了標(biāo)記,鏈路上涉及的所有應(yīng)用日志收錄到阿里云SLS,接入阿里云api,通過api拿到所有應(yīng)用的日志,通過TraceId就可以還原這次請求的整個上下文。

市面上有很多 APM 廠商,監(jiān)控社區(qū)也有很多開源的鏈路追蹤系統(tǒng)均可采用。

3. 監(jiān)控治理

這一階段我傾向于稱作是對可觀測系統(tǒng)第三大支柱(Metrics) 的實(shí)現(xiàn),是監(jiān)控的梳理、補(bǔ)全優(yōu)化階段。“巧婦難為無米之炊”,如果基礎(chǔ)監(jiān)控項(xiàng)都覆蓋不全,何談可觀測性。

這里我把監(jiān)控歸類為5個領(lǐng)域,如圖:

提醒一下,監(jiān)控體系建設(shè)沒有銀彈,任何值得解決的事情都需要為之付出努力,不要幻想有一種工具能一下子解決你所有的監(jiān)控問題。

再提一個監(jiān)控建設(shè)的反模式“勾選式”監(jiān)控。就是按照各種文檔和要求,把各種監(jiān)控工具都用上,然后就開始自嗨的認(rèn)為自己的系統(tǒng)就會健壯無比,高枕無憂,這就是典型的“勾選式”監(jiān)控,為了使用而使用,不會有好的效果。

分類介紹下上圖監(jiān)控體系的5個領(lǐng)域:

(1) 基礎(chǔ)設(shè)施監(jiān)控

首先是對于機(jī)器和操作系統(tǒng)環(huán)境的各項(xiàng)基礎(chǔ)指標(biāo)監(jiān)控:cpu,mem,load,io,磁盤等,相信任何一個成熟的監(jiān)控平臺都會具備這項(xiàng)基礎(chǔ)能力,不再贅述。

(2) 中間件監(jiān)控

各種中間件的使用是分布式系統(tǒng)的重要元素,對于中間件的監(jiān)控要遵循各個中間件的監(jiān)控規(guī)范,推薦使用中間件自己的日志,指標(biāo)模板等,不必重復(fù)造輪,口徑統(tǒng)一也會減少溝通成本。

(3) 應(yīng)用&業(yè)務(wù)監(jiān)控

應(yīng)用監(jiān)控統(tǒng)一歸納為請求量,耗時,成功率三類,稱為三大黃金指標(biāo):

  • 請求量,含QPS、TPS、QPM、TPM等,其中分鐘級指標(biāo)必備,秒級指標(biāo)在核心鏈路中也是必備,秒級指標(biāo)可以探查到瞬時流量洪峰,在核心鏈路中是需要重點(diǎn)關(guān)注的。
  • 耗時,不能只是平均耗時,還有要TP99,max等,平均耗時更多的是反應(yīng)一個趨勢,開發(fā)人員必須要關(guān)注TP99,只看平均耗時會隱藏掉諸如毛刺等很多問題。
  • 成功率,包含接口成功率和業(yè)務(wù)成功率,接口成功率即請求該接口正常返回即認(rèn)為成功,反映的是請求鏈路的問題。業(yè)務(wù)成功率是該接口的業(yè)務(wù)邏輯成功失敗,反映的是業(yè)務(wù)的正確性,這是兩個完全不同的指標(biāo)。錯誤日志的監(jiān)控,在此也歸類到成功率的監(jiān)控中,也是一個不可或缺的重要指標(biāo)。

將應(yīng)用監(jiān)控的各項(xiàng)指標(biāo)進(jìn)行統(tǒng)一,一方面可以方便的查漏補(bǔ)缺,按照應(yīng)用和接口list,挨個檢查,有則完善,無則補(bǔ)充,另一方面可以減少溝通成本,不同的應(yīng)用指標(biāo)統(tǒng)一后,也降低了跨應(yīng)用排查問題的復(fù)雜度和困難度。

業(yè)務(wù)監(jiān)控是不同開發(fā)同學(xué)基于自己的業(yè)務(wù)日志建設(shè)而來,應(yīng)包含業(yè)務(wù)的量級監(jiān)控,趨勢監(jiān)控,還有各種轉(zhuǎn)化率,轉(zhuǎn)化漏斗的監(jiān)控,很多問題單靠量級和趨勢是發(fā)現(xiàn)不了的。業(yè)務(wù)轉(zhuǎn)化率和轉(zhuǎn)化漏斗是相對復(fù)雜的邏輯,且此類數(shù)據(jù)的報表一般都是BI做的T+1報表,及時性不夠,缺少實(shí)時的轉(zhuǎn)化率和轉(zhuǎn)化漏斗監(jiān)控,會讓我們漏掉很多問題,問題發(fā)現(xiàn)時往往已經(jīng)過去很久,此類復(fù)雜業(yè)務(wù)指標(biāo)監(jiān)控可以基于flink一類的流式計算來實(shí)現(xiàn),即使做不到實(shí)時,能做到準(zhǔn)實(shí)時,分鐘級,小時級作用也是很大的,是對業(yè)務(wù)指標(biāo)監(jiān)控的重大提升。

業(yè)務(wù)監(jiān)控這里不得不提場景監(jiān)控,不同場景流量的規(guī)模是完全不同的。比如同一個微服務(wù)接口被不同的業(yè)務(wù)場景調(diào)用,只對接口級別的指標(biāo)進(jìn)行監(jiān)控的話,流量小的場景錯誤數(shù)量很容易被流量大的場景錯誤量所淹沒,在異常發(fā)生時,監(jiān)控不報警,所以業(yè)務(wù)監(jiān)控要做到針對場景的細(xì)分,可以指導(dǎo)我們做精細(xì)化的控制。

(4) 資損監(jiān)控

應(yīng)用和業(yè)務(wù)監(jiān)控指標(biāo)正常,不代表服務(wù)就是正常的。數(shù)據(jù)的正確性校驗(yàn),最終一致性校驗(yàn),資金安全問題同樣是很嚴(yán)峻的問題,很容易被忽略。數(shù)據(jù)監(jiān)控和資損防控能力也應(yīng)是監(jiān)控必備的能力,尤其是大促期間,上線各種促銷補(bǔ)貼,促銷活動和玩法,對資金安全提出更多挑戰(zhàn),防止用戶/平臺/服務(wù)商的資金損失,是對我們服務(wù)的基本要求。涉及數(shù)據(jù)核對,資損的防控一般都會涉及多方,因?yàn)橐喾綄~,一定要充分溝通,重要的資金風(fēng)險場景都要覆蓋到,監(jiān)控時效性做不到實(shí)時的話,準(zhǔn)實(shí)時和離線小時級是要必備的。

(5) 監(jiān)控大盤

有了各個應(yīng)用準(zhǔn)確的監(jiān)控項(xiàng)做基礎(chǔ),還需要建立核心業(yè)務(wù)鏈路的監(jiān)控大盤。大盤有技術(shù)指標(biāo)維度的,還要有業(yè)務(wù)指標(biāo)維度。大盤的指標(biāo)擺放遵循:秒級指標(biāo),分鐘級指標(biāo),成功率,下游依賴成功率,耗時,下游依賴耗時等。layout提前設(shè)計,不能太寬松也不能太滿,一行2-3個最好,趨勢圖和表格要共存,趨勢圖在數(shù)據(jù)源太多時展示同環(huán)比會很難看。

監(jiān)控降噪:

監(jiān)控不能只是一味的增加,而不去保鮮,那是濫用,會產(chǎn)生很多恐怖的可能性。高德打車業(yè)務(wù)亦是如此,隨著業(yè)務(wù)的發(fā)展,新老監(jiān)控達(dá)到一定的量級,有些指標(biāo)已經(jīng)年久失修,數(shù)據(jù)不準(zhǔn)仍每天報警,釘釘消息和短信數(shù)量爆炸,動輒未讀99+,已經(jīng)對工程師造成嚴(yán)重干擾。

降噪的原則是每個報警項(xiàng)都應(yīng)該是可執(zhí)行的,報出來就是需要依靠人的智慧來作出反應(yīng),而不應(yīng)是機(jī)器人或腳本去自動回應(yīng)。如果報警信息不能指導(dǎo)人的行動,就是噪音,浪費(fèi)精力去關(guān)注。

監(jiān)控降噪有2方面內(nèi)容:

  • 一方面是報警數(shù)量爆炸,包含各種調(diào)試,壓測的報警全都丟出來,導(dǎo)致工程師麻木,不在意不關(guān)注,更嚴(yán)重的是大量無用的報警淹沒了真正有問題的報警,導(dǎo)致故障產(chǎn)生,典型的“狼來了”!
  • 另一方面是監(jiān)控的名稱和內(nèi)容不準(zhǔn)確,模棱兩可,用戶不理解報出的問題是什么,對定位問題毫無幫助,甚至造成困惑,貽誤戰(zhàn)機(jī)。

監(jiān)控的名稱語義要準(zhǔn)確,見名知意,光看名字就能迅速知道是哪塊業(yè)務(wù)出的問題,節(jié)省時間,方便值班人員周知相關(guān)人員。特別是一些url類的監(jiān)控,已知的url要盡可能用到翻譯,很少有人記得清這個url是干什么的。

中間件類的監(jiān)控項(xiàng)名稱中最好包含中間件的名稱、類型、以及應(yīng)用或業(yè)務(wù)名等。如:中間件_RPC_生產(chǎn)者/消費(fèi)者_(dá)類別(成功失敗匯總/耗時/錯誤碼等)_應(yīng)用名。

通知渠道:

報警要有級別概念,根據(jù)指標(biāo)核心程度,緊急程度,要區(qū)分不同的渠道,高級別監(jiān)控指標(biāo)要有短信或電話報警,短信和電話報警不宜過多,緊急程度不能無腦P0。

4. 指標(biāo)關(guān)聯(lián)、拓?fù)?、可視?/h3>

這一階段我稱作是對系統(tǒng)整體可觀測能力的實(shí)現(xiàn),目的是要能“理解”系統(tǒng)的一切行為。

前面3點(diǎn)做完了,你可能還會遇到很多類似的尷尬問題:監(jiān)控系統(tǒng)顯示為“正常”,但是我們的客服卻不斷收到客訴,甚至業(yè)務(wù)系統(tǒng)已經(jīng)不能正常工作了,另外一種情況就是你已經(jīng)發(fā)現(xiàn)監(jiān)控各種在報警,卻沒辦法告知哪塊業(yè)務(wù)會受到影響,哪里會不工作,在規(guī)模化微服務(wù)之后,你可能連宏觀的關(guān)聯(lián)關(guān)系都發(fā)現(xiàn)不了,更別談對系統(tǒng)行為的“理解”。這就是在當(dāng)今云原生時代下的大型分布式系統(tǒng)中,可觀測性相對于傳統(tǒng)監(jiān)控要解決的問題。

單純的指標(biāo)集監(jiān)控可能會是一個不成體系的狀態(tài),在這種狀態(tài)下,工程師衡量系統(tǒng)的運(yùn)行狀態(tài),多是靠一些零散指標(biāo),或是靠一些元老級工程師通過自己經(jīng)驗(yàn),從多個指標(biāo)里模糊構(gòu)建出業(yè)務(wù)全局狀態(tài),盲人摸象,是看不清全局的,而這些經(jīng)驗(yàn)也往往是不可復(fù)用的。更合理的做法是站在創(chuàng)造者的角度去探究如何讓系統(tǒng)正確的展現(xiàn)自身的狀態(tài),通過技術(shù)手段建立系統(tǒng)監(jiān)控的可觀測性,既能從微觀角度去看一個請求的完整鏈路,又能從宏觀角度去分析問題,“看清”系統(tǒng)運(yùn)行的全面狀態(tài),降低經(jīng)驗(yàn)門檻和不確定性。

有效實(shí)施可觀測性的第一要點(diǎn)就是要拆分指標(biāo),建立指標(biāo)關(guān)聯(lián)和拓?fù)?,方式有很多,這里參考OSM數(shù)據(jù)分析模型法的方式,將監(jiān)控指標(biāo)分層進(jìn)行拆解,細(xì)化到可落地執(zhí)行的指標(biāo)細(xì)項(xiàng)。

  • 一級指標(biāo)(主要為北極星指標(biāo))必須是全部認(rèn)可、衡量業(yè)績的核心指標(biāo)。需要所有人理解、認(rèn)同,且要易于溝通傳達(dá),比如下單量,完單量。
  • 二級指標(biāo)是北極星指標(biāo)的路徑指標(biāo)。北極星指標(biāo)發(fā)生變化的時候,我們通過查看二級指標(biāo),能夠快速定位問題的原因所在。
  • 三級指標(biāo)是對二級指標(biāo)的路徑的分析。通過三級指標(biāo),可以高效定位二級指標(biāo)波動的原因,這一步也會基于歷史經(jīng)驗(yàn)和拆解。

做監(jiān)控指標(biāo)的拆分并不是要求像OSM那樣嚴(yán)格的按照3層去拆,只是借鑒一個理念,先整體的看業(yè)務(wù)全局,結(jié)合產(chǎn)品目標(biāo),業(yè)務(wù)鏈路,拆分出可執(zhí)行,都認(rèn)可的一級指標(biāo),以高德打車業(yè)務(wù)為例,最終定義出一級指標(biāo)是下單,綁單,完單,支付:

對一級指標(biāo)建立監(jiān)控,建立量級和轉(zhuǎn)化漏斗的多維度指標(biāo),如下單量,綁單量,下單量同環(huán)比,下單量趨勢,業(yè)務(wù)轉(zhuǎn)化漏斗綁單率,完單率,支付率等。

接下來選擇一級指標(biāo)“完單量”為例,再繼續(xù)進(jìn)行二級指標(biāo)的拆分,先分析理清完單依賴的下游業(yè)務(wù),通過趨勢圖和表格多種形式匯總展示。

下游依賴的二級指標(biāo)拆分完成后,繼續(xù)向下追溯,將下游依賴的內(nèi)部依賴?yán)^續(xù)拆分,拆分出3層甚至4層更細(xì)粒度指標(biāo),指標(biāo)繼續(xù)拆分下鉆,最底層可能就是各個依賴系統(tǒng)的基礎(chǔ)監(jiān)控指標(biāo)(cpu,mem,load,網(wǎng)絡(luò),宿主機(jī)等)。

指標(biāo)關(guān)聯(lián)和拓?fù)浣⑼瓿珊螅鸵獙χ笜?biāo)實(shí)行可視化能力,采用的方式多是一些監(jiān)控大盤和圖表,拓?fù)鋱D等形式(監(jiān)控大盤建立原則參考監(jiān)控治理部分)。關(guān)聯(lián)關(guān)系通過線、網(wǎng)、箭頭交織在一起,再根據(jù)關(guān)聯(lián)關(guān)系對鏈路流量進(jìn)行染色,當(dāng)相關(guān)指標(biāo)發(fā)生報警時,就可以根據(jù)trace串聯(lián)出完整的調(diào)用鏈路,定位到相關(guān)的異常報警和業(yè)務(wù)影響。

可觀測性監(jiān)控問題排查過程

當(dāng)監(jiān)控具備了可觀測性能力,就可以大大提高問題發(fā)現(xiàn)和定位的效率。排查起問題來就會變得像醫(yī)生看病,由內(nèi)到外,由微觀到宏觀,通過CT等技術(shù)穿透身體各組織,將內(nèi)外部整體的情況以圖像的方式清晰展現(xiàn),醫(yī)生做出總體的診斷,直達(dá)病灶。

1)發(fā)現(xiàn)問題

當(dāng)一級指標(biāo)發(fā)生報警時,就是告訴我們,出問題了,這次以“下單”舉例,比如收到了下單耗時增加的預(yù)警,開始接手去定位。

2)定位問題

如果一級監(jiān)控指標(biāo)下單發(fā)生了報警,那么它依賴的二級指標(biāo)一定會發(fā)生波動。

比如下單的耗時tp99升高,觀察下單依賴項(xiàng),是下單依賴的二級指標(biāo)“數(shù)據(jù)服務(wù)”耗時同期發(fā)生波動。

要定位到最終原因,還需收集更多指標(biāo)信息,繼續(xù)下鉆數(shù)據(jù)服務(wù)的下級指標(biāo),是應(yīng)用數(shù)據(jù)庫中間件insert耗時增加,排查后發(fā)現(xiàn)超時現(xiàn)象都發(fā)生在同一臺服務(wù)器,繼續(xù)跟蹤該機(jī)器基礎(chǔ)指標(biāo)監(jiān)控,該機(jī)器所在宿主機(jī)load升高導(dǎo)致,繼續(xù)跟蹤,是該宿主機(jī)網(wǎng)絡(luò)設(shè)備出現(xiàn)問題導(dǎo)致。

3)解決問題(止損)

問題定位后,對問題機(jī)器進(jìn)行下線置換等手段,及時止損,耗時恢復(fù)。

4)沉淀預(yù)案

問題定位、解決完成之后,期望把處置的經(jīng)驗(yàn)沉淀下來,這樣就形成了預(yù)案,又多了一項(xiàng)保命符。

故障防御能力建設(shè)

當(dāng)系統(tǒng)的可觀測性模型越來越細(xì)致,越來越精確,便可以催生出許多自動化,智能化的決策能力,輔助上層做出及時有效的決策,指導(dǎo)我們做精細(xì)化的控制,解放人工生產(chǎn)力,這種能力我稱之為故障防御能力,如圖:

1)變更防御策略編排

監(jiān)控治理完成后,維度覆蓋全面,就會多線上的各項(xiàng)變更納入管控,這里將變更歸類為業(yè)務(wù)類變更和運(yùn)維類變更,詳細(xì)如上圖。針對不同的變更分類,可以指定不同的監(jiān)控手段來防守,比如運(yùn)維類的擴(kuò)容、縮容,不涉及到業(yè)務(wù)變更,在變更完成后,我們只需要對OS指標(biāo)監(jiān)控,應(yīng)用的指標(biāo)監(jiān)控進(jìn)行核對即可。針對代碼的變更,在發(fā)布部署后,除對基礎(chǔ)的os指標(biāo),應(yīng)用指標(biāo)核對外,還需要對相關(guān)的業(yè)務(wù)指標(biāo)進(jìn)行核對,以及涉及的資損指標(biāo)監(jiān)控。自定義各種編排策略,在不同分類的變更發(fā)生時,自動執(zhí)行對應(yīng)的監(jiān)控手段。

2)變更管控

收錄不同分類的變更,自動識別,自動打標(biāo),當(dāng)發(fā)生變更時,可以獲悉準(zhǔn)確的時間點(diǎn),自動周知關(guān)注人。

3)實(shí)時巡檢

對各項(xiàng)基礎(chǔ)設(shè)施指標(biāo)自動化巡檢,及時發(fā)現(xiàn)問題,自動周知。

4)主動防御(故障自動定位)

當(dāng)具備了可觀測性,就有了全鏈路的關(guān)聯(lián)追蹤能力,發(fā)生故障時,把相關(guān)的變更、告警做分析推導(dǎo),自動給出根因推薦,還可以對一些核心指標(biāo)做重保,當(dāng)重保指標(biāo)發(fā)生報警時及時作出問題推薦,產(chǎn)生處理工單,通過穩(wěn)定性AI智能交互機(jī)器人持續(xù)跟進(jìn),可在釘釘群一鍵接手,形成處置閉環(huán)。對于可自行補(bǔ)償?shù)膯栴},自動執(zhí)行補(bǔ)償策略,故障自愈。

5)全域高精可觀測性

所有的智能化決策能力,都是建立在系統(tǒng)高精的可觀測性基礎(chǔ)之上,而可觀測性,又是基于監(jiān)控,日志,和全鏈路追蹤三大支柱而來,最終形成無人值守故障防御能力。

四、寫在最后

最后做一個小結(jié),在云原生時代,運(yùn)維自動化和智能化的大趨勢中,系統(tǒng)可觀測性是穩(wěn)定性建設(shè)的最基礎(chǔ)一環(huán),是穩(wěn)定性保障武器庫中的那把“霜之哀傷”,完善的可觀測體系可以幫助我們屏蔽系統(tǒng)的復(fù)雜性,使系統(tǒng)整體的運(yùn)行狀態(tài)清晰可見,在故障防御和排查方面發(fā)揮了巨大的作用,增強(qiáng)對系統(tǒng)的信心。

穩(wěn)定性建設(shè)又是一個體系化的工程,不可能一蹴而就,關(guān)鍵在于持續(xù)不斷的完善,更脫離不了業(yè)務(wù),高德打車業(yè)務(wù)的穩(wěn)定性建設(shè)也是在業(yè)務(wù)不斷發(fā)展過程中逐步探索建立起來,2020年多個節(jié)假日出行高峰向我們提供了最好的“練兵場”,“試金石”,系統(tǒng)平穩(wěn)度過。

當(dāng)然穩(wěn)定性建設(shè)的打法是多種多樣的,但目標(biāo)都是一致,希望本文對大家有些許幫助。

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-06-07 13:48:25

可觀測性架構(gòu)系統(tǒng)開發(fā)

2021-11-19 09:40:50

數(shù)據(jù)技術(shù)實(shí)踐

2023-10-26 08:47:30

云原生數(shù)據(jù)采集

2024-03-27 14:43:07

.NET Core后端監(jiān)控可觀測性

2025-02-13 07:42:35

2023-03-09 08:00:22

2023-05-18 22:44:09

2023-10-13 13:40:29

2023-09-20 16:11:32

云原生分布式系統(tǒng)

2024-05-28 09:37:48

2023-08-21 09:37:57

MySQL工具MariaDB

2023-02-08 17:55:45

SigNoz開源工具

2023-03-30 16:30:08

可觀測云原生

2023-11-01 06:55:05

人工智能可觀測性IT

2022-09-27 21:32:14

Dapr指標(biāo)與日志

2024-01-15 05:55:33

2023-10-09 14:15:52

可觀測性數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號