精確定位簡介
一、簡介
在本教程中,我們將探索Pinpoint ,這是一款具有出色功能的開源 APM(應用程序性能管理)軟件。
首先,我們將了解其基本架構及其工作部分的基礎知識。然後,我們將看一個實時性能監控的工作示例。
2. Pinpoint的架構
讓我們看看Pinpoint 的架構:
從這張圖中,我們可以確定四個主要組件:
- Pinpoint Collector:收集有關已配置應用程序數據的 Web 應用程序
- HBase Storage:Pinpoint 存儲數據的非關係型開源數據庫
- Pinpoint Web UI:軟件的前端
- Pinpoint Agent:JVM Agent 將我們的應用程序的配置文件數據發送到 Pinpoint Collector
Pinpoint Collector 是軟件的脈動心臟。它可以通過兩種不同的方式收集數據。第一種是顯式收集數據——在這種情況下,應用程序直接調用 Pinpoint API。第二種是自動的,依賴於字節碼檢測,這意味著 Pinpoint 在類加載時修改應用程序代碼,向收集器添加 TCP/UDP 網絡調用。
3.運行實例
現在讓我們使用docker-compose
使用已經組合好的 Pinpoint 應用程序環境來運行一個快速入門示例:
$ git clone https://github.com/pinpoint-apm/pinpoint-docker.git
$ cd pinpoint-docker
$ docker-compose pull && docker-compose up -d
最後一個命令在下載時可能需要一些時間來執行,然後會顯示附加到 Pinpoint 快速入門展示櫃的所有環境。
查看運行結束時啟動的容器,我們看到一些額外的組件是基礎設施的一部分:
- Pinpoint-QuickStart:我們正在監控的基於 Tomcat 的示例應用程序
- Pinpoint-Flink:啟用Application Inspector,用於檢查Application的資源
- Pinpoint-Zookeeper:只是一個使用 Zookeeper 圖像和 Pinpoint 的例子
- Pinpoint-Mysql和Pinpoint-Batch:用於設置Alarms
現在讓我們點擊示例應用程序的一些端點,以便 APM 有一些指標可以跟踪。在地址[http://localhost:8085](http://localhost:8085)
處,系統會提示我們可以調用的端點列表。對於此演示,讓我們通過單擊這些相關鏈接來發出三個 HTTP 請求:
-
callSelf/getCurrentTimestamp
-
callSelf/httpclient4/getGeoCode
-
consumeCpu
3.1.網絡客戶端
現在讓我們訪問 Web 客戶端,地址為[http://localhost:8080](http://localhost:8080)
。在這裡,當我們從應用列表中選擇“快應用”應用時,我們會看到這個網頁:
我們可以清楚地看到我們發出了三個 Web 請求,其中兩個由應用程序本身解析,另一個發送到maps.googleapis.com.
此外,我們可以從應用程序周圍的圓圈顏色中看出,其中一個請求被認為是“緩慢的”,因為它花費了超過 5 秒的時間才完成。
如果我們現在點擊“ Inspector
”,我們可以看到很多關於 Java 應用程序狀態的詳細信息,包括memory
、 CPU
和response time:
3.2.精確定位 JVM 代理
我們可以訪問 Pinpoint APM 註冊的每個請求的詳細信息。通過在主頁上的Apdex Graph
上單擊並拖動鼠標,可以選擇一些跟踪的請求:
然後我們在一個新選項卡中看到所有各種調用的列表,其中包含Call Tree
中的詳細信息:
使用此圖,我們可以分析每個請求的完整調用堆棧。這對於了解瓶頸或減速很有用。檢查外部第三方應用程序的意外行為也很棒。
正是 Pinpoint JVM Agent 使這個詳細的堆棧跟踪對用戶可用。讓我們看看我們如何啟動受監控的 Java 應用程序:
pinpoint-quickstart:
//...
environment:
JAVA_OPTS: -javaagent:/pinpoint-agent/pinpoint-bootstrap-${PINPOINT_VERSION}.jar ...
JAVA_OPS
環境變量添加到docker-compose.yaml
中,將 JVM 監控的應用程序配置為使用 Pinpoint Java Agent 啟動。然後,該軟件會自動透明地檢測字節碼,以跟踪每次上下文切換期間的每次調用。
4。結論
在本文中,我們了解了 Pinpoint APM,這是一種開源工具,可幫助我們一目了然地了解我們的應用程序拓撲。我們了解瞭如何通過 JVM 代理和外部 Web 收集器以非侵入方式實時監控每筆交易。