應(yīng)用監(jiān)控是整個監(jiān)控體系的重要組成部分,面對各個應(yīng)用系統(tǒng)之間的差異性和復(fù)雜性特點,如何全面有效的實施應(yīng)用監(jiān)控是應(yīng)用運維人員和監(jiān)控管理員共同面臨的難題。G行通過多年的實踐證明,應(yīng)用監(jiān)控標(biāo)準(zhǔn)化是解決復(fù)雜IT環(huán)境下應(yīng)用系統(tǒng)有效監(jiān)控的一柄利劍,也是實現(xiàn)監(jiān)控數(shù)字化和智能化的基礎(chǔ)。G行從監(jiān)控標(biāo)準(zhǔn)化方法論、監(jiān)控標(biāo)準(zhǔn)化模型、監(jiān)控對象模型、指標(biāo)定義及接入規(guī)范等多個層面進(jìn)行探索,有效促進(jìn)應(yīng)用監(jiān)控工作在組織層面的融合和打通,確保“三早”原則的落地執(zhí)行,保障了應(yīng)用系統(tǒng)平穩(wěn)運行。本文對G行應(yīng)用監(jiān)控標(biāo)準(zhǔn)化演進(jìn)之路進(jìn)行了回顧和介紹。
應(yīng)用監(jiān)控標(biāo)準(zhǔn)化的內(nèi)容和意義
1. 應(yīng)用系統(tǒng)的定義
應(yīng)用系統(tǒng)一般由計算機硬件系統(tǒng)、系統(tǒng)軟件、應(yīng)用軟件組成。硬件系統(tǒng)和操作系統(tǒng)、數(shù)據(jù)庫、中間件等軟件系統(tǒng)的標(biāo)準(zhǔn)化程度較高,具有相對通用的監(jiān)控指標(biāo)和監(jiān)控手段。應(yīng)用軟件基于通用的開發(fā)語言和開發(fā)框架,編寫應(yīng)用程序滿足不同的業(yè)務(wù)需求,具有差異性和復(fù)雜性,需要建立統(tǒng)一的監(jiān)控標(biāo)準(zhǔn)變不確定為確定,保障應(yīng)用系統(tǒng)業(yè)務(wù)連續(xù)性。因此應(yīng)用監(jiān)控標(biāo)準(zhǔn)化的管理對象主要是應(yīng)用軟件。
2.應(yīng)用監(jiān)控標(biāo)準(zhǔn)化內(nèi)容
標(biāo)準(zhǔn)化,實質(zhì)上就是為標(biāo)準(zhǔn)制定、發(fā)布和實施過程而進(jìn)行的一切活動。應(yīng)用監(jiān)控標(biāo)準(zhǔn)化重點是Metric監(jiān)控相關(guān)的指標(biāo)集、監(jiān)控對象、監(jiān)控工具等標(biāo)準(zhǔn)模型以及由此產(chǎn)生的閉環(huán)和量化管理活動。對于應(yīng)用監(jiān)控中可能涉及到的日志和Tracing規(guī)范,有單獨的技術(shù)標(biāo)準(zhǔn)進(jìn)行闡述,不包含在本次監(jiān)控標(biāo)準(zhǔn)化范圍內(nèi)。
3.應(yīng)用監(jiān)控標(biāo)準(zhǔn)化的意義
確保“三早”原則落地:通過部署標(biāo)準(zhǔn)化的監(jiān)控指標(biāo)體系,全面掌控應(yīng)用系統(tǒng)運行狀態(tài),對于生產(chǎn)故障的發(fā)現(xiàn),確保“監(jiān)控工具早于運維人員、科技部門早于業(yè)務(wù)部門、銀行早于客戶”的“三早”原則的有效落地。
提升監(jiān)控管理水平:沉淀和固化運維經(jīng)驗,將運維工作中積累的監(jiān)控手段歸納總結(jié)后進(jìn)行組織級推廣部署,從全局角度提升監(jiān)控管理水平。
組織內(nèi)監(jiān)控工作融合:通過監(jiān)控標(biāo)準(zhǔn)化中的指標(biāo)接入規(guī)范、指標(biāo)測試規(guī)范、應(yīng)用監(jiān)控策略部署規(guī)范以及生產(chǎn)事件跟蹤機制,將監(jiān)控工作前移至應(yīng)用開發(fā)和測試環(huán)節(jié),形成管理閉環(huán)。
傳統(tǒng)環(huán)境應(yīng)用監(jiān)控標(biāo)準(zhǔn)化
監(jiān)控系統(tǒng)建立之初一切都是從零開始,每個應(yīng)用系統(tǒng)都是單獨進(jìn)行對接,單獨梳理監(jiān)控指標(biāo)、監(jiān)控策略,部署監(jiān)控后再根據(jù)運行情況進(jìn)行調(diào)整。隨著監(jiān)控系統(tǒng)不斷完善,接入的應(yīng)用也越來越多,應(yīng)用類型五花八門,依賴人工經(jīng)驗單打獨斗的方式已經(jīng)捉襟見肘,具體表現(xiàn)在:
指標(biāo)不明確:每個類型的應(yīng)用應(yīng)該有什么樣的監(jiān)控指標(biāo)不明確。
策略不明確:每個指標(biāo)需要如何設(shè)置閾值、報警級別不明確。
接口不明確:指標(biāo)需要采用哪種接口、如何接入監(jiān)控系統(tǒng)不明確。
現(xiàn)狀不明確:應(yīng)用的監(jiān)控策略實際應(yīng)用情況如何,這些問題在過去都要依賴手工查詢核實,很難快速回答。
為了全面提升應(yīng)用監(jiān)控覆蓋率,規(guī)范應(yīng)用監(jiān)控工藝,提升監(jiān)控實施效率,迫切需要進(jìn)行應(yīng)用監(jiān)控標(biāo)準(zhǔn)化。
1.應(yīng)用監(jiān)控標(biāo)準(zhǔn)化模型:

