文章來源于公眾號(hào)愛奇藝技術(shù)產(chǎn)品團(tuán)隊(duì) 咱旱,作者隨刻信息流團(tuán)隊(duì)
背景&初探
經(jīng)過一年多的野蠻生長(zhǎng)更鲁,信息流團(tuán)隊(duì)微服務(wù)發(fā)展快速搬素,人均負(fù)責(zé)5個(gè)微服務(wù)以上呵晨,為了全面了解每個(gè)微服務(wù)運(yùn)行情況,第一時(shí)間感知微服務(wù)異常熬尺,快速定位線上問題摸屠,提高運(yùn)維效率,微服務(wù)建設(shè)初期我們嘗試了多種監(jiān)控方案粱哼。
這個(gè)階段季二,我們對(duì)微服務(wù)監(jiān)控缺少系統(tǒng)的理論認(rèn)知和實(shí)踐經(jīng)驗(yàn),所以更多是對(duì)已有的監(jiān)控基礎(chǔ)設(shè)施和框架低成本的整合和適配。下面分別從日志監(jiān)控胯舷,Hystrix監(jiān)控刻蚯,Actuator監(jiān)控,撥測(cè)監(jiān)控5個(gè)方面介紹桑嘶。
日志監(jiān)控
基于日志的監(jiān)控方案炊汹,原理如下圖,業(yè)界技術(shù)方案成熟(例ELK)逃顶,公司也提供了通用解決方案(Venus)讨便,容易落地。缺點(diǎn)是以政,日志監(jiān)控鏈路較長(zhǎng)霸褒,延遲時(shí)間大,報(bào)警可能不夠及時(shí)盈蛮。
Hystrix監(jiān)控
很長(zhǎng)一段時(shí)間Hystrix是服務(wù)熔斷降級(jí)監(jiān)控的代名詞废菱,Spring Cloud應(yīng)用中使用hystrix極致易用,從低成本埋點(diǎn)眉反,到配置動(dòng)態(tài)調(diào)整昙啄,再到原生的可視化Dashboard穆役,使用成本都很低寸五。缺點(diǎn)是,指標(biāo)數(shù)據(jù)原生沒有持久化耿币,二次開發(fā)有一定成本梳杏。
下圖描述基于Hystrix監(jiān)控的方案。
Actuator 監(jiān)控
Actuator端點(diǎn)是Spring Boot應(yīng)用開發(fā)者的最大福利之一淹接,可以零成本了解單實(shí)例運(yùn)行情況十性。缺點(diǎn)是,同服務(wù)多實(shí)例指標(biāo)聚合塑悼,指標(biāo)持久化劲适,指標(biāo)時(shí)序可視化,都需要二次開發(fā)厢蒜。下圖描述Actuator端點(diǎn)監(jiān)控的方案霞势。
撥測(cè)監(jiān)控
對(duì)于面向用戶的服務(wù),用戶所處網(wǎng)絡(luò)斑鸦,地域差異性很大愕贡,應(yīng)用本身可用不代表用戶可以正常使用服務(wù),這就需要從用戶角度巷屿,對(duì)服務(wù)可用性進(jìn)行定時(shí)撥測(cè)固以。
下圖描述撥測(cè)監(jiān)控的方案,主要包括微服務(wù)實(shí)例自發(fā)的健康檢查和各撥測(cè)點(diǎn)定時(shí)撥測(cè)。
鏈路監(jiān)控
鏈路監(jiān)控既可用于調(diào)用鏈路分析憨琳,快速定位具體問題诫钓,又可用于梳理服務(wù)拓?fù)浣Y(jié)構(gòu)和依賴合理性,是微服務(wù)監(jiān)控必不可少的一環(huán)篙螟。
我們使用公司服務(wù)云提供的日志收集組件Venus(如前所述)和鏈路跟蹤組件Rover(基于Skywalking+Brave)實(shí)現(xiàn)該功能尖坤。實(shí)現(xiàn)方案如下圖所示。
其中闲擦,接入固定成本表示為引入相應(yīng)監(jiān)控而產(chǎn)生的一次性固定投入慢味,包括學(xué)習(xí)調(diào)研,二次開發(fā)墅冷,集成適配等成本纯路。接入邊際成本表示每新增一個(gè)微服務(wù)或一個(gè)監(jiān)控指標(biāo),新產(chǎn)生的開發(fā)配置成本寞忿。幾種監(jiān)控方案對(duì)比和適用場(chǎng)景如下表所示驰唬。
| 監(jiān)控類型 |
接入固
定成本
|
接入邊
際成本
| 時(shí)效性 |
持久化
可追溯
| 適用場(chǎng)景 |
| 日志監(jiān)控 |
極低,
基于現(xiàn)有日志收集系統(tǒng)
| 中腔彰,日志埋點(diǎn)叫编、解析有一定成本 | 秒級(jí),鏈路長(zhǎng)霹抛,有時(shí)延遲較大 | 日志持久化搓逾,可查看歷史 | 時(shí)效性要求不高的監(jiān)控;具體問題排查 |
|
Hystrix
監(jiān)控
|
低杯拐,
需要部署Hystrix Dashboard
| 低,簡(jiǎn)單配置 | 秒級(jí) | 需二次開發(fā) | 依賴接口實(shí)時(shí)監(jiān)控端逼;熔斷降級(jí) |
|
Actuator
監(jiān)控
| 低朗兵,需要部署Spring Boot Admin | 無,應(yīng)用內(nèi)置 | 秒級(jí) | 需二次開發(fā) | 單實(shí)例指標(biāo)查看 |
| 撥測(cè)監(jiān)控 | 無顶滩,基于公司云撥測(cè)服務(wù) | 低余掖,簡(jiǎn)單配置 | 分鐘級(jí),取決于撥測(cè)間隔 | 有報(bào)警歷史 | 面向用戶服務(wù)可用性定時(shí)撥測(cè) |
| 鏈路監(jiān)控 | 中礁鲁,需要適配各種中間件 | 低盐欺,簡(jiǎn)單配置 | 秒級(jí),依賴日志流 | 可以 | 跨系統(tǒng)調(diào)用鏈路分析 |
演進(jìn)&實(shí)踐
如上所述救氯,我們?cè)谖⒎?wù)監(jiān)控建設(shè)初期嘗試了多種監(jiān)控方案找田,實(shí)現(xiàn)了不同場(chǎng)景下的監(jiān)控需求,也遇到了新的問題着憨。概括起來墩衙,有以下幾個(gè):
? 缺少對(duì)監(jiān)控項(xiàng)的統(tǒng)一認(rèn)知和定義
? 重復(fù)性埋點(diǎn)配置工作,監(jiān)控成本高
? 各種監(jiān)控方案簡(jiǎn)單組合,可視化分散漆改,報(bào)警不統(tǒng)一
? 日志監(jiān)控心铃,報(bào)警時(shí)效性無保障
比如,每新增一個(gè)監(jiān)控指標(biāo)挫剑,需要把接入去扣,埋點(diǎn),可視化樊破,報(bào)警愉棱,從頭來一遍,隨著微服務(wù)和指標(biāo)增加哲戚,這種重復(fù)性工作嚴(yán)重制約了監(jiān)控體系的推廣落地奔滑。特別是metrics監(jiān)控,指標(biāo)繁雜顺少,維度多變朋其,應(yīng)用廣泛。
為此脆炎,建設(shè)一套監(jiān)控模型統(tǒng)一梅猿,接入成本低,可視化集中管理秒裕,報(bào)警時(shí)效性高袱蚓,監(jiān)控指標(biāo)全面的微服務(wù)監(jiān)控體系勢(shì)在必行。下面著重介紹信息流監(jiān)控系統(tǒng)針對(duì)metrics監(jiān)控的實(shí)踐簇爆。
信息流Metrics監(jiān)控在Prometheus基礎(chǔ)上癞松,以構(gòu)建簡(jiǎn)單易用的監(jiān)控系統(tǒng)為目標(biāo)爽撒,對(duì)Spring Cloud框架進(jìn)行適配整合和定制開發(fā)入蛆。整體結(jié)構(gòu)如上圖,我們主要做了以下工作硕勿。
監(jiān)控模型
監(jiān)控指標(biāo)是監(jiān)控系統(tǒng)的基本對(duì)象哨毁,監(jiān)控哪些指標(biāo),如何定義描述這些指標(biāo)源武,是首要解決的問題扼褪。我們通過引入指標(biāo)-維度-數(shù)值多維度數(shù)據(jù)模型,對(duì)常用監(jiān)控指標(biāo)和維度進(jìn)行梳理和定義粱栖,形成對(duì)監(jiān)控對(duì)象的統(tǒng)一描述和共識(shí)话浇,為后續(xù)實(shí)現(xiàn)維度靈活聚合、定義統(tǒng)一的可視化模板和報(bào)警模板奠定基礎(chǔ)闹究。通用指標(biāo)定義:
| 指標(biāo) | 說明 |
| QPS | 系統(tǒng)每秒處理業(yè)務(wù)請(qǐng)求量幔崖,反應(yīng)系統(tǒng)的容量 |
| TP指標(biāo) | TP99、TP95、MEAN等赏寇,反應(yīng)的是系統(tǒng)的時(shí)效性 |
| 錯(cuò)誤量 | http錯(cuò)誤響應(yīng)碼的次數(shù)吉嫩,方法調(diào)用異常次數(shù)等,反應(yīng)系統(tǒng)的錯(cuò)誤面 |
| 資源使用率 | CPU利用率嗅定、內(nèi)存利用率自娩、磁盤利用率等,反應(yīng)系統(tǒng)資源利用面 |
通用維度定義:
| 維度 | 說明 |
| service_name | 服務(wù)名渠退,例:Order |
| dc | 機(jī)房,例:bjdx |
| instance | 服務(wù)實(shí)例忙迁,例:1.1.1.1:2222 |
| url | 接口API,例:/order/list |
| method | 方法簽名 |
| status | http 響應(yīng)碼 |
定制擴(kuò)展
自動(dòng)接入&埋點(diǎn)
前期我們嘗試了多種監(jiān)控方案碎乃,發(fā)現(xiàn)能夠順利推廣落地的动漾,都有一個(gè)共同點(diǎn),就是服務(wù)接入監(jiān)控的成本很低荠锭。最好是不要求應(yīng)用做任何改動(dòng)旱眯,就可以自動(dòng)接入,享受監(jiān)控系統(tǒng)帶來的便利证九。為此我們做了以下工作:
? 每個(gè)服務(wù)引入sdk自動(dòng)完成通用指標(biāo)(Http請(qǐng)求删豺,JVM指標(biāo)等)采集,并暴露指標(biāo)拉取端點(diǎn)
? 每個(gè)服務(wù)自動(dòng)注冊(cè)到Eureka注冊(cè)中心
? Eureka增加Adapter愧怜,提供監(jiān)控系統(tǒng)可識(shí)別的接口方法
? 監(jiān)控系統(tǒng)從注冊(cè)中心呀页,自動(dòng)發(fā)現(xiàn)要監(jiān)控的服務(wù)實(shí)例列表
? 監(jiān)控系統(tǒng)定期從服務(wù)指標(biāo)端點(diǎn)拉取監(jiān)控?cái)?shù)據(jù)
聲明式方法監(jiān)控
很多情況下,需要對(duì)某些業(yè)務(wù)方法耗時(shí)進(jìn)行監(jiān)控拥坛,傳統(tǒng)的埋點(diǎn)方式是在方法入口和出口添加監(jiān)控代碼蓬蝶,業(yè)務(wù)代碼侵入高,開發(fā)成本高猜惋。
PUSH模式擴(kuò)展
如前所述丸氛,Prometheus是用PULL模式獲取應(yīng)用埋點(diǎn)數(shù)據(jù),但是有的場(chǎng)景下PULL模式并不適用(比如短生命周期的任務(wù))著摔,因此我們基于Prometheus提供的Pushgateway組件缓窜,實(shí)現(xiàn)PUSH模式獲取監(jiān)控埋點(diǎn)數(shù)據(jù)。
一種應(yīng)用場(chǎng)景是谍咆,實(shí)時(shí)收集各個(gè)服務(wù)日志流中的異常信息禾锤。我們監(jiān)聽日志采集的Kafka消息,F(xiàn)link實(shí)時(shí)解析出服務(wù)異常名稱摹察,將各個(gè)服務(wù)產(chǎn)生的異常實(shí)時(shí)推送到監(jiān)控系統(tǒng)恩掷,并在Grafana上集中展示」┖浚基于Pushgateway的異常監(jiān)控方案及效果圖如下黄娘。
集中可視化
不同的監(jiān)控系統(tǒng)旦签,往往會(huì)提供不同的可視化方案。分散的可視化寸宏,不利于監(jiān)控?cái)?shù)據(jù)的集中展示和全局問題分析宁炫。我們使用Grafana實(shí)現(xiàn)所有微服務(wù),所有指標(biāo)的集中可視化氮凝。
每個(gè)微服務(wù)使用統(tǒng)一的監(jiān)控模板羔巢,集中展示各服務(wù)入口流量、內(nèi)部方法罩阵、JVM等相關(guān)指標(biāo)竿秆。Dashboard模板主要包含以下模塊:
? 維度篩選模塊
? JVM和系統(tǒng)指標(biāo)模塊
? 入口流量機(jī)房分布&狀態(tài)碼&QPS&響應(yīng)延時(shí)模塊
? 方法監(jiān)控指標(biāo)模塊
統(tǒng)一報(bào)警
基于前邊定義的通用指標(biāo)和維度,對(duì)所有指標(biāo)配置默認(rèn)的報(bào)警規(guī)則稿壁,同時(shí)支持自定義報(bào)警規(guī)則和閾值幽钢。基于Grafana Web hook將報(bào)警通知發(fā)送給Alert Manager傅是,Alert Manager對(duì)報(bào)警進(jìn)行相同合并匪燕、重復(fù)過濾、并格式化為統(tǒng)一報(bào)警模板后喧笔,投遞到愛奇藝統(tǒng)一報(bào)警平臺(tái)帽驯,業(yè)務(wù)owner通過統(tǒng)一報(bào)警平臺(tái)完成報(bào)警訂閱。統(tǒng)一報(bào)警方案及報(bào)警樣例如下圖书闸。
以上所述尼变,愛奇藝信息流監(jiān)控整體方案總結(jié)如下。
自下至上包括4層:
監(jiān)控對(duì)象既包括常駐進(jìn)程微服務(wù)浆劲,也包括短生命周期的非常駐進(jìn)程嫌术。
指標(biāo)獲取方式既可以基于Prometheus實(shí)時(shí)拉取,也可以基于Venus日志收集牌借,前者用于指標(biāo)實(shí)時(shí)獲取度气,保證監(jiān)控報(bào)警時(shí)效性,后者記錄詳細(xì)日志走哺,用于具體問題排查和鏈路分析蚯嫌。
監(jiān)控維度從4個(gè)維度監(jiān)控應(yīng)用:
Metrics監(jiān)控宏觀上檢測(cè)系統(tǒng)QPS,響應(yīng)耗時(shí)丙躏,錯(cuò)誤率和資源利用率;
撥測(cè)監(jiān)控從用戶角度監(jiān)控服務(wù)可用性束凑;
鏈路監(jiān)控提供單個(gè)請(qǐng)求完整生命周期的跟蹤路徑晒旅,專門應(yīng)對(duì)微服務(wù)架構(gòu)帶來的分布式調(diào)用復(fù)雜性;
日志查詢提供應(yīng)用監(jiān)控最精細(xì)化的信息汪诉,用于具體問題排障废恋。
- 集中管理谈秫,集中可視化和統(tǒng)一報(bào)警管理,在最上面一層鱼鼓,便于排查問題時(shí)全面快速獲取應(yīng)用所有監(jiān)控報(bào)警信息拟烫。另外,微服務(wù)監(jiān)控的統(tǒng)一認(rèn)知和必要的流程規(guī)范迄本,貫穿監(jiān)控系統(tǒng)落地始終硕淑。
監(jiān)控系統(tǒng)落地1年多,新增服務(wù)基本實(shí)現(xiàn)零成本100%接入自動(dòng)埋點(diǎn)嘉赎、集中可視化和統(tǒng)一報(bào)警置媳,業(yè)務(wù)owner不需要為接入監(jiān)控做額外工作,就可以享受監(jiān)控帶來的各種便利公条;系統(tǒng)異常發(fā)生后拇囊,可以做到秒級(jí)收到報(bào)警,借助微服務(wù)監(jiān)控大盤靶橱,配合鏈路監(jiān)控和日志查詢寥袭,分鐘級(jí)確認(rèn)異常影響范圍并定位問題,大大減少故障恢復(fù)時(shí)間关霸,提升運(yùn)維效率纠永;目前該方案也在多個(gè)其他團(tuán)隊(duì)推廣落地。
總結(jié)&規(guī)劃
本文介紹了愛奇藝信息流團(tuán)隊(duì)微服務(wù)監(jiān)控的探索和實(shí)踐谒拴,涵蓋了日志監(jiān)控尝江,Hystrix監(jiān)控,撥測(cè)監(jiān)控英上,鏈路監(jiān)控炭序,Prometheus監(jiān)控等,從最初的多種監(jiān)控方案兼容并包苍日,到基于多維度數(shù)據(jù)模型和集中可視化的定制開發(fā)惭聂。不能簡(jiǎn)單說,后面的監(jiān)控方案比前期的好相恃,而是在微服務(wù)監(jiān)控不同發(fā)展階段辜纲,監(jiān)控體系建設(shè)投入和收益的折中選擇。下面是微服務(wù)監(jiān)控探索過程中一些心得拦耐。
簡(jiǎn)單有效耕腾。簡(jiǎn)單有效是評(píng)測(cè)監(jiān)控系統(tǒng)好壞的最高準(zhǔn)則,埋點(diǎn)是否簡(jiǎn)單甚至可省去杀糯,是否存在重復(fù)性的配置工作扫俺,都會(huì)影響監(jiān)控方案能否最終落地推廣。好的監(jiān)控方案一定是固翰,沒有故障時(shí)狼纬,開發(fā)人員無感知羹呵,出現(xiàn)故障時(shí),想看的指標(biāo)都能拿到疗琉。
集成定制冈欢。業(yè)界和公司提供了固定場(chǎng)景下的監(jiān)控框架和方案,基于這些成熟的方案和基礎(chǔ)設(shè)施盈简,會(huì)大大減少監(jiān)控系統(tǒng)建設(shè)投入凑耻;另一方面,必要的定制開發(fā)封裝送火,會(huì)進(jìn)一步推動(dòng)自動(dòng)化監(jiān)控落地拳话。
集中管理≈治考慮監(jiān)控指標(biāo)的多樣性(系統(tǒng)弃衍,應(yīng)用,業(yè)務(wù)等)坚俗,不同監(jiān)控方案關(guān)注點(diǎn)不同镜盯,指標(biāo)埋點(diǎn),收集猖败,獲取未必僅用一套速缆,但是可視化應(yīng)該盡可能集中,方便統(tǒng)一管理和全局分析恩闻。
流程規(guī)范艺糜。微服務(wù)監(jiān)控不是一個(gè)人或少數(shù)幾個(gè)人的事,也不應(yīng)該微服務(wù)上線后才被關(guān)注幢尚,它需要每位微服務(wù)owner破停,從編碼,甚至設(shè)計(jì)階段尉剩,就要考慮監(jiān)控指標(biāo)和維度真慢。為了減少監(jiān)控帶來的額外負(fù)擔(dān),保障落地效果理茎,必要的流程規(guī)范和分享培訓(xùn)是必要的黑界。
以上是監(jiān)控實(shí)踐的階段性探索實(shí)踐總結(jié),未來還有很多方面需要持續(xù)的優(yōu)化和改進(jìn)皂林,例如靈活的報(bào)警規(guī)則朗鸠,恰如其分的報(bào)警,更低成本的埋點(diǎn)式撼、可視化童社,服務(wù)質(zhì)量評(píng)測(cè)報(bào)告等。另外著隆,依托大數(shù)據(jù)分析和人工智能能力扰楼,系統(tǒng)異常檢測(cè),根因分析美浦,智能合并弦赖,故障預(yù)測(cè)和自恢復(fù)技術(shù)愈發(fā)成熟,推動(dòng)AI賦能數(shù)字化運(yùn)維落地也是我們努力的方向浦辨。