APM分布式性能管理監(jiān)控工具調(diào)研

APM簡(jiǎn)介

APM全稱Application Performance Management 凛捏,目前市面的系統(tǒng)基本都是參考Google的Dapper(大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng))來做的, 核心思想是在服務(wù)各節(jié)點(diǎn)彼此調(diào)用的時(shí)候部凑,記錄并傳遞一個(gè)應(yīng)用級(jí)別的標(biāo)記仗扬,這個(gè)標(biāo)記可以用來關(guān)聯(lián)各個(gè)服務(wù)節(jié)點(diǎn)之間的關(guān)系铁蹈,最終形成一個(gè)分布式跟蹤的服務(wù)調(diào)用鏈。

這個(gè)路徑由用戶的X請(qǐng)求發(fā)起薇缅,穿過ABCDE5個(gè)分布式服務(wù)系統(tǒng)


APM 要解決的問題

微服務(wù)架構(gòu)下评也,服務(wù)按照不同的維度進(jìn)行拆分,一次請(qǐng)求請(qǐng)求往往需要涉及到多個(gè)服務(wù)谚殊。尤其是大規(guī)纳パ欤互聯(lián)網(wǎng)應(yīng)用,服務(wù)由不同的團(tuán)隊(duì)開發(fā)嫩絮,用不同編程語言來實(shí)現(xiàn)丛肢、并部署在成千上萬態(tài)幾千臺(tái)服務(wù)器上面。我們需要可以幫助我們理解系統(tǒng)行為和進(jìn)行分析性能問題的工具剿干,以便發(fā)生故障的時(shí)候蜂怎,能夠快速定位和解決問題

市面上的APM工具

Zipkin
由Twitter公司開源置尔,開放源代碼分布式的跟蹤系統(tǒng)

Pinpoint
Pinpoint是一款對(duì)Java編寫的大規(guī)模分布式系統(tǒng)的APM工具杠步,由韓國(guó)人開源的分布式跟蹤系統(tǒng)

Skywalking
國(guó)產(chǎn)的優(yōu)秀APM組件,是一個(gè)對(duì)JAVA分布式應(yīng)用程序集群的業(yè)務(wù)運(yùn)行情況進(jìn)行追蹤榜轿、告警和分析的系統(tǒng)幽歼。

其他類似的組件還有美團(tuán)點(diǎn)評(píng)的CAT,淘寶的鷹眼EgleEye谬盐。

APM鏈路監(jiān)控組件的要求

探針的性能消耗
APM組件服務(wù)的影響對(duì)被監(jiān)控的應(yīng)用應(yīng)該做到足夠小甸私。

代碼的侵入性
監(jiān)控工具對(duì)程序員來說最好是透明的, 有侵入性對(duì)程序員來說是非常不友好的飞傀,程序員需要額外理解監(jiān)控組件皇型,以及要放入的位置诬烹,如果忽略了就監(jiān)控不到,而且可能還容易引起bug

可擴(kuò)展性
能夠支持的組件越多當(dāng)然越好弃鸦,或者能提供插件開發(fā)的API绞吁,對(duì)于一些沒有北監(jiān)控到的組件,應(yīng)用開發(fā)者也可以自行擴(kuò)展

數(shù)據(jù)的分析
數(shù)據(jù)的分析要快 唬格,分析的維度盡可能多家破,實(shí)時(shí)性要求很高,這樣才能在生產(chǎn)環(huán)境下的異常狀況做出快速反應(yīng)购岗,分析并解決問題

Zipkin 與Pinpoint

Zipkin

zipkin主要涉及幾個(gè)組件:collector收集agent的數(shù)據(jù)员舵,storage存儲(chǔ),web UI圖形化界面藕畔,search查詢Storage中存儲(chǔ)的數(shù)據(jù), 提供簡(jiǎn)單的JSON API獲取數(shù)據(jù)。

zipkin

Spring cloud 提供了 sleuth 方便集成到zipkin庄拇,在Spring cloud 的幫助下我們很快就可以搭建出zipkin的server 和client注服,

PinPonit

Pinpoint 主要由 3 個(gè)組件外加 Hbase 數(shù)據(jù)庫構(gòu)成,三個(gè)組件分別為:Agent措近、Collector 和 Web UI

PinPoint

PinPoint 與ZipKin比較

探針的性能
主要是agent對(duì)服務(wù)的吞吐量溶弟、CPU和內(nèi)存的影響。微服務(wù)的規(guī)模和動(dòng)態(tài)性使得數(shù)據(jù)收集的成本大幅度提高瞭郑。

collector的可擴(kuò)展性
能夠水平擴(kuò)展以便支持大規(guī)模服務(wù)器集群辜御。

全面的調(diào)用鏈路數(shù)據(jù)分析
提供代碼級(jí)別的可見性以便輕松定位失敗點(diǎn)和瓶頸。

