1. 程式人生 > >分布式服務全棧監控工具

分布式服務全棧監控工具

官網 TP 基本 phi 配置 -i 攔截 源代碼 zip

  轉載自知乎鏈接:https://www.zhihu.com/question/27994350/answer/118821214


現代APM體系,基本都是參考Google的Dapper(大規模分布式系統的跟蹤系統)的體系來做的。
通過跟蹤請求的處理過程,來對應用系統在前後端處理、服務端調用的性能消耗進行跟蹤,關於Dapper的介紹可以看這個鏈接:
Dapper,大規模分布式系統的跟蹤系統 by bigbully

我所知道相對有名的APM系統主要有以下幾個:
1、Pinpoint
github地址:GitHub - naver/pinpoint: Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
對java領域的性能分析有興趣的朋友都應該看看這個開源項目,這個是一個韓國團隊開源出來的,通過JavaAgent的機制來做字節碼代碼植入,實現加入traceid和抓取性能數據的目的。
NewRelic、Oneapm之類的工具在java平臺上的性能分析也是類似的機制。

2、SkyWalking
github地址:wu-sheng/sky-walking
這是國內一位叫吳晟的兄弟開源的,也是一個對JAVA分布式應用程序集群的業務運行情況進行追蹤、告警和分析的系統,在github上也有400多顆星了。
功能相對pinpoint還是稍弱一些,插件還沒那麽豐富,不過也很難得了。

3、Zipkin
官網:OpenZipkin · A distributed tracing system
github地址:GitHub - openzipkin/zipkin: Zipkin is a distributed tracing system
這個是twitter開源出來的,也是參考Dapper的體系來做的。

Zipkin的java應用端是通過一個叫Brave的組件來實現對應用內部的性能分析數據采集。
Brave的github地址:
這個組件通過實現一系列的java攔截器,來做到對http/servlet請求、數據庫訪問的調用過程跟蹤。
然後通過在spring之類的配置文件裏加入這些攔截器,完成對java應用的性能數據采集。

4、CAT
github地址:GitHub - dianping/cat: Central Application Tracking
這個是大眾點評開源出來的,實現的功能也還是蠻豐富的,國內也有一些公司在用了。
不過他實現跟蹤的手段,是要在代碼裏硬編碼寫一些“埋點”,也就是侵入式的。
這樣做有利有弊,好處是可以在自己需要的地方加埋點,比較有針對性;壞處是必須改動現有系統,很多開發團隊不願意。

5、Xhprof/Xhgui
這兩個工具的組合,是針對PHP應用提供APM能力的工具,也是非侵入式的。
Xhprof github地址:GitHub - preinheimer/xhprof: XHGUI is a GUI for the XHProf PHP extension, using a database backend, and pretty graphs to make it easy to use and interpret.
Xhgui github地址:GitHub - perftools/xhgui: A graphical interface for XHProf data built on MongoDB
我對PHP不熟,不過網上介紹這兩個工具的資料還是蠻多的。


前面三個工具裏面,我推薦的順序依次是Pinpoint—》Zipkin—》CAT。

原因很簡單,就是這三個工具對於程序源代碼和配置文件的侵入性,是依次遞增的:
Pinpoint:基本不用修改源碼和配置文件,只要在啟動命令裏指定javaagent參數即可,對於運維人員來講最為方便;
Zipkin:需要對Spring、web.xml之類的配置文件做修改,相對麻煩一些;
CAT:因為需要修改源碼設置埋點,因此基本不太可能由運維人員單獨完成,而必須由開發人員的深度參與了,而很多開發人員是比較抗拒在代碼中加入這些東西滴;

相對於傳統的監控軟件(Zabbix之流)的區別,APM跟關註在對於系統內部執行、系統間調用的性能瓶頸分析,這樣更有利於定位到問題的具體原因,而不僅僅像傳統監控軟件一樣只提供一些零散的監控點和指標,就算告警了也不知道問題是出在哪裏。

分布式服務全棧監控工具