APM (應用性能管理) - Application Performance Management & Monitoring
在信息科學和系統控制領域,APM致力於監控和管理應用軟件性能和可用性。
經過監測和診斷複雜應用程序的性能問題,來保證軟件應用程序的良好運行(預期的服務)。
應用性能管理主要指對企業的關鍵業務應用進行監測、優化,提升企業應用的可靠性和質量,保證用戶獲得良好的服務,下降IT總擁有成本(TCO)。
一個企業的關鍵業務應用的性能強大,能夠提升競爭力,並取得商業成功,所以,增強應用性能管理(APM)能夠產生巨大商業利益。
(京東VS淘寶VS騰訊商城)
APM的覆蓋範圍包括:終端用戶體驗,應用架構映射,應用事務的分析,深度應用診斷,和數據分析。
現代APM體系,基本都是參考Google的Dapper(大規模分佈式系統的跟蹤系統)的體系來作的。
經過跟蹤請求的處理過程,來對應用系統在先後端處理、服務端調用的性能消耗進行跟蹤。
關於Dapper的介紹能夠看這個連接:http://bigbully.github.io/Dapper-translation/java
過去,企業的IT部門在測量系統性能時,通常重點測量爲最終用戶提供服務的硬件組件的利用率,如CPU利用率以及經過網絡傳輸的字節數。雖然這種方法也提供了一些寶貴的信息,但卻忽視了最重要的因素--最終用戶的響應時間。如今經過事務處理過程監測、模擬等手段可真實測量用戶響應時間,此外還能夠報告誰正在使用某一應用、該應用的使用頻率以及用戶所進行的事務處理過程是否成功完成。python
經過對應用系統各類組件(數據庫、中間件)的監測,迅速定位系統故障,如發生Oracle數據庫死鎖等問題。git
精確分析系統各個組件佔用系統資源狀況,中間件、數據庫執行效率,根據應用系統性能要求提出專家建議,保證應用在整個壽命週期內使用的系統資源要求最少,節約TCO。
新一代APM:讓整個IT團隊參與應用性能監控。
好的APM可讓IT組織中本來孤立的各個方面集中在一塊兒,好比自動生成準確的業務應用系統組件關係視圖、關係視圖實時更新、準確掌握應用訪問邏輯關係等。APM工具能夠幫助那些本來一直侷限於監控自身領域的管理員,使他們成長爲理解應用及其支持基礎架構的更有戰略價值的性能管理專業人員。github
APM產品包括商業產品、開源產品,琳琅滿目,很是多,這裏就介紹幾個常見的,應用比較普遍,廣受好評的。web
github地址:https://github.com/naver/pinpoint
Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
Pinpoint是一個用Java編寫的大規模分佈式開源APM工具。
這個是一個韓國團隊開源出來的,經過JavaAgent的機制來作字節碼代碼植入,實現加入traceid和抓取性能數據的目的。
NewRelic、Oneapm之類的工具在java平臺上的性能分析也是相似的機制。
文檔:
http://www.herohuang.com/2017/03/01/apm-pinpoint/spring
github地址:https://github.com/wu-sheng/sky-walking
wu-sheng/sky-walking
這是國內一位叫吳晟的兄弟開源的,也是一個對JAVA分佈式應用程序集羣的業務運行狀況進行追蹤、告警和分析的系統,在github上也有600+顆星了。
功能相對pinpoint仍是稍弱一些,插件還沒那麼豐富。數據庫
官網:http://zipkin.io/
OpenZipkin · A distributed tracing system
openzipkin/zipkin:GitHub:https://github.com/openzipkin/zipkin
這個是twitter開源出來的,也是參考Dapper的體系來作的。
Zipkin的java應用端是經過一個叫Brave的組件來實現對應用內部的性能分析數據採集。
Brave的github地址:https://github.com/openzipkin/brave
這個組件經過實現一系列的java攔截器,來作到對http/servlet請求、數據庫訪問的調用過程跟蹤。
而後經過在spring之類的配置文件里加入這些攔截器,完成對java應用的性能數據採集。
在線安裝
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
java -jar zipkin.jar
java應用:https://github.com/spring-cloud/spring-cloud-sleuth
python支持:https://github.com/Yelp/py_zipkin後端
github地址:https://github.com/dianping/cat
GitHub - dianping/cat: Central Application Tracking
這個是大衆點評開源出來的,實現的功能也仍是蠻豐富的,國內也有一些公司在用了。
不過他實現跟蹤的手段,是要在代碼裏硬編碼寫一些「埋點」,也就是侵入式的。
這樣作有利有弊,好處是能夠在本身須要的地方加埋點,比較有針對性;
壞處是必須改動現有系統,不少開發團隊不肯意。網絡
這兩個工具的組合,是針對PHP應用提供APM能力的工具,也是非侵入式的。
Xhprof github地址:https://github.com/preinheimer/xhprof (Facebook開源出來的)
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地址:https://github.com/perftools/xhgui
GitHub - perftools/xhgui: A graphical interface for XHProf data built on MongoDB架構
前面三個工具裏面,推薦的順序依次是: Pinpoint -> Zipkin -> CAT 。緣由很簡單,就是這三個工具對於程序源代碼和配置文件的侵入性,是依次遞增的:Pinpoint:基本不用修改源碼和配置文件,只要在啓動命令裏指定java agent參數便可,對於運維人員來說最爲方便;Zipkin:須要對Spring、web.xml之類的配置文件作修改,相對麻煩一些;CAT:由於須要修改源碼設置埋點,所以基本不太可能由運維人員單獨完成,而必須由開發人員的深度參與了,而不少開發人員是比較抗拒在代碼中加入這些東西滴;