apm是什么意思啊 apm是什么

篇幅一:APM 基礎篇1、什么是 APM?

APM,全稱:Application Performance Management ,目前市面的系統基本都是參考 Google 的 Dapper(大規模分布式系統的跟蹤系統)來做的,翻譯傳送門《google 的Dapper 中文翻譯》
思考下:不遵守該理論的是偽 APM,耍流氓嗎?
APM 的核心思想是什么? 在應用服務各節點相互調用的時候,從中記錄并傳遞一個應用級別的標記,這個標記可以用來關聯各個服務節點之間的關系 。比如兩個應用服務節點之間使用 HTTP 作為傳輸協議的話,那么這些標記就會被加入到 HTTP 頭中 ??梢娙绾蝹鬟f這些標記是與應用服務節點之間使用的通訊協議有關的,常用的協議就相對容易加入這些內容,一些按需定制的可能就相對困難些,這一點也直接決定了實現分布式追蹤系統的難度 。
2、為什么要用 APM?有業務痛點,才要尋求解決方案,個人認為,APM 需要優先解決測試環境下兩個場景問題,基于測試先行的原則考慮:

apm是什么意思啊  apm是什么

文章插圖
優先關注宏觀數據,并不是說測試人員無須關注微觀層面的問題,在測試角度來看,先解決性能測試環境的數據采樣、收集問題,再去評估生產環境,而線上的鏈路監控需要研發跟運維去配合,【研發角度場景】相對于測試人員來說是弱關注了 。
3、市面上有哪些 APM 工具?PinpointPinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.https://github.com/naver/pinpointSkyWalkingA distributed tracing system, and APM ( Application Performance Monitoring ) .http://skywalking.orgZipkinZipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data. Zipkin’s design is based on the Google Dapper paper.http://zipkin.io/CAT (大眾點評)CAT 基于 Java 開發的實時應用監控平臺,包括實時應用監控,業務監控 。https://github.com/dianping/cat4、先說結論目前比較貼合 Google Dapper 原理設計的,Pinpoint 優于 Zipkin 。Pinpoint 對代碼的零侵入,運用 JavaAgent 字節碼增強技術,添加啟動參數即可 。并且符合【測試角度場景】性能測試調優監控的宏觀;當然,結論太早了,會有疑惑:
“ Spring Cloud Slueth 和 zipkin 之間的關系是什么? “
需要看詳細對比的,詳見下圖:
apm是什么意思啊  apm是什么

文章插圖
5、再說對比本質上 Spring Cloud Slueth 與 Pinpoint 沒有可比性,真正對比的是 Zipkin,Spring Cloud Slueth 聚焦在鏈路追蹤和分析,將信息發送到 Zipkin,利用 Zipkin 的存儲來存儲信息,當然,Zipkin 也可以使用 ELK 來記錄日志和展示,再通過收集服務器性能的腳本把數據存儲到 ELK,則可以展示服務器狀況信息了 。Zipkin 的總體展示,也是基于鏈路分析為主 。
apm是什么意思啊  apm是什么

文章插圖
篇幅二:Pinpoint 實戰篇1、Pinpoint 架構圖Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
apm是什么意思啊  apm是什么

文章插圖
架構圖對應說明:
Pinpoint-Collector:收集各種性能數據Pinpoint-Agent:探針與應用服務器(例如 tomcat) 關聯,部署到同一臺服務器上Pinpoint-Web:將收集到的數據層現在 web 展示HBase Storage:收集到數據存到 HBase 中2、Pinpoint 的數據結構Pinpoint 消息的數據結構主要包含三種類型 Span,Trace 和 TraceId 。
Span 是最基本的調用追蹤單元當***調用到達的時候,Span 指代處理該調用的作業,并且攜帶追蹤數據 。為了實現代碼級別的可見性,Span 下面還包含一層 SpanEvent 的數據結構 。每個 Span 都包含一個 SpanId 。Trace 是一組相互關聯的 Span*** 同一個 Trace 下的 Span 共享一個 TransactionId,而且會按照 SpanId 和 ParentSpanId 排列成一棵有層級關系的樹形結構 。TraceId 是 TransactionId、SpanId 和 ParentSpanId 的組合TransactionId(TxId)是一個交易下的橫跨整個分布式系統收發消息的 ID,其必須在整個服務器組中是全局唯一的 。也就是說 TransactionId 識別了整個調用鏈;SpanId(SpanId)是處理***調用作業的 ID,當一個調用到達一個節點的時候隨即產生;ParentSpanId(pSpanId)顧名思義,就是產生當前 Span 的調用方 Span 的 ID 。如果一個節點是交易的最初發起方,其 ParentSpanId 是 -1,以標志其是整個交易的根 Span 。下圖能夠比較直觀的說明這些 ID 結構之間的關系 。

推薦閱讀