全鏈路跟蹤之Pinpoint
一、前言
1.1、緣由
隨著專案擴大和升級,系統架構也從最開始的單機模式進化到分散式架構,各個系統維護起來也比較費勁了,當遇到問題時無法快速定位問題點,這時迫切需要通過某些方法定位和跟蹤系統,以及監控系統性能。
實現方法有很多,可以自定義開發相關框架,也可以使用第三方開源的框架。如果是完全自己開發,短期內還無法完成,所以考慮使用第三方框架。
1.2、調研
調研了市面上幾個同類框架,有:
- Google的Dapper
- Twitter的Zipkin
- 點評的CAT
- Naver的Pinpoint
- Skywalking
通過對比,最終還是選擇了Pinpoint,最重要的原因是,對程式碼的零侵入,運用JavaAgent位元組碼增強技術,只需要加啟動引數即可。
二、初識Pinpoint
2.1、Pinpoint是什麼
Pinpoint是基於Java編寫的一個APM(APM:Application Performance Management,應用效能管理)工具。受Dapper的啟發,Pinpoint提供了一種解決方案,通過在分散式應用程式中跟蹤事務來幫助分析系統的整體結構以及它們中的元件之間的相互關係。
2.2、Pinpoint架構
架構說明:
- Pinpoint Collector:收集各種效能資料
- Pinpoint Agent:運行於應用中的探針
- Pinpoint Web UI:監控檢視介面
- HBase Storage:收集資料儲存庫
三、搭建環境
3.1、相關工具
- CentOS 7.4 64位
- JDK 1.8.0_144
- ZooKeeper 3.4.13
- Pinpoint 1.8.0
- HBase 1.2.8
- Tomcat 8.5.34
3.2、安裝JDK
3.3、安裝ZooKeeper
3.4、安裝HBase
3.4.1、下載
cd /data
3.4.2、安裝Zip解壓工具
yum install unzip
3.4.3、解壓HBase
unzip hbase-1.2.8/hbase-1.2.8-bin.tar.gz
mv hbase-1.2.8 hbase
3.4.4、修改配置
開啟 /data/hbase/conf/hbase-env.sh
修改為false,使用獨立安裝的Zookeeper
export HBASE_MANAGES_ZK=false
開啟 /data/hbase/conf/hbase-site.xml
新增如下配置
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
3.4.5、啟動HBase
cd /data/hbase/bin
./start-hbase.sh
3.4.6、建立資料表
./hbase shell hbase-create.habse
3.5、安裝Tomcat
3.5.1、下載
cd /data
unzip apache-tomcat-8.5.34
mv apache-tomcat-8.5.34 tomcat
3.5.2、啟動
cd /data/tomcat/bin
./startup.sh
3.6、安裝Pinpoint
3.6.1、下載
分別下載:pinpoint-agent-1.8.0.tar.gz、pinpoint-collector-1.8.0.war、pinpoint-web-1.8.0.war
pinpoint-collector-1.8.0.war 重新命名為 collector.war
pinpoint-web-1.8.0.war 重新命名為 ROOT.war
拷貝到Tomcat的webapps目錄下:
由於Tomcat、HBase、Zoookeeper都安裝在同一臺伺服器中,所以Pinpoint無需更改配置檔案,保持預設即可。
3.6.2、訪問WEB
3.7、配置Agent
3.7.1、配置
解壓pinpoint-agent-1.8.0.tar.gz,重新命名為 pinpoint-agent,拷貝到Java應用所在伺服器中。
修改 pinpoint.config 檔案
採集器所在伺服器IP地址
profiler.collector.ip=172.19.1.2
設定應用程式型別為 Spring Boot
profiler.applicationservertype=SPRING_BOOT
3.7.2、啟動應用
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.0.jar -Dpinpoint.agentId=user-service -Dpinpoint.applicationName=user-service user-service.jar
-javaagent:pinpoint探針路徑
-Dpinpoint.agentId:探針ID
-Dpinpoint.applicationName:應用名稱
四、預覽
五、其它
- pinpoint-bootstrap-1.8.0.jar 的名稱不能修改,否則導致啟動失敗
- 啟動Collector後,自動就開啟了9994、9995、9996埠,伺服器應開放對應埠