對(duì)于開發(fā)透明屈张,容易開關(guān)
添加新功能而無需修改代碼擒权,容易啟用或者禁用。

完整的調(diào)用鏈應(yīng)用拓?fù)?br>自動(dòng)檢測(cè)應(yīng)用拓?fù)涓笞唬瑤椭愀闱宄?yīng)用的架構(gòu)

探針的性能

網(wǎng)上有大神對(duì)skywalking碳抄、zipkin、pinpoint進(jìn)行了壓測(cè)场绿,并與基線(未使用探針)的情況進(jìn)行了對(duì)比剖效。
大神模擬了三種并發(fā)用戶:500,750焰盗,1000璧尸。使用jmeter測(cè)試,每個(gè)線程發(fā)送30個(gè)請(qǐng)求熬拒,設(shè)置思考時(shí)間為10ms爷光,采樣率為100%

在三種鏈路監(jiān)控組件中,skywalking的探針對(duì)吞吐量的影響最小梦湘,zipkin的吞吐量居中瞎颗。pinpoint的探針對(duì)吞吐量的影響較為明顯件甥,在500并發(fā)用戶時(shí),測(cè)試服務(wù)的吞吐量從1385降低到774哼拔,影響很大引有。然后再看下CPU和memory的影響,大牛是在內(nèi)部服務(wù)器進(jìn)行的壓測(cè)倦逐,對(duì)CPU和memory的影響都差不多在10%之內(nèi)譬正。

collector的可擴(kuò)展性

zipkin
zipkin-agent與zipkin-Server通過http或者mq進(jìn)行通信,通過基于mq異步方式通信檬姥,zipkin-Server通過訂閱具體的topic進(jìn)行消費(fèi)曾我。多個(gè)zipkin-Server實(shí)例進(jìn)行異步消費(fèi)mq中的監(jiān)控信息。

PinPoint
pinpoint也是支持集群和單機(jī)部署,pinpoint agent通過thrift通信框架健民,發(fā)送鏈路信息到collector

全面的調(diào)用鏈路數(shù)據(jù)分析

zipkin
zipkin的鏈路監(jiān)控粒度相對(duì)沒有那么細(xì)抒巢,下圖可以看到調(diào)用鏈中具體到接口級(jí)別,再進(jìn)一步的調(diào)用信息不能看到

pinpoin
pinpoint數(shù)據(jù)分析相對(duì)完畢秉犹。提供代碼級(jí)別的可見性以便輕松定位失敗點(diǎn)和瓶頸蛉谜,下圖可以看到對(duì)于執(zhí)行的sql語句,都進(jìn)行了記錄


對(duì)于開發(fā)透明崇堵,容易開關(guān)

Zipkin 使用修改過的類庫和它自己的容器(Finagle)來提供分布式事務(wù)跟蹤的功能型诚,但是它要求在需要時(shí)修改代碼
pinpoint是基于字節(jié)碼增強(qiáng)的方式,開發(fā)人員不需要修改代碼鸳劳,并且可以收集到更多精確的數(shù)據(jù)因?yàn)橛凶止?jié)碼中的更多信息

完整的調(diào)用鏈應(yīng)用拓?fù)?/b>

PinPoint的界面更加豐富狰贯,在這方面可以秒掉zipkin


Pinpoint


Zipkin

其它方面

Pinpoint 是一個(gè)完整的性能監(jiān)控解決方案:有從探針、收集器赏廓、存儲(chǔ)到 Web 界面等全套體系涵紊;而 Zipkin 只側(cè)重收集器和存儲(chǔ)服務(wù),雖然也有用戶界面楚昭,但其功能與 Pinpoint 不可同日而語栖袋。反而 Zipkin 提供有 Query 接口,更強(qiáng)大的用戶界面和系統(tǒng)集成能力抚太,可以基于該接口二次開發(fā)實(shí)現(xiàn)塘幅。

Zipkin 官方提供有基于 Finagle 框架(Scala 語言)的接口,而其他框架的接口由社區(qū)貢獻(xiàn)尿贫,目前可以支持 Java电媳、Scala、Node庆亡、Go匾乓、Python、Ruby 和 C# 等主流開發(fā)語言和框架又谋;但是 Pinpoint 目前只有官方提供的 Java Agent 探針拼缝。

Pinpoint 提供有 Java Agent 探針娱局,通過字節(jié)碼注入的方式實(shí)現(xiàn)調(diào)用攔截和數(shù)據(jù)收集,可以做到真正的代碼無侵入咧七,只需要在啟動(dòng)服務(wù)器的時(shí)候添加一些參數(shù)衰齐,就可以完成探針的部署;而 Zipkin 的 Java 接口實(shí)現(xiàn) Brave继阻,只提供了基本的操作 API耻涛,如果需要與框架或者項(xiàng)目集成的話,就需要手動(dòng)添加配置文件或增加代碼瘟檩。

