Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

在使用Dubbo進行服務化或者整合應用後,假設某個服務後臺日誌顯示有異常,這個服務又被多個應用調用的情況下,我們通常很難判斷是哪個應用調用的,問題的起因是什麼,因此我們需要一套分佈式跟蹤系統來快速定位問題,Pinpoint可以幫助我們快速定位問題(當然,解決方案也不止這一種)。

什麼是Pinpoint

摘自Pinpoint學習筆記

https://skyao.gitbooks.io/learning-pinpoint

Pinpoint是一個開源的 APM (Application Performance Management/應用性能管理)工具,用於基於java的大規模分佈式系統。 仿照Google Dapper,Pinpoint通過跟蹤分佈式應用之間的調用來提供解決方案,以幫助分析系統的總體結構和內部模塊之間如何相互聯繫。

注:對於各個模塊之間的通訊英文原文中用的是transaction一詞,但是我覺得如果翻譯爲"事務"容易引起誤解,所以替換爲"交互"或者"調用"這種比較直白的字眼。

Pinpoint是一個分析大型分佈式系統的平臺,提供解決方案來處理海量跟蹤數據。2012年七月開始開發,2015年1月9日作爲開源項目啓動。

服務器地圖

ServerMap

通過可視化分佈式系統的模塊和他們之間的相互聯繫來理解系統拓撲。點擊某個節點會展示這個模塊的詳情,比如它當前的狀態和請求數量。

實時活動線程圖表

Realtime Active Thread Chart

實時監控應用內部的活動線程。

請求/應答分佈圖表

Request/Response Scatter Chart

長期可視化請求數量和應答模式來定位潛在問題。通過在圖表上拉拽可以選擇請求查看更多的詳細信息。

調用棧

CallStack

在分佈式環境中爲每個調用生成代碼級別的可視圖,在單個視圖中定位瓶頸和失敗點。

巡查

Inspector

查看應用上的其他詳細信息,比如CPU使用率,內存/垃圾回收,TPS,和JVM參數。

支持模塊

  • JDK 6+
  • Tomcat 6 / 7 / 8,Jetty 8/9,JBoss EAP 6,Resin 4,Websphere 6 / 7 / 8,Vertx 3.3 / 3.4 / 3.5
  • Spring,Spring Boot(嵌入式Tomcat,Jetty)
  • Apache HTTP Client 3.x / 4.x,JDK HttpConnector,GoogleHttpClient,OkHttpClient,NingAsyncHttpClient
  • Thrift Client,Thrift Service,DUBBO PROVIDER,DUBBO CONSUMER
  • ActiveMQ,RabbitMQ
  • MySQL,Oracle,MSSQL,CUBRID,POSTGRESQL,MARIA
  • Arcus,Memcached,Redis,CASSANDRA
  • iBATIS,MyBatis
  • DBCP,DBCP2,HIKARICP
  • gson,Jackson,Json Lib
  • log4j,Logback

部署

本次基礎環境搭建我就不講了,如不會,請自行搜索或者參考我博客文章https://www.souyunku.com

  • 說下我的測試環境:hadoop-2.7.4 集羣,hbase-1.3.1 集羣,zookeeper-3.4.9 單機,一共四臺機器
  • 爲避免部分端口不通等可疑問題, 建議關閉防火牆

下載

進入GitHub 找到需要的版本:https://github.com/naver/pinpoint/releases

wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-agent-1.7.3.tar.gz
wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-collector-1.7.3.war
wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-web-1.7.3.war

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.5/hbase-1.4.5-bin.tar.gz

準備環境

  1. 配置 JDK 環境 (筆者使用 Oracle 1.8, openJdk 可以)
  2. 搭建 Zookeeper 環境
  3. 搭建 Hbase (單節點即可)
  4. 在 Hbase/bin 下執行 ./hbase shell hbase-create.hbase 創建相關存儲結構
  5. 準備 Tomcat 環境
  6. 準備可分佈式部署的項目用於測試

修改 Pinpoint

pinpoint-collector-1.7.3.war

修改 WEB-INF\classes\hbase.properties 文件
hbase.client.host 設置爲 hbase 所用的 zk 地址

修改 WEB-INF\classes\pinpoint-collector.properties 文件
cluster.zookeeper.address 修改爲給 Pinpoint 準備的 zk 地址

pinpoint-web-1.7.3.war

修改 WEB-INF\classes\hbase.properties 文件
hbase.client.host 設置爲 hbase 所用的 zk 地址

修改 WEB-INF\classes\pinpoint-web.properties 文件
cluster.zookeeper.address 修改爲給 Pinpoint 準備的 zk 地址

部署 collector 和 web

  1. 將準備好的 tomcat 中 webapps 目錄清空
  2. 將上一步修好的兩個 war 包放置到 webapps
  3. 將 pinpoint-web-1.7.3.war 修改爲 ROOT.war
  4. 將 pinpoint-collector-1.7.3.war 修改爲 collector.war
  5. 啓動 Tomcat

查看 tomcat/logs 下的日誌, 注意觀察有沒有連接不到 2181 端口的日誌, 如果有, 可能是 war 中的配置沒有修改正確, 建議清空 tomcat 下 work、temp 文件夾後重試

部署 agent

  • 安裝agent,不需要修改哪怕一行代碼
  • Pinpoint對性能的影響最小(資源使用量增加約3%)
  1. 將 pinpoint-agent-1.7.3.tar.gz 解壓,
  2. 把 pinpoint.config 文件中 profiler.collector.ip 屬性值修改爲部署 collector 機器的主機名或 IP

注意: 每個項目所在的服務器都需要部署 agent

準備Dubbo示例程序

我的測試項目:https://github.com/souyunku/spring-boot-examples/tree/master/spring-boot-dubbo

配置 application.properties,修改地址 zookeeper.connect=127.0.0.1:2181 爲自己的zk

mvn clean package

修改自己項目的啓動參數

需要添加三個啓動參數

-javaagent: 指向 agent 目錄下的 pinpoint-bootstrap-1.7.3.jar
-Dpinpoint.agentId:設置全局唯一標示 ID
-Dpinpoint.applicationName: 設置項目的名稱(如果同一項目部署兩臺實例,這兩臺的參數應該一致)

Tomcat 和 Jar 項目有不同的添加方式,可參考如下方式修改

Tomcat

找到 bin/catalina.sh 添加下面的代碼

CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-1.7.3.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=tomcat1"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=webcontroller"

SpringBoot

# DUBBO 提供者
java -javaagent:/opt/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=dubbo-provider-1 -Dpinpoint.applicationName=dubbo-provider -jar dubbo-provider-1.0-SNAPSHOT.jar

# DUBBO 消費者
java -javaagent:/opt/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=dubbo-consumer-1 -Dpinpoint.applicationName=dubbo-consumer -jar dubbo-consumer-1.0-SNAPSHOT.jar

在自己的項目添加完畢啓動後,即可登錄 web 後臺查看集羣的狀態, 跟蹤請求

測試

訪問消費方地址模擬用戶請求

http://localhost:8080/sayHello?name=souyunku

截圖

首頁

Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

指定時間點的,選中區域的請求明細

Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤
Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

請求響應明細和系統拓撲

Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

視圖中定位瓶頸和失敗點

Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤
Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

消費者機器的, CPU使用率,內存/垃圾回收,TPS,和JVM參數

Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤
Dubbo 整合 Pinpoint 做分佈式服務請求跟蹤

參考:

https://segmentfault.com/a/1190000011290541

http://dubbo.apache.org/#!/blog/pinpoint.md?lang=en-us

Contact

關注公衆號-搜雲庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章