作者:京東保險(xiǎn) 鄭飛
背景介紹
目前質(zhì)量團(tuán)隊(duì)正在積極建設(shè)和完善應(yīng)用監(jiān)控能力,旨在能及時(shí)發(fā)現(xiàn)并解決問題,為線上服務(wù)穩(wěn)定性保駕護(hù)航。隨著可觀測(cè)性概念的逐漸普及,監(jiān)控的建設(shè)也有了新的挑戰(zhàn)和使命。本文將探討在可觀測(cè)性背景下,作為一個(gè)測(cè)試人員在質(zhì)量保障中的一些思路和個(gè)人思考,以及為什么要區(qū)別于研發(fā)維度的可觀測(cè)性,測(cè)試團(tuán)隊(duì)維度的可觀測(cè)性建設(shè)又能為業(yè)務(wù)帶來哪些價(jià)值。
一、了解可觀測(cè)性
1.1 什么是可觀測(cè)性
維基百科定義:
?控制理論中的可觀察性(observability)是指系統(tǒng)可以由其外部輸出推斷其其內(nèi)部狀態(tài)的程度。系統(tǒng)的可觀察性和可控制性是數(shù)學(xué)上對(duì)偶的概念??捎^察性最早是匈牙利裔工程師魯?shù)婪颉た柭槍?duì)線性動(dòng)態(tài)系統(tǒng)提出的概念[1]?[2]。若以信號(hào)流圖來看,若所有的內(nèi)部狀態(tài)都可以輸出到輸出信號(hào),此系統(tǒng)即有可觀察性。
在軟件領(lǐng)域中,可觀測(cè)性是從系統(tǒng)內(nèi)部出發(fā),基于白盒化的思路去監(jiān)測(cè)系統(tǒng)內(nèi)部的運(yùn)行情況。其貫穿應(yīng)用開發(fā)的整個(gè)生命周期,通過分析應(yīng)用的指標(biāo)、日志和鏈路等數(shù)據(jù),構(gòu)建完整的觀測(cè)模型,從而實(shí)現(xiàn)故障診斷、根因分析和快速恢復(fù)。
Gartner將可觀測(cè)性定義為軟件和系統(tǒng)的一種特性,它允許管理員收集有關(guān)系統(tǒng)的外部和內(nèi)部狀態(tài)數(shù)據(jù),以便他們回答有關(guān)其行為的問題。然后,I&O、DevOps、SRE、Support等團(tuán)隊(duì)可以利用這些數(shù)據(jù)來調(diào)查異常情況,參與可觀察性驅(qū)動(dòng)的開發(fā),并提高系統(tǒng)性能和正常運(yùn)行時(shí)間。雖然可觀察性處于早期階段,截至 2020 年只有不到 10% 的企業(yè)采用它,但 Gartner 預(yù)測(cè),到 2024 年,30% 的基于云架構(gòu)的公司將采用可觀察性技術(shù)。
OpenTelemetry組織提出了可觀測(cè)性依賴的三大“支柱”:
??
注:圖片來源于網(wǎng)絡(luò)
可觀測(cè)性運(yùn)作模式可看作是:觀察-判斷-優(yōu)化-再觀察
1.2 可觀測(cè)性和監(jiān)控的區(qū)別
從核心出發(fā)點(diǎn)來講,傳統(tǒng)的監(jiān)控和可觀測(cè)性,背后解決的是同樣的問題:能及時(shí)、準(zhǔn)確的掌握系統(tǒng)的運(yùn)行狀況,提升對(duì)系統(tǒng)運(yùn)行的控制能力和故障處理能力。
?監(jiān)控(Monitoring):收集、分析和使用信息來觀察一段時(shí)間內(nèi)的運(yùn)行進(jìn)度,并且進(jìn)行相應(yīng)的決策管理的過程,監(jiān)控側(cè)重于觀察特定指標(biāo)。
?可觀測(cè)性(Observability):通過分析系統(tǒng)生成的數(shù)據(jù)理解推演出系統(tǒng)內(nèi)部的狀態(tài),并提供數(shù)據(jù)、技術(shù)決策層面的支持。
從性能上看,監(jiān)控和可觀測(cè)性之間的區(qū)別可從以下四個(gè)方面進(jìn)行區(qū)分:
??
注:圖片來源于網(wǎng)絡(luò)
監(jiān)控是為了提高系統(tǒng)可觀察性而執(zhí)行的操作 可觀測(cè)性:屬于系統(tǒng)的一個(gè)屬性,能有效的反應(yīng)出系統(tǒng)的健康狀況
1.3 可觀測(cè)性和監(jiān)控的聯(lián)系
??
注:圖片來源于網(wǎng)絡(luò)
監(jiān)控能夠檢測(cè)到系統(tǒng)中的錯(cuò)誤,可以說是外部對(duì)業(yè)務(wù)應(yīng)用系統(tǒng)的主動(dòng)行為,而可觀測(cè)性能夠理解問題發(fā)生的原因,也就是說在增添了業(yè)務(wù)應(yīng)用系統(tǒng)自身的要求的同時(shí),還建立應(yīng)用運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù)之間的關(guān)聯(lián)。
二、質(zhì)量保障目的
目標(biāo)
1.實(shí)現(xiàn)對(duì)系統(tǒng)和應(yīng)用的全面監(jiān)控,能主動(dòng)探測(cè)出系統(tǒng)運(yùn)行健康狀況。
2.快速定位和解決系統(tǒng)異常,能先于用戶發(fā)現(xiàn)問題并能提供問題修復(fù)決策。
3.提供實(shí)時(shí)以及歷史可對(duì)比數(shù)據(jù)反映出系統(tǒng)的運(yùn)行狀況,,支持技術(shù)決策。
范圍
1.涵蓋所有關(guān)鍵應(yīng)用服務(wù)和基礎(chǔ)設(shè)施。
2.包括應(yīng)用、服務(wù)器、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)等,不局限于技術(shù)層面,更需要考慮業(yè)務(wù)數(shù)據(jù)層面。
三、質(zhì)量保障思路
上邊提到了監(jiān)控和可觀測(cè)性的區(qū)別和聯(lián)系,本文提到的質(zhì)量保障思路是以業(yè)務(wù)監(jiān)控作為基礎(chǔ)底座,拓展數(shù)據(jù)可觀測(cè)性的能力,旨在解決傳統(tǒng)監(jiān)控被動(dòng)防御的缺點(diǎn),結(jié)合可觀測(cè)性下的采集、聚合、追蹤提供問題定位、風(fēng)險(xiǎn)預(yù)測(cè)、系統(tǒng)決策的能力。
1. 監(jiān)控基礎(chǔ)底座
1.1 監(jiān)控維度思考
監(jiān)控是為了提高系統(tǒng)可觀察性而執(zhí)行的操作,通常我們建設(shè)的監(jiān)控能力包含以下幾個(gè)方面:
?資源層監(jiān)控:
?對(duì)硬件、網(wǎng)絡(luò)帶寬等資源使用層面的監(jiān)控。通常由運(yùn)維側(cè)主導(dǎo)。
?服務(wù)穩(wěn)定性:
?服務(wù)或接口的可用性等,例如UMP監(jiān)控。通常由研發(fā)側(cè)主導(dǎo)。
?業(yè)務(wù)功能監(jiān)控:
?重點(diǎn)關(guān)注系統(tǒng)對(duì)外提供的功能是否正常,測(cè)試需重點(diǎn)關(guān)注的部分
?業(yè)務(wù)數(shù)據(jù)監(jiān)控:
?重點(diǎn)關(guān)注跟業(yè)務(wù)特性強(qiáng)相關(guān)的數(shù)據(jù),根據(jù)數(shù)據(jù)正確性、數(shù)據(jù)走向趨勢(shì)能間接的反映出系統(tǒng)健康度是否有下降或存在潛在風(fēng)險(xiǎn)
?日志聚類監(jiān)控:
?統(tǒng)計(jì)學(xué)監(jiān)控的思維,從日志聚合角度計(jì)算出系統(tǒng)整體、分接口的可用性??捎眯缘陀陬A(yù)期或存在環(huán)比內(nèi)大幅下降則可能是系統(tǒng)出現(xiàn)異常
1.2 測(cè)試團(tuán)隊(duì)重點(diǎn)建設(shè)監(jiān)控項(xiàng)
由于資源層監(jiān)控和服務(wù)穩(wěn)定性監(jiān)控一般會(huì)由運(yùn)維或研發(fā)主導(dǎo),為了避免重復(fù)造輪子,這里不做單獨(dú)的討論,只討論從測(cè)試視角要重點(diǎn)建設(shè)的監(jiān)控能力
1.2.1 業(yè)務(wù)功能監(jiān)控
接口功能:從接口維度進(jìn)行監(jiān)控,監(jiān)控核心接口功能是否正常,其中:
讀接口:由于不涉及臟數(shù)據(jù)的產(chǎn)生,可直接在生產(chǎn)環(huán)境監(jiān)控驗(yàn)證。
寫接口:由于寫接口可能會(huì)產(chǎn)生臟數(shù)據(jù),在保險(xiǎn)側(cè)業(yè)務(wù)上禁止此種操作,而且即使使用測(cè)試賬號(hào)也會(huì)產(chǎn)生于生產(chǎn)環(huán)境差異巨大的不真實(shí)數(shù)據(jù),所以我們無法使用直接在生產(chǎn)環(huán)境直接操作寫接口。這里想到的一個(gè)方案是【測(cè)試反哺】,具體思路為:用預(yù)發(fā)環(huán)境反哺生產(chǎn)驗(yàn)證。理論上預(yù)發(fā)環(huán)境版本號(hào)一定 >= 生產(chǎn)環(huán)境,預(yù)發(fā)環(huán)境由于新提測(cè)的內(nèi)容導(dǎo)致監(jiān)控探測(cè)失敗,可看作是對(duì)歷史功能的回歸驗(yàn)證不通過,其中有兩種情況: 1. 預(yù)期內(nèi)失?。汗δ茏兏鼘?duì)接口產(chǎn)生的影響,這時(shí)需要同步修改監(jiān)控內(nèi)容 2. 非預(yù)期內(nèi)失敗:新提測(cè)內(nèi)容,影響了原有的功能,可看作是提測(cè)的需求bug
而關(guān)于接口監(jiān)控的場(chǎng)景,這里想到了一種引流監(jiān)控的思路,即用真實(shí)的用戶請(qǐng)求驗(yàn)證功能的正確性(替換關(guān)鍵信息,不暴露真實(shí)用戶數(shù)據(jù))。
??
為什么要用引流做監(jiān)控?
按照傳統(tǒng)的接口監(jiān)控方式,通常會(huì)寫一個(gè)監(jiān)控case然后周期性執(zhí)行。這樣寫的弊端是高度依賴測(cè)試人員對(duì)業(yè)務(wù)的了解程度,也很難保障業(yè)務(wù)場(chǎng)景覆蓋的完整性,而隨著系統(tǒng)的迭代一個(gè)接口的功能場(chǎng)景可能會(huì)被擴(kuò)展出很多,如果測(cè)試人員只了解其中的一個(gè)或某幾個(gè)場(chǎng)景,按照習(xí)慣會(huì)添加這幾個(gè)場(chǎng)景的監(jiān)控case,但是不熟悉的場(chǎng)景可能就會(huì)一直缺少對(duì)應(yīng)的監(jiān)控。
場(chǎng)景覆蓋:從用戶可感知元素角度反推監(jiān)控項(xiàng)case
這種思路比較像黑盒測(cè)試,即不關(guān)注具體的數(shù)據(jù)、業(yè)務(wù)處理流程,更貼近用戶的真實(shí)操作,把自己想像成一個(gè)真實(shí)的用戶,用戶在使用產(chǎn)品的時(shí)候能看到什么,能操作哪些頁(yè)面、按鈕?這些操作背后對(duì)應(yīng)的功能是什么,從視角上的可見反推到不可見的應(yīng)用背后。
1.2.2 業(yè)務(wù)數(shù)據(jù)監(jiān)控
業(yè)務(wù)數(shù)據(jù)是產(chǎn)品最終的價(jià)值體現(xiàn),數(shù)據(jù)的有消息、正確性、健康性最終能反應(yīng)出系統(tǒng)的穩(wěn)定性。針對(duì)保險(xiǎn)業(yè)務(wù),我們其實(shí)可以做很多業(yè)務(wù)數(shù)據(jù)層面的監(jiān)控,例如:
?核心數(shù)據(jù)量(單量、保費(fèi)等核心數(shù)據(jù)的實(shí)時(shí)性)
?業(yè)務(wù)數(shù)據(jù)正確性的檢查計(jì)算(例如保費(fèi)=稅+稅后費(fèi)用,出現(xiàn)不等則是錯(cuò)誤數(shù)據(jù))
?核心數(shù)據(jù)走向趨勢(shì),當(dāng)天退保比例高于某個(gè)閾值,或者環(huán)比高于某個(gè)閾值
......
1.2.3 日志聚類監(jiān)控
跟業(yè)務(wù)數(shù)據(jù)的重要性一樣,通過日志也能間接的反應(yīng)出系統(tǒng)運(yùn)行的穩(wěn)定性狀況,由于對(duì)日志進(jìn)行聚類監(jiān)控本身依賴應(yīng)用日志的規(guī)范性,所以這里非為短期內(nèi)可落地和長(zhǎng)期改造的兩個(gè)思路。
短期:
特點(diǎn):不依賴研發(fā)測(cè)改造,可以根據(jù)現(xiàn)有日志聚類出報(bào)錯(cuò)類型。
監(jiān)控邏輯:根據(jù)固定閾值觸發(fā)報(bào)警。舉例:如果某一個(gè)錯(cuò)誤類型批量出現(xiàn)超過設(shè)定的閾值,需要報(bào)警。
這種監(jiān)控最大的問題在于閾值設(shè)定的不合理會(huì)產(chǎn)生漏報(bào)或批量的誤報(bào)。
所以需要一段時(shí)間的試錯(cuò),前期閾值設(shè)定的保守一些,用一段時(shí)間的數(shù)據(jù)評(píng)估出一個(gè)相對(duì)合理的閾值,同時(shí)由于數(shù)據(jù)的積累,后續(xù)的報(bào)警策略也可以擺脫單獨(dú)的固定閾值方式,使用閾值+趨勢(shì)分析的策略進(jìn)行報(bào)警。
引申價(jià)值:近一周或一個(gè)月內(nèi)報(bào)錯(cuò)數(shù)量統(tǒng)計(jì)對(duì)比,如果某天報(bào)錯(cuò)突然增多,則預(yù)示可能存在風(fēng)險(xiǎn)(百分比上漲監(jiān)控)。
報(bào)警Demo:【警告】10min內(nèi) {投保年齡錯(cuò)誤} 類型報(bào)錯(cuò)數(shù)量超過100,大于設(shè)定閾值90,請(qǐng)排查系統(tǒng)是否有異常!
長(zhǎng)期:
特點(diǎn):依賴研發(fā)規(guī)范日志打印(一個(gè)請(qǐng)求至少需要有開始和結(jié)束的打?。?/p>
監(jiān)控邏輯:全量拉取生產(chǎn)日志進(jìn)行日志清洗和計(jì)算,統(tǒng)計(jì)應(yīng)用可用性
應(yīng)用可用性 = (時(shí)間段內(nèi)的全量流量 - 時(shí)間段內(nèi)的報(bào)錯(cuò)流量) / 時(shí)間段內(nèi)的全量流量
引申價(jià)值:由此可計(jì)算出天級(jí)可用性、小時(shí)級(jí)可用性、10min級(jí)可用性。同時(shí)規(guī)范的logid可以作為入口系統(tǒng)出現(xiàn)異常時(shí),向下追蹤的依據(jù)。
??
2. 可觀測(cè)性維度思考
集團(tuán)的PFinder (problem finder) 是UMP團(tuán)隊(duì)打造的新一代APM(應(yīng)用性能追蹤)系統(tǒng),非常貼合可觀測(cè)性的概念,目前研發(fā)團(tuán)隊(duì)也在陸續(xù)的將應(yīng)用接入到PFinder。
那為什么測(cè)試團(tuán)隊(duì)要做區(qū)別于研發(fā)維度的可觀測(cè)性?又該如何去做?
避免重復(fù)造輪子!作為測(cè)試人員應(yīng)該對(duì)系統(tǒng)的功能是否可用、業(yè)務(wù)數(shù)據(jù)是否正確有高度的敏感性。測(cè)試團(tuán)隊(duì)的可觀測(cè)行建設(shè)與監(jiān)控緊密結(jié)合。通過配合監(jiān)控建設(shè),結(jié)合可觀測(cè)性給出系統(tǒng)診斷、分析、定位的能力。
??
2.1 模塊級(jí)可觀測(cè)性
模塊及的可觀測(cè)性用來檢測(cè)單系統(tǒng)、單模塊的系統(tǒng)穩(wěn)定性,主要提供核心數(shù)據(jù)的趨勢(shì)分析參考,理想狀態(tài)能實(shí)現(xiàn)以下類型的警告信息
報(bào)警Demo:【可疑】核心數(shù)據(jù)xxx從【xxxx-xx-xx】服務(wù)上線后,出現(xiàn)連續(xù)x天數(shù)據(jù)下降,請(qǐng)相關(guān)注是否存在異常。
2.2 系統(tǒng)級(jí)可觀測(cè)性
根據(jù)日志采集系統(tǒng),聚合出當(dāng)前模塊、下游模塊的數(shù)據(jù)流走向。當(dāng)任何一個(gè)模塊的監(jiān)控項(xiàng)出現(xiàn)報(bào)警時(shí),能及時(shí)通知并且能攜帶出一定的問題排查和定位結(jié)論。同時(shí)能進(jìn)行不同系統(tǒng)之間的數(shù)據(jù)核對(duì)。
聯(lián)動(dòng)報(bào)警
可觀測(cè)性具有系統(tǒng)及觀測(cè)的特點(diǎn),也就是說它能更全局的看到到整個(gè)系統(tǒng)不同模塊的狀態(tài),所以應(yīng)該具備很強(qiáng)的模塊聯(lián)動(dòng)性。
通常在一個(gè)業(yè)務(wù)系統(tǒng)中,葉子節(jié)點(diǎn)的異常會(huì)導(dǎo)致上游服務(wù)的異常。例如應(yīng)用A 調(diào)用 應(yīng)用B完成業(yè)務(wù)處理,當(dāng)應(yīng)用B發(fā)送異常時(shí),會(huì)影響到應(yīng)用A,傳統(tǒng)的監(jiān)控方式是對(duì)各自的應(yīng)用做監(jiān)控,此時(shí)如果應(yīng)用B本身的監(jiān)控不完善,很難第一時(shí)間排查出問題的根因,甚至在應(yīng)用B監(jiān)控完善的情況下,如果AB信息沒有及時(shí)共享,也很難第一時(shí)間定位問題。在這種情況下建設(shè)聯(lián)動(dòng)報(bào)警的能力,除了能發(fā)現(xiàn)上游服務(wù)的問題,還能引申聯(lián)動(dòng)探測(cè)出子模塊的異常,可以有效縮短問題定位和修復(fù)的時(shí)間。
具體思路為:當(dāng)上游應(yīng)用發(fā)生異常時(shí),可嘗試向下游子模塊進(jìn)行探測(cè),在報(bào)警信息中匯總出所有發(fā)現(xiàn)異常的模塊信息,給問題定位人員提供直觀的排查方向。
聯(lián)動(dòng)報(bào)警不止能應(yīng)用在系統(tǒng)及可觀測(cè)性中,針對(duì)傳統(tǒng)的監(jiān)控方式也可以根據(jù)模塊間的關(guān)閉進(jìn)行聯(lián)動(dòng)報(bào)警。
故障定位
在具有聯(lián)動(dòng)報(bào)警能力的基礎(chǔ)上,報(bào)警信息中可提供更準(zhǔn)確的故障內(nèi)容
舉例:應(yīng)用A 調(diào)用 應(yīng)用B完成業(yè)務(wù)處理,某次B應(yīng)用上線后A應(yīng)用某些功能不可用
報(bào)警Demo:【錯(cuò)誤】應(yīng)用A XXX功能異常,本服務(wù)數(shù)據(jù)、日志計(jì)算未發(fā)現(xiàn)明顯異常,下游應(yīng)用B探測(cè)出可疑異常日志{日志關(guān)鍵信息},下游應(yīng)用最近上線日期為【xxxx-xx-xx】,請(qǐng)及時(shí)排查。
數(shù)據(jù)分析
多系統(tǒng)之間的業(yè)務(wù)交互最終表現(xiàn)在數(shù)據(jù)流上,在具備了系統(tǒng)應(yīng)用間的聯(lián)動(dòng)能力以后,可以對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行核對(duì)或者分析轉(zhuǎn)化率
數(shù)據(jù)核對(duì)可以提供不同系統(tǒng)間數(shù)據(jù)一致性的校驗(yàn)
數(shù)據(jù)轉(zhuǎn)化可以看出同一筆數(shù)據(jù)在不同系統(tǒng)間的流動(dòng),可以引申出一些業(yè)務(wù)敏感數(shù)據(jù)的對(duì)比等
2.3 感知及展示
不論是監(jiān)控還是可觀測(cè)性,都需要通知和展示,這部分計(jì)劃結(jié)合最近在做的業(yè)務(wù)監(jiān)控大屏做展示,后續(xù)再提供一個(gè)通用的報(bào)警服務(wù),提供郵件、消息、語(yǔ)音的多通道報(bào)警能力。
-
測(cè)試
+關(guān)注
關(guān)注
8文章
5086瀏覽量
126313 -
監(jiān)測(cè)系統(tǒng)
+關(guān)注
關(guān)注
8文章
2653瀏覽量
81211 -
軟件
+關(guān)注
關(guān)注
69文章
4686瀏覽量
87070
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論