APM入門與實戰(zhàn)-創(chuàng)新互聯(lián)

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

APM,全稱:Application Performance Management,目前市面的系統(tǒng)基本都是參考Google的Dapper(大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng))來做的,翻譯傳送門《google的Dapper 中文翻譯》

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為陜州企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站制作,陜州網(wǎng)站改版等技術服務。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

思考下:不遵守該理論的是偽APM,耍流氓嗎?

APM的核心思想是什么?在應用服務各節(jié)點相互調(diào)用的時候,從中記錄并傳遞一個應用級別的標記,這個標記可以用來關聯(lián)各個服務節(jié)點之間的關系。比如兩個應用服務節(jié)點之間使用 HTTP 作為傳輸協(xié)議的話,那么這些標記就會被加入到 HTTP 頭中??梢娙绾蝹鬟f這些標記是與應用服務節(jié)點之間使用的通訊協(xié)議有關的,常用的協(xié)議就相對容易加入這些內(nèi)容,一些按需定制的可能就相對困難些,這一點也直接決定了實現(xiàn)分布式追蹤系統(tǒng)的難度。

2、為什么要用APM?

有業(yè)務痛點,才要尋求解決方案,個人認為,APM需要優(yōu)先解決測試環(huán)境下兩個場景問題,基于測試先行的原則考慮:
APM入門與實戰(zhàn)

優(yōu)先關注宏觀數(shù)據(jù),并不是說測試人員無須關注微觀層面的問題,在測試角度來看,先解決性能測試環(huán)境的數(shù)據(jù)采樣、收集問題,再去評估生產(chǎn)環(huán)境,而線上的鏈路監(jiān)控需要研發(fā)跟運維去配合,【研發(fā)角度場景】相對于測試人員來說是弱關注了。</br>

3、市面上有哪些APM工具?
  • Pinpoint

Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
https://github.com/naver/pinpoint

  • SkyWalking

A distributed tracing system, and APM ( Application Performance Monitoring ) .
http://skywalking.org

  • Zipkin

Zipkin 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開發(fā)的實時應用監(jiān)控平臺,包括實時應用監(jiān)控,業(yè)務監(jiān)控。
https://github.com/dianping/cat

4、先說結論

目前比較貼合 Google Dapper 原理設計的,Pinpoint 優(yōu)于 Zipkin。
Pinpoint對代碼的零侵入,運用JavaAgent字節(jié)碼增強技術,添加啟動參數(shù)即可。
并且符合【測試角度場景】性能測試調(diào)優(yōu)監(jiān)控的宏觀;
當然,結論太早了,會有疑惑:

"Spring Cloud Slueth和zipkin之間的關系是什么?"

需要看詳細對比的,詳見下圖:
APM入門與實戰(zhàn)

5、再說對比

本質(zhì)上 Spring Cloud Slueth 與 Pinpoint 沒有可比性,真正對比的是Zipkin,Spring Cloud Slueth 聚焦在鏈路追蹤和分析,將信息發(fā)送到Zipkin,利用 Zipkin的存儲來存儲信息,當然,Zipkin也可以使用ELK來記錄日志和展示,再通過收集服務器性能的腳本把數(shù)據(jù)存儲到ELK,則可以展示服務器狀況信息了。Zipkin的總體展示,也是基于鏈路分析為主。
APM入門與實戰(zhàn)

篇幅二:Pinpoint實戰(zhàn)篇 1、Pinpoint架構圖

Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java. </br>
APM入門與實戰(zhàn)

架構圖對應說明:

  • Pinpoint-Collector:收集各種性能數(shù)據(jù)
  • Pinpoint-Agent:探針與應用服務器(例如tomcat)關聯(lián),部署到同一臺服務器上
  • Pinpoint-Web:將收集到的數(shù)據(jù)層現(xiàn)在web展示
  • HBase Storage:收集到數(shù)據(jù)存到HBase中
2、Pinpoint的數(shù)據(jù)結構

Pinpoint 消息的數(shù)據(jù)結構主要包含三種類型 Span,Trace 和 TraceId。

  • Span 是最基本的調(diào)用追蹤單元

    當遠程調(diào)用到達的時候,Span 指代處理該調(diào)用的作業(yè),并且攜帶追蹤數(shù)據(jù)。為了實現(xiàn)代碼級別的可見性,Span 下面還包含一層 SpanEvent 的數(shù)據(jù)結構。每個 Span 都包含一個 SpanId。

  • Trace 是一組相互關聯(lián)的 Span 集合

    同一個 Trace 下的 Span 共享一個 TransactionId,而且會按照 SpanId 和 ParentSpanId 排列成一棵有層級關系的樹形結構。

  • TraceId 是 TransactionId、SpanId 和 ParentSpanId 的組合

    TransactionId(TxId)是一個交易下的橫跨整個分布式系統(tǒng)收發(fā)消息的 ID,其必須在整個服務器組中是全局唯一的。也就是說 TransactionId 識別了整個調(diào)用鏈;SpanId(SpanId)是處理遠程調(diào)用作業(yè)的 ID,當一個調(diào)用到達一個節(jié)點的時候隨即產(chǎn)生;ParentSpanId(pSpanId)顧名思義,就是產(chǎn)生當前 Span 的調(diào)用方 Span 的 ID。如果一個節(jié)點是交易的最初發(fā)起方,其 ParentSpanId 是 -1,以標志其是整個交易的根 Span。下圖能夠比較直觀的說明這些 ID 結構之間的關系。</br>
    APM入門與實戰(zhàn)

3、Pinpoint部署