圖1監(jiān)控標(biāo)準(zhǔn)化模型
監(jiān)控對象:從監(jiān)控角度需要關(guān)注其狀態(tài)和性能指標(biāo)的應(yīng)用對象。
監(jiān)控指標(biāo):用來識別監(jiān)控對象狀態(tài)的相關(guān)數(shù)據(jù)。
監(jiān)控策略:用來度量和判斷監(jiān)控指標(biāo)優(yōu)劣的標(biāo)準(zhǔn)。
監(jiān)控工具:實現(xiàn)從應(yīng)用監(jiān)控對象上采集監(jiān)控指標(biāo)所采用的技術(shù)手段,是監(jiān)控策略運行的載體。
監(jiān)控規(guī)則:監(jiān)控團隊參考各專業(yè)團隊日常運維經(jīng)驗結(jié)合業(yè)內(nèi)最佳實踐總結(jié)的監(jiān)控對象和監(jiān)控策略的對應(yīng)規(guī)則,用于指導(dǎo)監(jiān)控策略的部署和對策略運行情況進(jìn)行事后審計。
2.應(yīng)用監(jiān)控對象模型
監(jiān)控對象標(biāo)準(zhǔn)化:除了常規(guī)的操作系統(tǒng)、數(shù)據(jù)庫、中間件外,以監(jiān)控視角對一個應(yīng)用服務(wù)的組件進(jìn)行拆分和建模。