總結(jié)

對(duì)于我們來說Pinpoint 確實(shí)具有壓倒性的優(yōu)勢(shì)抹缕;無需對(duì)項(xiàng)目代碼進(jìn)行任何改動(dòng)就可以部署探針、追蹤數(shù)據(jù)細(xì)聊粒化到方法調(diào)用級(jí)別卓研、功能強(qiáng)大的用戶界面以及幾乎比較全面的 Java 框架支持;關(guān)于由于PinPoint采用的是字節(jié)碼注入的方式導(dǎo)致接口開發(fā)困難度提高一個(gè)數(shù)量級(jí)睹簇,對(duì)于我們2B服務(wù)的互聯(lián)網(wǎng)產(chǎn)品來說或許不是一個(gè)大問題鉴分,我們可以等一等,站在巨人的肩膀上带膀,采取拿來主義的原則,而不是去自己實(shí)現(xiàn)一些接口橙垢,因?yàn)槲覀儾⒉皇亲咴诨ヂ?lián)網(wǎng)的前沿垛叨,所以很多問題走在前沿的開發(fā)人員會(huì)幫助我們解決,他們對(duì)于我們來說就是巨人柜某。

Pinpoint實(shí)戰(zhàn)演示效果

搭建一個(gè)java開源項(xiàng)目jforum嗽元,跑在tomcat下,使用jmeter進(jìn)行壓測(cè)喂击,用戶100個(gè)

服務(wù)器圖(ServerMap)

通過可視化其組件的互連方式來了解任何分布式系統(tǒng)的拓?fù)浼涟螕艄?jié)點(diǎn)將顯示有關(guān)組件的詳細(xì)信息,例如其當(dāng)前狀態(tài)和事務(wù)計(jì)數(shù)翰绊。

實(shí)時(shí)活動(dòng)線程圖(Realtime Active Thread Chart)

實(shí)時(shí)監(jiān)視應(yīng)用程序內(nèi)的活動(dòng)線程佩谷。

請(qǐng)求/響應(yīng)散布圖(Request/Response Scatter Chart)

可視化請(qǐng)求計(jì)數(shù)和響應(yīng)模式,以確定潛在問題监嗜⌒程矗可以通過在圖表上拖動(dòng)來選擇事務(wù)以獲取更多詳細(xì)信息

調(diào)用棧信息(CallStack)

增強(qiáng)分布式環(huán)境中每個(gè)事務(wù)的代碼級(jí)可見性,識(shí)別單個(gè)視圖中的瓶頸和故障點(diǎn)裁奇。

檢查器(Inspector)

查看應(yīng)用程序的其他詳細(xì)信息桐猬,如CPU使用率,內(nèi)存/垃圾收集刽肠,TPS和JVM參數(shù)

Zipkin實(shí)戰(zhàn)演示效果

調(diào)用棧信息(CallStack)

服務(wù)器圖(ServerMap)

參考+引用+抄襲的文章

https://www.cnblogs.com/Bug-Hunter/p/8677435.html
http://www.herohuang.com/2017/03/01/apm-pinpoint/
https://sq.163yun.com/blog/article/168169689970475008
http://www.tangrui.net/2016/pinpoint-plugin-development.html
http://iamlile.github.io/2017/10/06/apm/
http://www.tangrui.net/2016/zipkin-vs-pinpoint.html
https://juejin.im/post/5a0579e6f265da4326524f0f
https://juejin.im/post/5a274614518825592c07f8b8

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溃肪,一起剝皮案震驚了整個(gè)濱河市免胃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惫撰,老刑警劉巖羔沙,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異润绎,居然都是意外死亡撬碟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門莉撇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呢蛤,“玉大人,你說我怎么就攤上這事棍郎∑湔希” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵涂佃,是天一觀的道長(zhǎng)励翼。 經(jīng)常有香客問我,道長(zhǎng)辜荠,這世上最難降的妖魔是什么汽抚? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮伯病,結(jié)果婚禮上造烁,老公的妹妹穿的比我還像新娘。我一直安慰自己午笛,他們只是感情好驶冒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布歧胁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涕烧。 梳的紋絲不亂的頭發(fā)上复局,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天碌嘀,我揣著相機(jī)與錄音秃励,去河邊找鬼。 笑死围辙,一個(gè)胖子當(dāng)著我的面吹牛氨肌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酌畜,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼怎囚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恳守,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤考婴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后催烘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沥阱,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年伊群,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考杉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舰始,死狀恐怖崇棠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丸卷,我是刑警寧澤枕稀,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站谜嫉,受9級(jí)特大地震影響萎坷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沐兰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一哆档、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧住闯,春花似錦虐呻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偶惠。三九已至春寿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忽孽,已是汗流浹背绑改。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兄一,地道東北人厘线。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像出革,于是被迫代替她去往敵國(guó)和親造壮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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