ARMS在APM工具选型中的实践
簡(jiǎn)介:?當(dāng)前的系統(tǒng)在數(shù)字化轉(zhuǎn)型需求以及互聯(lián)網(wǎng)架構(gòu)實(shí)施的影響下,越來越普遍地使用了微服務(wù)架構(gòu),我們?cè)谙硎芪⒎?wù)帶來的好處(開發(fā)效率高, 獨(dú)立部署, 水平擴(kuò)展, 故障與資源隔離等等)外,也帶來測(cè)試,事務(wù),應(yīng)用監(jiān)控等各方面的困難。
前言
當(dāng)前的系統(tǒng)在數(shù)字化轉(zhuǎn)型需求以及互聯(lián)網(wǎng)架構(gòu)實(shí)施的影響下,越來越普遍地使用了微服務(wù)架構(gòu),我們?cè)谙硎芪⒎?wù)帶來的好處(開發(fā)效率高, 獨(dú)立部署, 水平擴(kuò)展, 故障與資源隔離等等)外,也帶來測(cè)試,事務(wù),應(yīng)用監(jiān)控等各方面的困難。
從上圖可以看出,在以分布式為主的互聯(lián)網(wǎng)架構(gòu)下,應(yīng)用間的調(diào)用變得越來越復(fù)雜,我們傳統(tǒng)使用的開發(fā)工程師主動(dòng)埋點(diǎn),運(yùn)維人員到主機(jī)上查日志,組合調(diào)用鏈,監(jiān)控應(yīng)用的運(yùn)行情況,顯得越來越力不從心。
為了更好地做到應(yīng)用層面的監(jiān)控,包括應(yīng)用運(yùn)行環(huán)境的基礎(chǔ)設(shè)施數(shù)據(jù),系統(tǒng)業(yè)務(wù)調(diào)用情況,性能消耗分析,在發(fā)生性能,異常與故障問題時(shí),能夠快速定位和解決問題,誕生了很多優(yōu)秀的APM(Application Performance Management)工具。
這些APM工具都提供了包括指標(biāo)統(tǒng)計(jì)信息與調(diào)用鏈路跟蹤信息。
常見的APM工具
APM工具包括指標(biāo)收集與調(diào)用鏈?zhǔn)占V笜?biāo)收集例如在某一段時(shí)間的請(qǐng)求數(shù),異常數(shù),錯(cuò)誤數(shù),響應(yīng)時(shí)間RT, IAAS層的資源使用情況(例如cpu, memory, IO, load, 網(wǎng)絡(luò)), 也包括JVM的各種運(yùn)行參數(shù)(例如 各內(nèi)存分區(qū)情況,gc情況)。調(diào)用鏈?zhǔn)占I(yè)務(wù)請(qǐng)求中訪問過的各應(yīng)用,類,方式,在每個(gè)運(yùn)行節(jié)點(diǎn)/方法上的時(shí)間消耗情況。
常見的APM工具有:
1、ARMS:由阿里巴巴自研開發(fā)的一款A(yù)PM工具。由于分布式微服務(wù)框架以阿里為主體的企業(yè)很早就開始探索,阿里集團(tuán)內(nèi)很早就有配套的鷹眼系統(tǒng)做相關(guān)的應(yīng)用監(jiān)控,為適應(yīng)產(chǎn)品上云輸出,阿里在2016-08-04的時(shí)間就以ARMS的產(chǎn)品形式正式對(duì)外提供應(yīng)用監(jiān)控服務(wù)。
2、開源系的APM
u Pinpoint:基于java編寫的開源APM工具,由韓國(guó)人開發(fā)貢獻(xiàn),功能完善,發(fā)展快,影響了很多其它的APM工具實(shí)現(xiàn),在國(guó)內(nèi)外使用比較廣泛。
u Skywalking:支持open tracing標(biāo)準(zhǔn),由我國(guó)的吳晟主導(dǎo)開發(fā)的分布式追蹤,分析,告警的開源工具,當(dāng)前是Apache旗下的開源項(xiàng)目,發(fā)展非常迅速,在各類開源APM工具里國(guó)內(nèi)的使用比較廣泛。
u ZipKin:支持open tracing標(biāo)準(zhǔn),由Twitter公司開發(fā)貢獻(xiàn),于2012年的時(shí)候就開始開源發(fā)展,是比較成熟的開源APM工具。
u Jaeger:支持open tracing標(biāo)準(zhǔn),由Uber公司開發(fā)貢獻(xiàn),是比較成熟的開源APM工具。
APM工具原理
盡管這些APM工具功能與實(shí)現(xiàn)各有不同,但基本上原理都是一樣的,這個(gè)原理基于google dapper的分布式追蹤技術(shù)論文,把APM工具實(shí)現(xiàn)總體上分為兩大部分:
1、對(duì)應(yīng)用運(yùn)行節(jié)點(diǎn)上進(jìn)行應(yīng)用埋點(diǎn),在業(yè)務(wù)運(yùn)行期間進(jìn)行埋點(diǎn)數(shù)據(jù)的生成;
2、通過APM的后端服務(wù)日志收集,數(shù)據(jù)清洗與聚合,把相應(yīng)的處理結(jié)果持久化,并且提供豐富的可視化控制臺(tái)。
在這個(gè)調(diào)用鏈追蹤技術(shù)里,還原調(diào)用鏈的功能主要依賴于兩個(gè)ID.
第一個(gè)ID是TraceID, 這個(gè)代表一個(gè)業(yè)務(wù)調(diào)用,就好像在電商系統(tǒng)里發(fā)起的一個(gè)下單結(jié)算; 在線教育里的一個(gè)選課流程; 物流系統(tǒng)里的攬收; 這些業(yè)務(wù)從客戶觸發(fā)到獲得響應(yīng)結(jié)果就是一個(gè)完整的請(qǐng)求,就是一次業(yè)務(wù)調(diào)用,它每一次的業(yè)務(wù)請(qǐng)求的都會(huì)獲得維一的TraceID;
第二個(gè)ID是RpcID (或者稱為SpanID), 在一次業(yè)務(wù)請(qǐng)求中,可能經(jīng)過的應(yīng)用會(huì)有多過,以一個(gè)電商下單業(yè)務(wù)為例: 它需要經(jīng)過訂單系統(tǒng)創(chuàng)建訂單; 支付系統(tǒng)接受支付;庫存系統(tǒng)扣減產(chǎn)品庫存;會(huì)員系統(tǒng)給買家進(jìn)行積分處理; 購物車系統(tǒng)會(huì)清理購物清單。這樣對(duì)于業(yè)務(wù)流經(jīng)的每一個(gè)應(yīng)用,都有一個(gè)有層次的RpcID, 這個(gè)RpcID可以認(rèn)為是使用目錄層級(jí)記錄的,從這個(gè)RpcID來看,那怕它在同一個(gè)業(yè)務(wù)中被調(diào)用了多次,它的每一次進(jìn)入的RpcID都是一樣的。
依賴于TraceID & RpcID,我們可以很方便地還原整個(gè)調(diào)用鏈。
ARMS功能上的優(yōu)勢(shì):
客觀來說, 優(yōu)秀的APM工具發(fā)展到現(xiàn)在,基礎(chǔ)功能上的差異都不大。例如以前開源APM比較薄弱的自動(dòng)埋點(diǎn)功能也跟進(jìn)了ARMS這些先發(fā)的產(chǎn)品; 在異步產(chǎn)品如各類MQ的支持上也慢慢拉平;SQL/API參數(shù)抓取的功能方面也是補(bǔ)足。我們?cè)賮砹幸幌翧RMS的優(yōu)點(diǎn):
1、指標(biāo)數(shù)據(jù)的準(zhǔn)確性
ARMS的agent把指標(biāo)數(shù)據(jù)與調(diào)用鏈數(shù)據(jù)是分開兩種類型來采集統(tǒng)計(jì)的, 相應(yīng)的指標(biāo)數(shù)據(jù)不受調(diào)用鏈的采樣率的影響,會(huì)在具體的運(yùn)行節(jié)點(diǎn)進(jìn)行完完全全的統(tǒng)計(jì)后,精準(zhǔn)到上傳加載到ARMS后端。(而有些優(yōu)秀的APM工具是通過采樣上來的調(diào)用鏈進(jìn)行加工處理,再來產(chǎn)出相應(yīng)的指標(biāo),這在準(zhǔn)確性上會(huì)有一定的丟失。)
2、線程棧捕獲
因?yàn)槭荍AVA自動(dòng)埋點(diǎn)的原理是對(duì)已知的框架進(jìn)行字節(jié)碼加強(qiáng),當(dāng)某框架不在已支持的范圍內(nèi),那么這段訪問的信息就不會(huì)被記錄下來。ARMS可以通過設(shè)定調(diào)用超過一定時(shí)長(zhǎng)后,可以通把整個(gè)線程棧捕獲下來,這樣我們就可以通過線程棧的分析進(jìn)行補(bǔ)充定位。
3、線程分析
ARMS可以通過線程分析頁簽,清淅地看到各類線程的資源占用情況。例如可以知道當(dāng)前的某線程池線程數(shù)是多少, 占用cpu最多的線程是那個(gè), 占用的百分比情況,并且可以看到線程的運(yùn)行狀態(tài)。
4、業(yè)務(wù)關(guān)聯(lián)日志
ARMS這邊可以通過給合傳統(tǒng)的log4j等技術(shù),在輸出業(yè)務(wù)日志上可以把相應(yīng)的TraceID 就像線程ID那樣通過方便的配置就可以與業(yè)務(wù)日志同時(shí)輸出。另外,ARMS與阿里云的SLS進(jìn)行整合,可以通過ARMS的頁面方便地根據(jù)調(diào)用鏈的TraceID查找到關(guān)聯(lián)的業(yè)務(wù)日志,這樣需要結(jié)合業(yè)務(wù)日志定位時(shí),更方便實(shí)用。
5、智能合并能力
ARMS對(duì)于相同的調(diào)用,例如遞當(dāng),循環(huán)會(huì)進(jìn)行智能合并,顯示循環(huán)的次數(shù),執(zhí)行的最大時(shí)長(zhǎng),最小時(shí)長(zhǎng),平均時(shí)長(zhǎng)。
6、主動(dòng)診斷能力
ARMS提供了主動(dòng)診斷能力,可以通過選定具體的時(shí)間,執(zhí)行主動(dòng)診斷,ARMS會(huì)分析這一段時(shí)間內(nèi)的應(yīng)用運(yùn)行情況,自動(dòng)總結(jié)這一段時(shí)間內(nèi)的問題,并且結(jié)合阿里的經(jīng)驗(yàn),產(chǎn)出具體的報(bào)表。我們依據(jù)這個(gè)報(bào)表,可以加速我們的定位與優(yōu)化。
7、豐富的報(bào)警能力
完善報(bào)警體系,ARMS提供了豐富的報(bào)警規(guī)則,我們可以對(duì)相應(yīng)的規(guī)則進(jìn)行開啟/關(guān)停,編輯,這樣可以快速搭建報(bào)警體系。在報(bào)警通道方面,可以直接發(fā)對(duì)接釘釘/WebHook/Email/短信網(wǎng)關(guān)等。
運(yùn)維能力上的優(yōu)勢(shì)
1、 按需監(jiān)控啟停管理?
通過ARMS的管理控制臺(tái),我們可以批量在管理應(yīng)用的啟停,可以一鍵停止所有的ARMS監(jiān)控,也可以一鍵啟動(dòng)相關(guān)應(yīng)用的監(jiān)控。非常符合上云的按需要使用觀念。
2、動(dòng)態(tài)采樣率變更
在面對(duì)特殊的時(shí)間點(diǎn)或者異常出現(xiàn)機(jī)率的時(shí)候,我們希望動(dòng)態(tài)調(diào)整采樣率,例如通過調(diào)大采樣率來捕獲這些概率極少的調(diào)用鏈,借助ARMS的配置管理,我們可以非常方便地把更齊全的調(diào)用鏈?zhǔn)占饋?#xff1b;通過調(diào)小采樣率來保證存儲(chǔ)空間的合理使用(其它的APM工具在做采樣率的變更時(shí),需要應(yīng)用的重新配置,啟動(dòng),這不但處理起來麻煩,并且影響業(yè)務(wù)的邊續(xù)性,在實(shí)際操作上很難下定決心去在運(yùn)行期間中斷業(yè)務(wù)去做改變采樣率的變更。)
3、 綁定參數(shù)的開關(guān)
雖然很多APM工具都可以提供綁定參數(shù)的功能。但很多時(shí)候,如果對(duì)于業(yè)務(wù)數(shù)據(jù)敏感的系統(tǒng),并不希望這類APM工具在非必要的時(shí)候采集SQL/API的運(yùn)行參數(shù)。所以ARMS在它的配置管理里提供這么一個(gè)功能非常有意義,也就是當(dāng)需要收集這些運(yùn)行的業(yè)務(wù)參數(shù)進(jìn)行問題定位分析的時(shí)候,那么只要打開就可以了,使用完畢后,再通過把這些開關(guān)關(guān)上,那么就可以保護(hù)我們的業(yè)務(wù)數(shù)據(jù)不外泄漏出去了。
4、接入簡(jiǎn)易
可通過更簡(jiǎn)易的方式如阿里容器ACK/EDAS/SAE等各種非常便捷的接入方式,只需要簡(jiǎn)單的YAML注解或按鈕即可完成接入。
5、 組件穩(wěn)定免運(yùn)維
因?yàn)锳RMS是商業(yè)化的產(chǎn)品,所以所有的組件都是不需要我們使用方運(yùn)維的。如果使用開源自建,那么我們就需要對(duì)日志收集,計(jì)算清洗服務(wù),存儲(chǔ)產(chǎn)品本身進(jìn)行運(yùn)維,包括相應(yīng)的集群規(guī)模,清理處理,擴(kuò)容處理,如果在峰值過后,不進(jìn)行資源回收,也會(huì)產(chǎn)生額外的使用浪費(fèi)。
成本使用上的優(yōu)勢(shì)
1、 ARMS是按接入節(jié)點(diǎn),接入的小時(shí)(時(shí)長(zhǎng))計(jì)費(fèi)的,這樣可以充分發(fā)揮云上產(chǎn)品的優(yōu)勢(shì)。按需要使用,按需要的應(yīng)用節(jié)點(diǎn)付費(fèi)。另外ARMS單純地按照節(jié)點(diǎn)數(shù)來計(jì)算,并不受采樣率的變動(dòng)而產(chǎn)生變化,這樣對(duì)于大采樣率的應(yīng)用是有一定的優(yōu)勢(shì)。
2、 ARMS有相應(yīng)的資源包,可以通過購買資源包的方式進(jìn)一步節(jié)省費(fèi)用。
3、 因?yàn)楫a(chǎn)品的組合因素,ARMS如果搭配阿里云的容器(ACK)使用,計(jì)費(fèi)會(huì)自動(dòng)5折。
最后,這里列一下開源與ARMS的一個(gè)成本的比較供大家參考:
備注
1、開源的按照統(tǒng)一統(tǒng)計(jì)數(shù)據(jù)存15天,全量明細(xì)數(shù)據(jù)存3天計(jì)算(ARMS的數(shù)據(jù)是全天24小時(shí)使用,存儲(chǔ)60天,在非容器下按年包折下來的月費(fèi)用。)
2、人力成本以具有開發(fā)能力的運(yùn)維人員月薪3萬計(jì)算。人力成本,主要參數(shù)變動(dòng)帶來的發(fā)布,后端系統(tǒng)的不穩(wěn)定帶來的效率損失,后端系統(tǒng)的維護(hù)操作。中大型的會(huì)做一些定制的開發(fā)(例如采樣的動(dòng)態(tài)配置化生效)
綜述
在阿里云上,ARMS在APM層面提供了足夠豐富的功能;可以友好地運(yùn)維操作;另外通過合理地按需使用,結(jié)合資源包,以及容器的方式運(yùn)行,使用起來還高效與節(jié)省。作為基礎(chǔ)設(shè)施的實(shí)用監(jiān)控,不重復(fù)發(fā)明輪子,不重人力資源投入,綜合考慮各方面因素,最終選擇使用ARMS。
?
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的ARMS在APM工具选型中的实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【开通指南】 实时计算 Flink 全托
- 下一篇: 参数校验优雅实践