圖2應(yīng)用監(jiān)控對象模型圖
3. 主要應(yīng)用監(jiān)控組件和指標(biāo)
基礎(chǔ)環(huán)境層
網(wǎng)絡(luò)
TCP長連接監(jiān)控:該指標(biāo)主要用于對Established狀態(tài)的TCP長連接進(jìn)行監(jiān)控。一般通過固定端口號作為篩選條件統(tǒng)計連接數(shù)量,同時可對該連接的緩沖區(qū)隊列深度進(jìn)行監(jiān)控,以此發(fā)現(xiàn)網(wǎng)絡(luò)連接中斷或應(yīng)用處理瓶頸的異常。
文件
產(chǎn)生異常文件:該指標(biāo)主要用于對應(yīng)用進(jìn)程是否產(chǎn)生錯誤文件或未處理文件進(jìn)行監(jiān)控。C語言應(yīng)用常見錯誤文件為bin目錄下產(chǎn)生coredump,或應(yīng)用程序自定義生成的.err文件。此外對于應(yīng)用目錄下超時未處理的文件,也可視同為發(fā)現(xiàn)異常文件而需要監(jiān)控和報警。
缺失關(guān)鍵文件:該指標(biāo)主要用于對應(yīng)用目錄下的數(shù)據(jù)文件存在性進(jìn)行監(jiān)控,通常結(jié)合時間段條件進(jìn)行綜合判斷,可提前發(fā)現(xiàn)數(shù)據(jù)文件未生成、未傳輸、文件名不符等異常現(xiàn)象。
內(nèi)存
GC次數(shù)/分鐘:該指標(biāo)用于對Java虛擬機每分鐘的FullGC次數(shù)進(jìn)行監(jiān)控,用于發(fā)現(xiàn)Java虛擬機堆內(nèi)存不足的問題。相比于對Heap空間使用率的監(jiān)控,通過對持續(xù)的、多次FullGC更加能夠準(zhǔn)確的發(fā)現(xiàn)應(yīng)用程序運行中潛在的內(nèi)存問題。
直接內(nèi)存使用率:該指標(biāo)用于對Java直接內(nèi)存(堆外內(nèi)存)的使用率進(jìn)行監(jiān)控,用于發(fā)現(xiàn)Java直接內(nèi)存空間使用的容量問題。?
應(yīng)用組件層
●API調(diào)用
API調(diào)用異常:該指標(biāo)用于對應(yīng)用程序調(diào)用外部API接口存在的錯誤和超時進(jìn)行監(jiān)控。常見的通用外部接口可能包括加密機API、RedisAPI、MQAPI等,通過對調(diào)用接口的系統(tǒng)級錯誤信息進(jìn)行實時監(jiān)控,能夠更早、更明確的提示故障根因。
●隊列
隊列深度:該指標(biāo)用于對應(yīng)用程序內(nèi)部自定義隊列的深度進(jìn)行監(jiān)控。隊列深度的單位可能是隊列內(nèi)消息數(shù)量、隊列內(nèi)超時待處理消息的數(shù)量等,用于發(fā)現(xiàn)應(yīng)用程序可能存在的性能瓶頸。
功能服務(wù)層
●定時任務(wù)
批量任務(wù)失敗/批量任務(wù)超時:該指標(biāo)用于對批量任務(wù)的運行狀態(tài)/運行時間進(jìn)行監(jiān)控。尤其對關(guān)鍵批量任務(wù)(影響系統(tǒng)開門、客戶服務(wù)、監(jiān)管報送)設(shè)定高報警級別,確保及時通報和處理。
●應(yīng)用功能
系統(tǒng)換日狀態(tài):該指標(biāo)用于對各交易類系統(tǒng)的賬務(wù)日期更換狀態(tài)進(jìn)行監(jiān)控。
秘鑰交換狀態(tài):該指標(biāo)用于對聯(lián)機交易類系統(tǒng)和加密平臺之間秘鑰交換的結(jié)果進(jìn)行監(jiān)控。
應(yīng)用健康檢查:該指標(biāo)用于對應(yīng)用服務(wù)的存活狀態(tài)進(jìn)行外部探測檢查,用于及時發(fā)現(xiàn)服務(wù)夯死的情況,檢查方式通常為通過監(jiān)控工具發(fā)起http探測或模擬交易探測。
●業(yè)務(wù)服務(wù)
交易成功率/響應(yīng)率/交易量/響應(yīng)時間:此類指標(biāo)為聯(lián)機交易類應(yīng)用系統(tǒng)的通用指標(biāo),通過從容量、延遲、錯誤3個維度度量應(yīng)用服務(wù)健康狀態(tài)。需要關(guān)注的是可細(xì)分為多個維度,如全局指標(biāo)/單交易碼、渠道、商戶、系統(tǒng)返回碼/業(yè)務(wù)返回碼等,通過維度+指標(biāo)組合分析發(fā)現(xiàn)和定位應(yīng)用系統(tǒng)交易的異常。
4.監(jiān)控工具標(biāo)準(zhǔn)化
監(jiān)控工具的標(biāo)準(zhǔn)化,核心思想是根據(jù)各類工具的特性合理運用工具,充分發(fā)揮工具特長。根據(jù)監(jiān)控需求,監(jiān)控工具的選取因素包括:有代理/無代理采集、監(jiān)控主動采集/監(jiān)控被動接收、帶內(nèi)采集/帶外采集等。
自定義監(jiān)控指標(biāo):具有周期性和靈活性的特點,適合使用有代理、主動采集方式,如Zabbix、Prometheus等。
關(guān)鍵通知消息:具有實時和精準(zhǔn)的特點,適合使用應(yīng)用主動推送、監(jiān)控被動接收的采集方式,如syslog、trap、webhook等。
交易數(shù)據(jù)指標(biāo):具有數(shù)據(jù)量大、數(shù)據(jù)原始程度高的特點,適合采用旁路/帶外方式將原始數(shù)據(jù)進(jìn)行采集后送入專用的監(jiān)控工具進(jìn)行分析和處理,減少采集和分析對原有系統(tǒng)的影響。適用的工具包括BPC工具、CDC類工具(變更數(shù)據(jù)捕獲)等。
5.監(jiān)控策略標(biāo)準(zhǔn)化
監(jiān)控策略標(biāo)準(zhǔn)化的重要內(nèi)容是報警級別。G行從兩個維度來定義報警級別:
按照管理員視角來定義的級別:根據(jù)技術(shù)人員是否需要立即展開處置動作來定級,1級表示需技術(shù)人員立即處置的報警,2級表示需進(jìn)一步判斷分析的報警,3級表示暫無需處理的報警。
按照業(yè)務(wù)人員/管理層的視角來定義的級別:根據(jù)業(yè)務(wù)影響的大小來定義報警級別,從高到低分別為重大影響、較大影響、一般影響、輕微影響、潛在影響和無影響。
按照上述規(guī)則配置應(yīng)用監(jiān)控報警策略,當(dāng)報警發(fā)生時分別從兩個維度進(jìn)行展示、通報和升級等后續(xù)處理,滿足技術(shù)人員和管理層的差異化運維需求。
6.智能運維技術(shù)的應(yīng)用
AIOps技術(shù)的推廣使用,為應(yīng)用監(jiān)控標(biāo)準(zhǔn)能力帶來了以下提升:
動態(tài)閾值豐富了監(jiān)控策略的管理模式:基于大數(shù)據(jù)、實時計算和無監(jiān)督算法的智能運維技術(shù),對于各項運行指標(biāo)的歷史數(shù)據(jù)生成預(yù)測基線,實時計算生產(chǎn)運行數(shù)據(jù)的偏差程度,及時發(fā)現(xiàn)運行指標(biāo)的異常情況。在原有的基于固定閾值監(jiān)控策略模式基礎(chǔ)上,動態(tài)閾值豐富了監(jiān)控標(biāo)準(zhǔn)化策略,成為應(yīng)用系統(tǒng)交易監(jiān)控必須部署的標(biāo)準(zhǔn)監(jiān)控策略。
多維分析技術(shù)提升故障根因定位能力:基于交易碼、返回碼、渠道碼、商戶碼以及服務(wù)處理節(jié)點信息等多維度的交易分析,在應(yīng)用系統(tǒng)聯(lián)機交易關(guān)鍵指標(biāo)發(fā)生異常時,能夠快速推算出導(dǎo)致異常的組合因子,便于科技人員迅速定位故障原因,同時通過支持黑白名單機制預(yù)先固化運維經(jīng)驗,提升故障告警準(zhǔn)確性。
分布式應(yīng)用監(jiān)控標(biāo)準(zhǔn)化
隨著容器技術(shù)、微服務(wù)以及分布式應(yīng)用的興起和部署,G行原有的面向傳統(tǒng)環(huán)境的應(yīng)用監(jiān)控面臨著巨大挑戰(zhàn),包括大量開源軟件的使用、應(yīng)用彈性擴縮容常態(tài)化、CI/CD帶來的開發(fā)投產(chǎn)模式的變更等。G行在傳統(tǒng)環(huán)境監(jiān)控標(biāo)準(zhǔn)化的基礎(chǔ)上進(jìn)一步優(yōu)化了標(biāo)準(zhǔn)化工作模型,支持分布式應(yīng)用的監(jiān)控管理。
1.監(jiān)控標(biāo)準(zhǔn)化工作模型

