APM Server端Java探針調(diào)研

一畏邢、需求

Tomcat:
(1)模塊啟動(dòng)時(shí)間
(2)模塊交互耗時(shí)

二分预、現(xiàn)狀

現(xiàn)代APM體系趴梢,基本都是參考Google的Dapper(大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng))的體系來(lái)做的。通過(guò)跟蹤請(qǐng)求的處理過(guò)程秀睛,來(lái)對(duì)應(yīng)用系統(tǒng)在前后端處理尔当、服務(wù)端調(diào)用的性能消耗進(jìn)行跟蹤,關(guān)于Dapper的介紹可以看這個(gè)鏈接:http://bigbully.github.io/Dapper-translation/
下面重點(diǎn)選5個(gè)比較有名的server端探針進(jìn)行簡(jiǎn)單介紹:

2.1 Pinpoint(開(kāi)源)

github地址:https://github.com/naver/pinpoint
java領(lǐng)域的性能分析的開(kāi)源項(xiàng)目,這個(gè)是一個(gè)韓國(guó)團(tuán)隊(duì)開(kāi)源出來(lái)的椭迎,通過(guò)JavaAgent的機(jī)制來(lái)做字節(jié)碼代碼植入锐帜,實(shí)現(xiàn)加入traceid和抓取性能數(shù)據(jù)的目的。
NewRelic畜号、Oneapm之類(lèi)的工具在java平臺(tái)上的性能分析也是類(lèi)似的機(jī)制缴阎。

2.2 Zipkin(開(kāi)源)

官網(wǎng):OpenZipkin · http://zipkin.io/
github地址:https://github.com/openzipkin/zipkin
這個(gè)是twitter開(kāi)源出來(lái)的,也是參考Dapper的體系來(lái)做的简软。
Zipkin的java應(yīng)用端是通過(guò)一個(gè)叫Brave的組件來(lái)實(shí)現(xiàn)對(duì)應(yīng)用內(nèi)部的性能分析數(shù)據(jù)采集蛮拔。
Brave的github地址:https://github.com/openzipkin/brave
這個(gè)組件通過(guò)實(shí)現(xiàn)一系列的java攔截器,來(lái)做到對(duì)http/servlet請(qǐng)求痹升、數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的調(diào)用過(guò)程跟蹤建炫。
然后通過(guò)在spring之類(lèi)的配置文件里加入這些攔截器,完成對(duì)java應(yīng)用的性能數(shù)據(jù)采集疼蛾。

2.3 CAT(開(kāi)源)

github地址:https://github.com/dianping/cat
這個(gè)是大眾點(diǎn)評(píng)開(kāi)源出來(lái)的肛跌,實(shí)現(xiàn)的功能也還是蠻豐富的,國(guó)內(nèi)也有一些公司在用了据过。
不過(guò)他實(shí)現(xiàn)跟蹤的手段惋砂,是要在代碼里硬編碼寫(xiě)一些“埋點(diǎn)”妒挎,也就是侵入式的绳锅。
這樣做有利有弊,好處是可以在自己需要的地方加埋點(diǎn)酝掩,比較有針對(duì)性鳞芙;壞處是必須改動(dòng)現(xiàn)有系統(tǒng),很多開(kāi)發(fā)團(tuán)隊(duì)不愿意期虾。

2.4 NewRelic(閉源原朝,代碼不混淆)

https://newrelic.com/java

2.5 聽(tīng)云(閉源,代碼混淆)

http://www.tingyun.com/tingyun_server.html
探針能力介紹:http://doc.tingyun.com/server/html/phpzhichiliebiao.html

三镶苞、探針能力匯總

3.1 支持

(1)應(yīng)用運(yùn)行環(huán)境:PHP, Java, .NET喳坠,Node.js, Python,Ruby等
(2)云:阿里云茂蚓、騰訊云壕鹉、AWS、金山云聋涨、青云晾浴、華為云等
(3)Database:MySQL, Oracle, MS SQL Server, PostgreSQL等
(4)Framework:Spring, Yii牍白,Django脊凰,Tomcat,JBoss茂腥,WebLogic等
(5)NoSQL:Memcached狸涌,MongoDB切省,Redis等非關(guān)系型數(shù)據(jù)庫(kù)服務(wù)
(6)API:監(jiān)控HTTP、Dubbo帕胆、Thrift協(xié)議下當(dāng)前應(yīng)用調(diào)用的外部服務(wù)数尿,如微博、微信第三方API接口等惶楼,并支持跨應(yīng)用分析

3.2 核心功能