網(wǎng)上太多部署文檔,這里不詳細說明,簡要說明下:</br>
APM入門與實戰(zhàn)

注意版本要求:

  • Java version required to run Pinpoint:</br>
    APM入門與實戰(zhàn)
  • HBase compatibility table:</br>
    APM入門與實戰(zhàn)
  • Agent compatibility table:</br>
    APM入門與實戰(zhàn)
    有兩種方式啟動:
    方式一:修改tomat目錄下bin/catalina.sh,在Control Script for the CATALINA Server加入以下三行代碼:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/webapps/service/pp-agent/pinpoint-bootstrap-1.6.2.jar"

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp32tomcattest"

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=32tomcat"

第一行:pinpoint-bootstrap-1.6.2.jar的位置
第二行:agentId必須唯一,標志一個jvm
第三行:applicationName表示同一種應用:同一個應用的不同實例應該使用不同的agentId,相同的applicationName

方式二:SpringBoot啟動

java  -javaagent:/home/webapps/pp-agent/pinpoint-bootstrap-1.6.2.jar  -Dpinpoint.agentId=pp32tomcattest -Dpinpoint.applicationName=32tomcat -jar 32tomcat-0.0.1-SNAPSHOT.jar
4、代碼注入是如何工作的

APM入門與實戰(zhàn)
Pinpoint 對代碼注入的封裝非常類似 AOP,當一個類被加載的時候會通過 Interceptor 向指定的方法前后注入 before 和 after 邏輯,在這些邏輯中可以獲取系統(tǒng)運行的狀態(tài),并通過 TraceContext 創(chuàng)建 Trace 消息,并發(fā)送給 Pinpoint 服務器。但與 AOP 不同的是,Pinpoint 在封裝的時候考慮到了更多與目標代碼的交互能力,因此用 Pinpoint 提供的 API 來編寫代碼會比 AOP 更加容易和專業(yè)。

5、Pinpoint實戰(zhàn)效果演示

搭建一個java開源項目jforum,跑在tomcat下,使用jmeter進行壓測,用戶100個:

  • 服務器圖(ServerMap)

    通過可視化其組件的互連方式來了解任何分布式系統(tǒng)的拓撲。單擊節(jié)點將顯示有關組件的詳細信息,例如其當前狀態(tài)和事務計數(shù)。
    APM入門與實戰(zhàn)

  • 實時活動線程圖(Realtime Active Thread Chart)

    實時監(jiān)視應用程序內(nèi)的活動線程。(用了官方圖,當時沒截圖)
    APM入門與實戰(zhàn)

  • 請求/響應散布圖(Request/Response Scatter Chart)

    可視化請求計數(shù)和響應模式,以確定潛在問題??梢酝ㄟ^在圖表上拖動來選擇事務以獲取更多詳細信息。
    APM入門與實戰(zhàn)

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

    增強分布式環(huán)境中每個事務的代碼級可見性,識別單個視圖中的瓶頸和故障點。
    APM入門與實戰(zhàn)

  • 檢查器(Inspector)

查看應用程序的其他詳細信息,如CPU使用率,內(nèi)存/垃圾收集,TPS和JVM參數(shù)。
APM入門與實戰(zhàn)

6、總結

第一:PinPoint從宏觀上看:總體鏈路、服務總體狀態(tài)(cpu、內(nèi)存等等信息),符合【測試角度場景】性能測試調(diào)優(yōu)監(jiān)控的宏觀;
第二:Spring Cloud Slueth需要結合Zipkin從微觀來看:自身無法單獨提供展示,要結合Zipkin展示鏈路問題(并沒有服務器總體狀態(tài)的展示),更多服務器性能狀況等信息展示需要定制腳本通過ELK收集展示,符合【研發(fā)角度場景】性能測試調(diào)優(yōu)監(jiān)控的微觀;

總的來說兩者是結合體,要單獨使用的話,從測試業(yè)務上來看:PinPoint滿足,性能測試調(diào)優(yōu)監(jiān)控的宏觀【測試角度場景】

7、項目場景

訪問某個API,后端應用服務產(chǎn)生的一系列鏈路,為何請求一次有23次數(shù)據(jù)庫訪問呢?這里就是需要排查的的地方,詳細看看CallTree,找出可優(yōu)化的SQL查詢語句。
APM入門與實戰(zhàn)
APM入門與實戰(zhàn)
另外,在做性能測試的時候,服務器并發(fā)的IO,PP不斷寫入也會產(chǎn)生瓶頸,需要后續(xù)解決。

8、標簽庫項目簡單壓測

通過jmeter對標簽庫進行簡單壓測,腳本如下:
APM入門與實戰(zhàn)

通過APM發(fā)現(xiàn)問題如下:
APM入門與實戰(zhàn)

pquery.do的res高達6782ms,需要安排開發(fā)進一步排查定位代碼問題
APM入門與實戰(zhàn)
APM入門與實戰(zhàn)

另外一種場景,測試人員無法在頁面獲取到的信息(有些情況下,測試人員是沒有服務器權限),這些是服務底層的異常信息,可以通過CallTree來查看。

9、應用服務接入APM后的鏈路全景蜘蛛網(wǎng)圖

APM入門與實戰(zhàn)

參考文獻:

Pinpoint github
Pinpoint源碼解析(三)
Dapper,大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng)
Pinpoint學習筆記
Pinpoint v1.5.0 APM 視頻介紹

名稱欄目:APM入門與實戰(zhàn)-創(chuàng)新互聯(lián)
分享路徑:http://www.muchs.cn/article40/dcddho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、虛擬主機、Google、云服務器搜索引擎優(yōu)化、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設