1. 程式人生 > >Dubbo 整合 Pinpoint 做分布式服務請求跟蹤

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

-c oracle 啟動 ebs ofo get pts 應用性能管理 線程

在使用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

截圖

首頁

技術分享圖片

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

技術分享圖片
技術分享圖片

請求響應明細和系統拓撲

技術分享圖片

視圖中定位瓶頸和失敗點

技術分享圖片
技術分享圖片

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

技術分享圖片
技術分享圖片

參考:

https://segmentfault.com/a/1190000011290541

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

Contact

  • 作者:鵬磊
  • 出處:http://www.ymq.io/2018/07/26/Dubbo-Pinpoint
  • 版權歸作者所有,轉載請註明出處
  • Wechat:關註公眾號,搜雲庫,專註於開發技術的研究與知識分享

技術分享圖片

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