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

篇幅一:APM基礎(chǔ)篇 1、什么是APM?

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

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

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

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

2、為什么要用APM?

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

優(yōu)先關(guān)注宏觀數(shù)據(jù),并不是說(shuō)測(cè)試人員無(wú)須關(guān)注微觀層面的問(wèn)題,在測(cè)試角度來(lái)看,先解決性能測(cè)試環(huán)境的數(shù)據(jù)采樣、收集問(wèn)題,再去評(píng)估生產(chǎn)環(huán)境,而線上的鏈路監(jiān)控需要研發(fā)跟運(yùn)維去配合,【研發(fā)角度場(chǎng)景】相對(duì)于測(cè)試人員來(lái)說(shuō)是弱關(guān)注了。</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 (大眾點(diǎn)評(píng))

CAT基于Java開(kāi)發(fā)的實(shí)時(shí)應(yīng)用監(jiān)控平臺(tái),包括實(shí)時(shí)應(yīng)用監(jiān)控,業(yè)務(wù)監(jiān)控。
https://github.com/dianping/cat

4、先說(shuō)結(jié)論

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

"Spring Cloud Slueth和zipkin之間的關(guān)系是什么?"

需要看詳細(xì)對(duì)比的,詳見(jiàn)下圖:
APM入門(mén)與實(shí)戰(zhàn)

5、再說(shuō)對(duì)比

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

篇幅二:Pinpoint實(shí)戰(zhàn)篇 1、Pinpoint架構(gòu)圖

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

架構(gòu)圖對(duì)應(yīng)說(shuō)明:

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

Pinpoint 消息的數(shù)據(jù)結(jié)構(gòu)主要包含三種類(lèi)型 Span,Trace 和 TraceId。

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

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

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

    同一個(gè) Trace 下的 Span 共享一個(gè) TransactionId,而且會(huì)按照 SpanId 和 ParentSpanId 排列成一棵有層級(jí)關(guān)系的樹(shù)形結(jié)構(gòu)。

  • TraceId 是 TransactionId、SpanId 和 ParentSpanId 的組合

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

3、Pinpoint部署

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

注意版本要求:

  • Java version required to run Pinpoint:</br>
    APM入門(mén)與實(shí)戰(zhàn)
  • HBase compatibility table:</br>
    APM入門(mén)與實(shí)戰(zhàn)
  • Agent compatibility table:</br>
    APM入門(mén)與實(shí)戰(zhàn)
    有兩種方式啟動(dòng):
    方式一:修改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必須唯一,標(biāo)志一個(gè)jvm
第三行:applicationName表示同一種應(yīng)用:同一個(gè)應(yīng)用的不同實(shí)例應(yīng)該使用不同的agentId,相同的applicationName

方式二:SpringBoot啟動(dòng)

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入門(mén)與實(shí)戰(zhàn)
Pinpoint 對(duì)代碼注入的封裝非常類(lèi)似 AOP,當(dāng)一個(gè)類(lèi)被加載的時(shí)候會(huì)通過(guò) Interceptor 向指定的方法前后注入 before 和 after 邏輯,在這些邏輯中可以獲取系統(tǒng)運(yùn)行的狀態(tài),并通過(guò) TraceContext 創(chuàng)建 Trace 消息,并發(fā)送給 Pinpoint 服務(wù)器。但與 AOP 不同的是,Pinpoint 在封裝的時(shí)候考慮到了更多與目標(biāo)代碼的交互能力,因此用 Pinpoint 提供的 API 來(lái)編寫(xiě)代碼會(huì)比 AOP 更加容易和專(zhuān)業(yè)。

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

搭建一個(gè)java開(kāi)源項(xiàng)目jforum,跑在tomcat下,使用jmeter進(jìn)行壓測(cè),用戶100個(gè):

  • 服務(wù)器圖(ServerMap)

    通過(guò)可視化其組件的互連方式來(lái)了解任何分布式系統(tǒng)的拓?fù)?。單擊?jié)點(diǎn)將顯示有關(guān)組件的詳細(xì)信息,例如其當(dāng)前狀態(tài)和事務(wù)計(jì)數(shù)。
    APM入門(mén)與實(shí)戰(zhàn)

  • 實(shí)時(shí)活動(dòng)線程圖(Realtime Active Thread Chart)

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

  • 請(qǐng)求/響應(yīng)散布圖(Request/Response Scatter Chart)

    可視化請(qǐng)求計(jì)數(shù)和響應(yīng)模式,以確定潛在問(wèn)題??梢酝ㄟ^(guò)在圖表上拖動(dòng)來(lái)選擇事務(wù)以獲取更多詳細(xì)信息。
    APM入門(mén)與實(shí)戰(zhàn)

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

    增強(qiáng)分布式環(huán)境中每個(gè)事務(wù)的代碼級(jí)可見(jiàn)性,識(shí)別單個(gè)視圖中的瓶頸和故障點(diǎn)。
    APM入門(mén)與實(shí)戰(zhàn)

  • 檢查器(Inspector)

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

6、總結(jié)

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

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

7、項(xiàng)目場(chǎng)景

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

8、標(biāo)簽庫(kù)項(xiàng)目簡(jiǎn)單壓測(cè)

通過(guò)jmeter對(duì)標(biāo)簽庫(kù)進(jìn)行簡(jiǎn)單壓測(cè),腳本如下:
APM入門(mén)與實(shí)戰(zhàn)

通過(guò)APM發(fā)現(xiàn)問(wèn)題如下:
APM入門(mén)與實(shí)戰(zhàn)

pquery.do的res高達(dá)6782ms,需要安排開(kāi)發(fā)進(jìn)一步排查定位代碼問(wèn)題
APM入門(mén)與實(shí)戰(zhàn)
APM入門(mén)與實(shí)戰(zhàn)

另外一種場(chǎng)景,測(cè)試人員無(wú)法在頁(yè)面獲取到的信息(有些情況下,測(cè)試人員是沒(méi)有服務(wù)器權(quán)限),這些是服務(wù)底層的異常信息,可以通過(guò)CallTree來(lái)查看。

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

APM入門(mén)與實(shí)戰(zhàn)

參考文獻(xiàn):

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

名稱(chēng)欄目:APM入門(mén)與實(shí)戰(zhàn)-創(chuàng)新互聯(lián)
分享路徑:http://www.bm7419.com/article40/dcddho.html

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

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)