圖3監(jiān)控標(biāo)準(zhǔn)化方法模型圖
2.分布式監(jiān)控指標(biāo)參考
面對分布式環(huán)境下大量開源產(chǎn)品/組件的使用,監(jiān)控標(biāo)準(zhǔn)化的牛鼻子是監(jiān)控指標(biāo)標(biāo)準(zhǔn)化。
在監(jiān)控指標(biāo)選取方面,G行參考Google提出了黃金指標(biāo)概念,具體內(nèi)容如下圖所示:

圖4黃金指標(biāo)模型圖
3.分布式監(jiān)控指標(biāo)制定原則
分層分類:監(jiān)控指標(biāo)進(jìn)行分層、分類,由專業(yè)團隊和監(jiān)控團隊合力豐富監(jiān)控標(biāo)準(zhǔn)。
標(biāo)準(zhǔn)統(tǒng)一:無論傳統(tǒng)平臺還是容器云平臺,對于同一類對象的監(jiān)控標(biāo)準(zhǔn)要統(tǒng)一,確保指標(biāo)全覆蓋。
同類對標(biāo):對于相同類型的監(jiān)控對象,需對標(biāo)原有相似類型的監(jiān)控對象。
敏捷迭代:通過主動分析和監(jiān)控未達(dá)事件分析機制,持續(xù)補充和完善原有監(jiān)控規(guī)范。
4.分布式應(yīng)用監(jiān)控模型