(1)web應(yīng)用過(guò)程:分析url調(diào)用過(guò)程中性能消耗原因,抓取超過(guò)閾值url的詳細(xì)數(shù)據(jù)
(2)數(shù)據(jù)庫(kù)性能:支持多種數(shù)據(jù)庫(kù)類(lèi)型的監(jiān)測(cè)右蹦,定位并追蹤慢SQL語(yǔ)句問(wèn)題
(3)錯(cuò)誤分析:記錄錯(cuò)誤發(fā)生時(shí)的詳細(xì)信息,統(tǒng)計(jì)應(yīng)用錯(cuò)誤率歼捐,定位問(wèn)題具體至代碼行
(4)外部API調(diào)用:可以監(jiān)測(cè)所有服務(wù)端應(yīng)用外部調(diào)用API的耗時(shí)何陆,并進(jìn)行匯總統(tǒng)計(jì)
(5)線(xiàn)程剖析:可以實(shí)現(xiàn)生產(chǎn)環(huán)境下實(shí)時(shí)在線(xiàn)的線(xiàn)程剖析,可在運(yùn)行時(shí)了解代碼性能
(6)NoSQL分析:實(shí)時(shí)監(jiān)控Memcache, MongoDB,Redis等NoSQL數(shù)據(jù)庫(kù)的性能問(wèn)題
(7)JVM性能:實(shí)時(shí)監(jiān)控 JVM 運(yùn)行狀態(tài)豹储,通過(guò)圖表展示 JVM 內(nèi)存分配情況贷盲、內(nèi)存使用情況、垃圾收集信息剥扣、類(lèi)加載數(shù)量巩剖、JVM 線(xiàn)程信息以及會(huì)話(huà)信息。
(8)HTTP 會(huì)話(huà):分析每個(gè)應(yīng)用程序的 HTTP 會(huì)話(huà)數(shù)钠怯,包括:活躍佳魔、過(guò)期、拒絕的會(huì)話(huà)晦炊。

四鞠鲜、詳細(xì)介紹(只關(guān)注能解決需求的部分)

用競(jìng)品的server探針監(jiān)控Tomcat+Spring MVC的demo。在demo里只實(shí)現(xiàn)了path=/hello/hello的GET請(qǐng)求断国。如下:


這里寫(xiě)圖片描述

以下是使用聽(tīng)云和NewRelic分別監(jiān)控到的Tomcat接收GET請(qǐng)求后的調(diào)用追蹤及其耗時(shí)贤姆。

4.1 聽(tīng)云

慢事務(wù)追蹤


這里寫(xiě)圖片描述

這里寫(xiě)圖片描述

4.2 NewRelic

慢事務(wù)追蹤


這里寫(xiě)圖片描述

這里寫(xiě)圖片描述

4.3 監(jiān)控 Tomcat 中 Java 應(yīng)用的主要特點(diǎn)

監(jiān)視分布式應(yīng)用程序的跨應(yīng)用程序追蹤
將主要業(yè)務(wù)軌跡的關(guān)鍵業(yè)務(wù)進(jìn)行拓?fù)浞治?br> 用性能剖析分析方法調(diào)用棧軌跡

五、Server探針Demo SDK

(1)監(jiān)控功能:模塊交互耗時(shí)
監(jiān)測(cè)Tomcat + Spring MVC搭建的服務(wù)稳衬,當(dāng)后端收到“GET http://localhost:8080/hello/hello”請(qǐng)求時(shí)霞捡,HelloController模塊的printHello的調(diào)用耗時(shí)。
printHello調(diào)用如下薄疚,里面人為增加2s延遲碧信。

這里寫(xiě)圖片描述

(2)Server探針功能:
監(jiān)控模塊的函數(shù)調(diào)用耗時(shí)
(3)Server探針實(shí)現(xiàn)方式:
通過(guò)JVM的JavaAgent的機(jī)制來(lái)做字節(jié)碼代碼,在目標(biāo)模塊的函數(shù)調(diào)用前后打點(diǎn)输涕。
代碼行數(shù):1270行
實(shí)現(xiàn)時(shí)間:一天
NewRelic代碼行數(shù):8w行
(4)實(shí)驗(yàn)結(jié)果:
這里寫(xiě)圖片描述

六音婶、調(diào)研結(jié)論

目前競(jìng)品(NewRelic、聽(tīng)云)的方案能滿(mǎn)足需求莱坎。
有可參考的競(jìng)品:NewRelic衣式,雖然不開(kāi)源,但代碼反編譯后未混淆,可以基本讀懂碴卧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弱卡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子住册,更是在濱河造成了極大的恐慌婶博,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荧飞,死亡現(xiàn)場(chǎng)離奇詭異凡人,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叹阔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)挠轴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人耳幢,你說(shuō)我怎么就攤上這事岸晦。” “怎么了睛藻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵启上,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我店印,道長(zhǎng)冈在,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任吱窝,我火速辦了婚禮讥邻,結(jié)果婚禮上迫靖,老公的妹妹穿的比我還像新娘院峡。我一直安慰自己,他們只是感情好系宜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布照激。 她就那樣靜靜地躺著,像睡著了一般盹牧。 火紅的嫁衣襯著肌膚如雪俩垃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天汰寓,我揣著相機(jī)與錄音口柳,去河邊找鬼。 笑死有滑,一個(gè)胖子當(dāng)著我的面吹牛跃闹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼望艺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苛秕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起找默,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艇劫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惩激,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體店煞,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年风钻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浅缸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肘迎,到底是詐尸還是另有隱情箕戳,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布肖抱,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阁将。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一右遭、第九天 我趴在偏房一處隱蔽的房頂上張望做盅。 院中可真熱鬧,春花似錦窘哈、人聲如沸吹榴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)图筹。三九已至,卻和暖如春让腹,著一層夾襖步出監(jiān)牢的瞬間远剩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工骇窍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓜晤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓腹纳,卻偏偏與公主長(zhǎng)得像痢掠,于是被迫代替她去往敵國(guó)和親哈恰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容