前言
微服務(wù)是一種架構(gòu)風(fēng)格,一個(gè)大型復(fù)雜軟件應(yīng)用通常由多個(gè)微服務(wù)組成。系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù)。
微服務(wù)之前很多單體應(yīng)用,其監(jiān)控復(fù)雜度較低,場(chǎng)景也比較單一。微服務(wù)下,由于業(yè)務(wù)邏輯散布在眾多進(jìn)程中(很多大型業(yè)務(wù),一個(gè)業(yè)務(wù)流程涉及的服務(wù)有幾十個(gè)),一旦業(yè)務(wù)出現(xiàn)問題,追查其源頭就好比大海撈針,這個(gè)時(shí)候就需要完善的監(jiān)控體系。
一個(gè)完善的監(jiān)控體系,其構(gòu)建周期比較漫長,而且隨著業(yè)務(wù)場(chǎng)景的變化,自身也是需要不斷迭代優(yōu)化的。本文僅從幾個(gè)監(jiān)控維度以及原子化場(chǎng)景談?wù)勅绾谓⒔y(tǒng)一的監(jiān)控?cái)?shù)據(jù)收集、展示系統(tǒng),希望能夠啟發(fā)大家繼續(xù)深入地思考監(jiān)控體系的建設(shè)。
微服務(wù)下的幾個(gè)監(jiān)控維度
微服務(wù)監(jiān)控與傳統(tǒng)應(yīng)用的監(jiān)控相比,最明顯的改變就是視角的改變,我們把監(jiān)控從機(jī)器視角轉(zhuǎn)換成以服務(wù)為中心的視角,在微服務(wù)的視角下,監(jiān)控可以從數(shù)據(jù)維度、資源維度和代碼維度進(jìn)行分層.
微服務(wù)架構(gòu)下的監(jiān)控系統(tǒng)設(shè)計(jì)(一)——指標(biāo)數(shù)據(jù)的采集展示
數(shù)據(jù)維度
當(dāng)前WEB化服務(wù)是主流,每一個(gè)WEB服務(wù)都有一個(gè)入口,不管是APP還是WEB網(wǎng)頁,入口負(fù)責(zé)跟用戶交互,并將用戶的信息發(fā)給后臺(tái),后臺(tái)一般都會(huì)有接入LB或者Gateway,負(fù)責(zé)負(fù)載均衡并將數(shù)據(jù)轉(zhuǎn)發(fā)給具體的應(yīng)用處理,最后由應(yīng)用處理之后寫入數(shù)據(jù)庫。
資源維度
現(xiàn)在很多服務(wù)部署在云端,涉及虛擬化技術(shù),虛擬主機(jī)運(yùn)行在物理服務(wù)器上,虛擬主機(jī)之間通過虛擬網(wǎng)絡(luò)相互連接。在資源層面的監(jiān)控,是不可缺少的一環(huán),我們不但需要采集虛擬主機(jī)的性能指標(biāo),同時(shí)還需要知道運(yùn)行虛擬主機(jī)的服務(wù)器上的CPU、內(nèi)存、磁盤IO等數(shù)據(jù),以及連接虛擬主機(jī)之間的虛擬網(wǎng)絡(luò)的帶寬負(fù)載等。
代碼維度
APM,也就是應(yīng)用性能分析,代碼側(cè)的監(jiān)控采集,是隨著微服務(wù)的興起而出現(xiàn)的。在微服務(wù)場(chǎng)景下,一個(gè)業(yè)務(wù)流程橫跨幾十個(gè)服務(wù)的場(chǎng)景,只有傳統(tǒng)的監(jiān)控?cái)?shù)據(jù),很難定位到問題的根源。
我們可以針對(duì)代碼的技術(shù)棧,開發(fā)出特定的采集框架,在性能損耗可以接受的范圍之內(nèi),采集函數(shù)之間的調(diào)用關(guān)系,服務(wù)之間的調(diào)用拓?fù)?,并測(cè)量函數(shù)或者服務(wù)的響應(yīng)時(shí)間,才能有針對(duì)性地優(yōu)化性能或者提前預(yù)判故障。
關(guān)鍵監(jiān)控指標(biāo)的場(chǎng)景描述
微服務(wù)監(jiān)控最大的特點(diǎn),用一句話概括:就是服務(wù)特別多,服務(wù)間的調(diào)用也非常復(fù)雜。當(dāng)系統(tǒng)出現(xiàn)問題時(shí),想要在上百個(gè)相關(guān)的、依賴錯(cuò)綜復(fù)雜的服務(wù)系統(tǒng)之中快速定位到出錯(cuò)的系統(tǒng),需要依靠關(guān)鍵的監(jiān)控指標(biāo)。我們?cè)谏鲜龅娜齻€(gè)維度之上,分析了每個(gè)維度下每個(gè)層級(jí)可能會(huì)產(chǎn)生的告警情況,總結(jié)了URL監(jiān)控、主機(jī)監(jiān)控、產(chǎn)品監(jiān)控等八個(gè)原子化監(jiān)控場(chǎng)景。
微服務(wù)架構(gòu)下的監(jiān)控系統(tǒng)設(shè)計(jì)(一)——指標(biāo)數(shù)據(jù)的采集展示
URL監(jiān)控:無論是APP還是WEB,本質(zhì)上都是通過URL發(fā)起后臺(tái)調(diào)用,可以通過MOCK調(diào)用API獲取響應(yīng)時(shí)間、響應(yīng)狀態(tài)碼等指標(biāo),展示監(jiān)測(cè)業(yè)務(wù)的整體健康狀況。
主機(jī)監(jiān)控:通過安裝代理采集主機(jī)上基本的監(jiān)控信息如CPU、內(nèi)存、IO等數(shù)據(jù),同時(shí)用戶可以通過配置文件打開其它開源應(yīng)用如Tomcat、Nginx等數(shù)據(jù)采集開關(guān)。
產(chǎn)品監(jiān)控:公有云將主機(jī)、網(wǎng)絡(luò)、存儲(chǔ)以及一些中間件以產(chǎn)品的形式提供給用戶使用,產(chǎn)品服務(wù)后臺(tái)上報(bào)各個(gè)產(chǎn)品相關(guān)指標(biāo)數(shù)據(jù),用來監(jiān)控各個(gè)產(chǎn)品資源的健康狀況。
組件監(jiān)控:一些開源組件,比如Tomcat、Nginx、Netty等監(jiān)控?cái)?shù)據(jù)的采集,可以通過主機(jī)上的代理加載相應(yīng)組件的監(jiān)控采集程序。
自定義監(jiān)控:服務(wù)實(shí)例收集業(yè)務(wù)相關(guān)數(shù)據(jù),定時(shí)調(diào)用API接口上報(bào)數(shù)據(jù),支持多個(gè)服務(wù)實(shí)例同時(shí)上報(bào)一個(gè)監(jiān)控項(xiàng),并且支持多維度查詢告警。
資源監(jiān)控:用戶以資源為維度上報(bào)自定義數(shù)據(jù),每個(gè)資源都有相同的幾個(gè)監(jiān)控項(xiàng),各個(gè)資源的監(jiān)控項(xiàng)之間相互獨(dú)立。
APM:根據(jù)各語言棧的不同,分別實(shí)現(xiàn)函數(shù)調(diào)用關(guān)系、服務(wù)之間調(diào)用拓?fù)涞恼故尽8鶕?jù)各個(gè)語言的不同,有的需要入侵代碼,以SDK嵌入的形式收集數(shù)據(jù),有的則與代碼解耦,通過元編程重載一些方法來實(shí)現(xiàn)數(shù)據(jù)采集。
事件監(jiān)控:針對(duì)公有云產(chǎn)品、業(yè)務(wù)邏輯中的不連續(xù)事件,比如云盤的不可用事件、SSD硬盤的Reset事件等,提供統(tǒng)一的存儲(chǔ)、分析、展示。
有了以上原子化場(chǎng)景的數(shù)據(jù)收集,我們就可以通過UI統(tǒng)一展示監(jiān)控?cái)?shù)據(jù),可以按照前文描述的三個(gè)維度,以用戶體驗(yàn)為核心,設(shè)計(jì)圖形化頁面。圖形化一般是以時(shí)間序列為橫軸,展示指標(biāo)隨時(shí)間變化,針對(duì)一些統(tǒng)計(jì)指標(biāo),也可以通過餅圖、柱狀圖等展示分析、對(duì)比結(jié)果。
本文主要闡述了監(jiān)控體系中數(shù)據(jù)的采集、展示。至于數(shù)據(jù)的存儲(chǔ)及告警流程,有興趣的同學(xué)可以繼續(xù)關(guān)注后續(xù)監(jiān)控相關(guān)文章。
作者:董磊
第三十四屆CIO班招生
北達(dá)軟EXIN網(wǎng)絡(luò)空間與IT安全基礎(chǔ)認(rèn)證培訓(xùn)
北達(dá)軟EXIN DevOps Professional認(rèn)證培訓(xùn)
責(zé)編:yangjun
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),請(qǐng)及時(shí)通知本站,予以刪除。