圖5分布式監(jiān)控模型圖
在傳統(tǒng)的應(yīng)用服務(wù)監(jiān)控模型基礎(chǔ)上,增加了微服務(wù)組件,如注冊中心、配置中心、API網(wǎng)關(guān)等,增加了分布式應(yīng)用組件,如分布式緩存、分布式批量、分布式消息、分布式數(shù)據(jù)庫的監(jiān)控標(biāo)準(zhǔn)化。
5.分布式指標(biāo)接入
通過監(jiān)控標(biāo)準(zhǔn)化中的指標(biāo)接入規(guī)范、指標(biāo)測試規(guī)范、應(yīng)用監(jiān)控策略部署規(guī)范以及生產(chǎn)事件跟蹤機制,將監(jiān)控工作前移至應(yīng)用開發(fā)和測試環(huán)節(jié),形成管理閉環(huán)。
監(jiān)控指標(biāo)的接口格式統(tǒng)一采用Prometheus采集規(guī)范,即應(yīng)用程序通過http協(xié)議主動暴露數(shù)據(jù),監(jiān)控工具采用pull模型定期拉取監(jiān)控數(shù)據(jù)。接口格式為:
<指標(biāo)名稱>{<標(biāo)簽名稱>=<標(biāo)簽值>,...}數(shù)據(jù)
指標(biāo)名稱:反映了被監(jiān)控樣本的含義。
標(biāo)簽:大括號中的標(biāo)簽反映了當(dāng)前樣本的特征維度,用于對樣本數(shù)據(jù)進(jìn)行過濾,聚合等。
數(shù)據(jù):采集到的具體值。
應(yīng)用指標(biāo)暴露方式主要分為以下兩種:
基于G行通用研發(fā)平臺開發(fā)的應(yīng)用程序:平臺已內(nèi)置了監(jiān)控SDK包,默認(rèn)支持暴露應(yīng)用或SpringBoot框架,按照要求進(jìn)行配置即可暴露監(jiān)控指標(biāo)。
非G行通用研發(fā)平臺開發(fā)的應(yīng)用程序:需要應(yīng)用程序基于Prometheus的clientsdk或SpringBootActuator開發(fā)監(jiān)控接口,按照監(jiān)控標(biāo)準(zhǔn)暴露應(yīng)用監(jiān)控指標(biāo)。
6.基于標(biāo)簽的監(jiān)控自動化部署機制
針對每類監(jiān)控對象我們都設(shè)計了監(jiān)控標(biāo)簽,監(jiān)控標(biāo)簽與一組標(biāo)準(zhǔn)監(jiān)控指標(biāo)和標(biāo)準(zhǔn)監(jiān)控策略對應(yīng),我們稱之為標(biāo)準(zhǔn)化監(jiān)控規(guī)則。監(jiān)控標(biāo)簽主要用于以下三個場景:

