天天看點

應用性能管理(APM, Application Performance Management)總結一、APM核心功能二、關鍵技術三、開源APM附錄 A 閉源APM

當下成熟的網際網路公司都建立有從基礎設施到應用程式的全方位監控系統,力求及時發現故障進行處理并為優化程式提供性能資料支援,降低整體運維成本。國内外商業的apm有compuware、imaster、博睿bonree、聽雲、new relic、雲智慧、oneapm、appdyn、amics等。 本文主要針對java技術體系介紹apm的關鍵實作技術以及業界主流apm工具的功能特點。

apm被形象的稱為應用程式的私人醫生,越來越收到青睐,比起通過日志方式記錄關鍵資料顯然要更加實用,apm主要包含如下核心功能:

應用系統存活檢測

應用程式性能名額檢測(cpu使用率、記憶體使用率等等。。。)

應用程式關鍵事件檢測

檢測資料持久化存儲并能夠多元度查詢

服務調用跟蹤

監控告警

java程式運作時性能名額可通過java.lang.runtime、java.lang.management中的方法采集。除此之外,著名的Metrics類庫也能夠通過這些底層技術擷取java程式性能名額。cpu使用率等基礎資料的采集僅僅是性能監控的一部分,metrics提供了更為豐富的五個基本度量類型,可在此基礎上開發滿足需求的監控名額。

gauges(度量)

counters(計數器)

histograms(直方圖資料)

meters(tps電腦)

timers(計時器)

參考文章:

大型系統中每次請求往往都由若幹個獨立的服務調用組成,一次從上遊到下遊的調用被稱為一次trace,為了監控程式性能,需要知道每個獨立服務的執行時間以及網絡通信開銷時間,google曾經發表過一個介紹其内部實作dapper的論文,twitter參照此論文實作了一個名為zipkin的服務調用追中系統并已開源。

應用性能管理(APM, Application Performance Management)總結一、APM核心功能二、關鍵技術三、開源APM附錄 A 閉源APM
應用性能管理(APM, Application Performance Management)總結一、APM核心功能二、關鍵技術三、開源APM附錄 A 閉源APM

trace系統設計的核心技術就是攔截每次服務請求,在請求中加入辨別符,記錄一次完整的trace各階段的執行時間。當然也可以侵入式的寫監控代碼主動向trace server發送執行時間。

應用性能管理(APM, Application Performance Management)總結一、APM核心功能二、關鍵技術三、開源APM附錄 A 閉源APM
應用性能管理(APM, Application Performance Management)總結一、APM核心功能二、關鍵技術三、開源APM附錄 A 閉源APM

應用程式向apm發送的采集資料,通常都是格式,為了實作節約存儲空間、計時查詢,通常使用時間序列資料庫存儲采集資料。

當采集到應用程式的性能資料後,除了人為主動的在系統上檢視之外,另一個主要的使用功能點就是,監控系統根據設定的報警規則主動報警。實作觸發告警有多種方法,常見的方法有:周期性主動輪詢采集到的性能資料,并且根據報警規則,進行報警處理;除此之外,通過流式計算方法也可以進行報警處理,這裡推薦使用基于postgresql資料庫的pipelinedb,通過sql的方式設定監控規則,當到達報警條件時,通過資料庫觸發器調用外部函數進行告警處理。

zipkin是twitter開源的trace工具,通過java程式中引入用戶端,可隐式攔截http、thrift等形式服務調用。通過http、kafka、scribe等方式同步監控資料到服務端,zipkin帶有web ui,但沒有告警功能。

cat是大衆點評開源的功能完備的apm系統,支援jvm性能資料采集、服務trace、告警等功能,但需要寫監控代碼。

prometheus從官方介紹來說,他是一個開源的系統監控和報警工具,最初由soundcloud推出。自2012成立以來,許多公司群組織都采用了prometheus,項目有一個非常活躍的開發者和使用者社群。它現在是一個獨立的開源項目,并獨立于任何公司。prometheus具有以下主要特性:

多元度資料模型(由鍵/值對确定的時間序列資料模型)。

具有一個靈活的查詢語言來利用這些次元。

不依賴分布式存儲;單個伺服器節點工作。

時間序列的采集是通過http pull的形式,解決很多push架構的問題。

通過中介網關支援短時間序列資料的收集。

監控目标是通過服務發現或靜态配置。

多種資料展示面闆支援,例如grafana。

prometheus主要缺點:

單機缺點,單機下存儲量有限,根據你的監控量局限你的存儲時間。

記憶體占用率大,prometheus內建了leveldb,一個能高效插入資料的資料庫,在ssd盤下io占用比較高。同時可能會有大量資料堆積記憶體。但是這是可以配置的。

prometheus既可以使用定時輪詢應用程式http接口擷取性能資料,也可以使用嵌入到應用程式中prometheus client主動收集資料推送給prometheus server。除了收集應用程式性能資料外,prometheus還可以收集主機性能資料,真對不同性能名額prometheus提供了不同的exports,也可以自己開發exports收集資料傳遞給prometheus。prometheus隻支援性能采集告警,不支援服務trace追中。

hawkular是一個功能完備的apm系統,應用程式中嵌入hawkular用戶端,主動将采集資料通過http或者kafka傳遞給hawkular。hawkular支援jvm性能資料采集、服務trace、告警等功能。其中jvm性能資料采集使用jmx,服務trace使用zipkin用戶端。

南韓開源的一個功能完備的apm系統,支援jvm性能資料采集、服務trace、告警等功能。

appdash是sourcegraph開源的一款用go實作的分布式系統跟蹤工具套件,它同樣是以google的 dapper為原型設計和實作的,目前用于sourcegraph平台的性能跟蹤和監控。

apache htrace是cloudera開源出來的一個分布式系統跟蹤架構,支援hdfs和hbase等系統。該項目目前還在孵化階段。

京東開源的基于dubbo的調用分布跟蹤系統,類似zipkin,功能不夠完善。

宜人貸開源的類似zipkin分布式跟蹤系統,功能不夠完善。

可視化展示spring boot metrics,監控資料不能持久化存儲,沒有trace功能,沒有監控告警功能,但可周期性采集metrics,發送給其他監控軟體如slack進行告警處理,同時也可以實作監控資料存儲。

我們希望一個功能完善的apm系統具有jvm性能監控、服務調用追中、監控告警功能,大衆點評cat、pinpoint、hawkular相對來講功能更為完備,推薦使用。

google dapper

淘寶 鷹眼tracing

新浪watchman

美團 mtrace