Appdynamics
是什么
Appdynamics 是一種服務(wù)性能監(jiān)控/管理工具,主要包含兩種功能:
- 終端用戶性能體驗(yàn)監(jiān)控
- 計(jì)算資源監(jiān)控
類似的工具
在 這篇文章 中詳細(xì)分析了微服務(wù)技術(shù)選型的內(nèi)容,其中服務(wù)監(jiān)控部分截圖如下

為什么
微服務(wù)本身的復(fù)雜度帶來的問題
微服務(wù)的特點(diǎn)決定了功能模塊的部署是分布式的,以往在單應(yīng)用環(huán)境下,所有的業(yè)務(wù)都在同一個(gè)服務(wù)器上,如果服務(wù)器出現(xiàn)錯(cuò)誤和異常,我們只要盯住一個(gè)點(diǎn),就可以快速定位和處理問題,但是在微服務(wù)的架構(gòu)下,大部分功能模塊都是單獨(dú)部署運(yùn)行的,彼此通過總線交互,都是無狀態(tài)的服務(wù),這種架構(gòu)下,前后臺(tái)的業(yè)務(wù)流會(huì)經(jīng)過很多個(gè)微服務(wù)的處理和傳遞,我們難免會(huì)遇到這樣的問題:
- 分散在各個(gè)服務(wù)器上的日志怎么處理?
- 如果業(yè)務(wù)流出現(xiàn)了錯(cuò)誤和異常,如何定位是哪個(gè)點(diǎn)出的問題?
- 如何快速定位問題?
- 如何跟蹤業(yè)務(wù)流的處理順序和結(jié)果?
我們發(fā)現(xiàn),以前在單應(yīng)用下的日志監(jiān)控很簡(jiǎn)單,在微服務(wù)架構(gòu)下卻成為了一個(gè)大問題,如果無法跟蹤業(yè)務(wù)流,無法定位問題,我們將耗費(fèi)大量的時(shí)間來查找和定位問題,在復(fù)雜的微服務(wù)交互關(guān)系中,我們就會(huì)非常被動(dòng)。
微服務(wù)時(shí)代 運(yùn)維監(jiān)控是難點(diǎn)

下面是 appdynamics 官方介紹視頻中給出的例子,從中可以看出,一個(gè)簡(jiǎn)單的登陸請(qǐng)求,跨越了 5 個(gè)服務(wù)節(jié)點(diǎn)。

appdynamics 會(huì)收集同一個(gè)一段時(shí)間內(nèi)的處理情況,從中可以查看是否存在性能問題

怎么用
打開 官網(wǎng)

- 點(diǎn)擊 What is AppDynamics,查看介紹視頻
- 點(diǎn)擊 What is AppDynamics,注冊(cè)之后開始試用
根據(jù)網(wǎng)站說明注冊(cè)賬戶,注冊(cè)之后,會(huì)收到 appdynamics 發(fā)來的注冊(cè)確認(rèn)郵件。

根據(jù)郵件上的步驟提示,前往個(gè)人 SaaS,填寫用戶名密碼,便可以查看 appdynamics Dashboard,根據(jù)第三步的提示,前往 appdynamics agent 的安裝下載頁面。


下面,嘗試搭建一個(gè) service,注冊(cè)到 appdynamics 上,看 service 的運(yùn)行狀況。
為了方便起見,使用 spring.io 上的例子,選取一個(gè)簡(jiǎn)單的 REST service 作為試驗(yàn)使用,執(zhí)行下面的命令克隆并構(gòu)建 jar 包
git clone https://github.com/spring-guides/gs-rest-service.git
cd gs-rest-service
cd complete
./gradlew build
將下載的 java agent 壓縮包解壓后放到 complete 的目錄下,重命名為 appagent,最后使用 java 命令指定 agent 運(yùn)行上一步構(gòu)建的 jar 包。這里 是 appdynamics java agent 的使用說明,如果在下面的安裝使用過程中遇到問題,請(qǐng)參考解決。
java -javaagent:./appagent/javaagent.jar -jar build/libs/gs-rest-service-0.1.0.jar

在啟動(dòng)的過程中,spring boot 的日志輸出與 appdynamics 的輸出交互打印。從下面可以看出,spring boot 服務(wù)器已經(jīng)啟動(dòng)了,但是 appdynamics 的輸出還在持續(xù)。

等到日志停止輸出,如果發(fā)下沒有錯(cuò)誤提示,就說明已經(jīng)正常啟動(dòng),接下來打開 appdynamics 查看,此時(shí)可以發(fā)現(xiàn)已經(jīng)監(jiān)控了我們使用 agent 監(jiān)控的服務(wù)。

給剛剛啟動(dòng)的服務(wù)發(fā)送幾次請(qǐng)求



上面就是一個(gè)簡(jiǎn)單的 appdynamics java agent 的簡(jiǎn)單搭建使用過程,復(fù)雜的使用情景,請(qǐng)參照官網(wǎng)文檔學(xué)習(xí)使用。
關(guān)于文中提到的 java agent,相關(guān)概念可以參看 這里 和 這里。
本文了參考以下資源:
- https://www.cnblogs.com/wintersun/p/6747355.html
- https://www.youtube.com/watch?v=sFuFotJD1vM
- https://mp.weixin.qq.com/s/zFJokAv8lSQejGFTGJTJeQ
- https://www.appdynamics.com/
- https://36kr.com/p/5115119.html
- http://www.infoq.com/cn/articles/javaagent-illustrated
- https://zeroturnaround.com/rebellabs/how-to-inspect-classes-in-your-jvm/