圖6監(jiān)控標(biāo)簽應(yīng)用場景
監(jiān)控標(biāo)簽的工作機制如下:
通過指定標(biāo)簽查詢指定數(shù)據(jù)
通過標(biāo)簽實現(xiàn)豐富的聚合和查詢
監(jiān)視具有特定服務(wù)發(fā)現(xiàn)注解的監(jiān)控目標(biāo)
向目標(biāo)抓取請求添加HTTP查詢參數(shù)
僅存儲從指定目標(biāo)中提取樣本的子集
將抓取序列的兩個標(biāo)簽值合并為一個標(biāo)簽
平臺已有的應(yīng)用類型新接入時只需要使用制品庫提供的帶監(jiān)控基礎(chǔ)鏡像生成應(yīng)用鏡像,同時在容器云平臺通過圖形化方式生成帶有監(jiān)控標(biāo)簽的Service.yaml文件,后續(xù)基于該yaml文件的應(yīng)用發(fā)布投產(chǎn)后,監(jiān)控系統(tǒng)采集到的數(shù)據(jù)同步打上了監(jiān)控標(biāo)簽,自動匹配對應(yīng)的監(jiān)控策略,實現(xiàn)了全自動監(jiān)控對象發(fā)現(xiàn)和監(jiān)控策略對接,無需人工干預(yù),確保監(jiān)控標(biāo)準(zhǔn)化全覆蓋。
7.量化監(jiān)控評價
通常監(jiān)控系統(tǒng)運行效果評價的指標(biāo)是監(jiān)控發(fā)現(xiàn)率、報警壓縮率、報警根因定位率等,這些指標(biāo)都偏向于通過事后的量化統(tǒng)計體現(xiàn)監(jiān)控系統(tǒng)的效能。除了這些指標(biāo)外,G行還定義了監(jiān)控覆蓋率和監(jiān)控標(biāo)準(zhǔn)化率兩個指標(biāo)。
監(jiān)控標(biāo)準(zhǔn)化率的計算公式為:
監(jiān)控標(biāo)準(zhǔn)化率=監(jiān)控檔案/監(jiān)控標(biāo)準(zhǔn)*100%
監(jiān)控檔案=∑監(jiān)控對象*已部署標(biāo)準(zhǔn)監(jiān)控策略
監(jiān)控標(biāo)準(zhǔn)=∑監(jiān)控對象*應(yīng)部署標(biāo)準(zhǔn)監(jiān)控策略
按照上述公式對應(yīng)用系統(tǒng)的所有組件進(jìn)行監(jiān)控標(biāo)準(zhǔn)化的度量,可獲得每個應(yīng)用系統(tǒng)的監(jiān)控標(biāo)準(zhǔn)化率。

圖7應(yīng)用監(jiān)控量化評價效果圖
通過上述排名機制,可以獲知各個應(yīng)用系統(tǒng)的監(jiān)控策略和基線的偏差情況,對于缺失的監(jiān)控項需及時進(jìn)行補充部署監(jiān)控策略,對于非標(biāo)準(zhǔn)的監(jiān)控項(如個性化閾值、報警級別降低等情況)需進(jìn)行應(yīng)用系統(tǒng)的整改以滿足標(biāo)準(zhǔn)化要求。
目前G行已完成對全局類系統(tǒng)的應(yīng)用監(jiān)控標(biāo)準(zhǔn)化評分,后續(xù)還將持續(xù)優(yōu)化和推廣量化反饋機制,持續(xù)提升監(jiān)控效能。
小結(jié)與展望
通過多年探索與實踐,G行逐步建立了應(yīng)用監(jiān)控標(biāo)準(zhǔn)化的實施方法模型、應(yīng)用服務(wù)模型、監(jiān)控指標(biāo)體系以及閉環(huán)量化管理機制,逐步完善了傳統(tǒng)應(yīng)用與分布式應(yīng)用的監(jiān)控手段,提升了監(jiān)控系統(tǒng)整體效能。面對日益復(fù)雜的應(yīng)用系統(tǒng)環(huán)境,G行后續(xù)將持續(xù)進(jìn)行監(jiān)控系統(tǒng)優(yōu)化,通過持續(xù)豐富應(yīng)用監(jiān)控指標(biāo)集、引入非侵入監(jiān)控數(shù)據(jù)采集方式、支持自助式監(jiān)控配置管理模式等工作,提升應(yīng)用監(jiān)控能力。