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

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

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

轉載于:https://my.oschina.net/yanpenglei/blog/1863383

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 進程詳解

Linux內核的七大區間 1.進程管理(進程創建,進程的三種狀態,進程間的調度,調度算法...) 2.內存管理(段式管理(Linux所有段都從0開始),頁式管理--地址偏移量) 3…

C#2.0 委托

委托 委托是一個非常不錯的設計,允許我們把方法做為參數傳遞,實現了開放閉放原則。在方法中我們只要有一個委托占位,調用者就可以傳入符合簽名的方法來做不同的操作,這也面向對象開發中多態的魅力。 但是在C#1.0的時候&#xff…

qt亂碼Could not decode“xxx.cpp“ with “UTF-8“-encoding.Editing not possible問題處理

問題描述:如題: 解決方法: 1、點擊Select Encoding按鈕 2、選擇按照系統編碼 3、選中System后點擊按編碼重新載入 4、問題解決

bootargs中的環境變量說明和一些常用的uboot命令

bootargs中的環境變量說明和一些常用的uboot命令 一些常見的uboot命令: Help [command]在屏幕上打印命令的說明 Boom [addr]啟動在內存儲器的內核 Tftpboot通過tftp啟動內核 Saveenv保存環境變量 setenv name [value] 設置環境變量 bootargs中的環境變量 co…

特斯拉自動駕駛系統秘密,來自特斯拉AI總監爆料

據外媒報道,特斯拉汽車公司人工智能(AI)總監安德烈卡帕西(Andrej Karpathy)日前參加2018年TRAIN AI大會時,剖析了該公司構建自動駕駛儀(Autopilot)計算機視覺解決方案的方法。據介紹,Autopilot編…

快捷鍵匯總

navicat 運行選中代碼 ctrshiftr navicat 運行所有代碼 ctrr 快速顯示桌面 wind 轉載于:https://www.cnblogs.com/caer/p/6064571.html

js做倒計時

var dinshiqi setInterval(timerun,1000) function timerun(){ //timegundong var now_time new Date(); var hours now_time.getHours(); //時 var minutes now_time.getMinutes(); //分 var seconds now_time.getSeconds(); //秒 //秒鐘 show_seconds 59 - parseInt(s…

QT右鍵點擊添加庫不響應的解決辦法

問題描述 QT在pro右鍵點擊添加庫不響應 解決方案 雙擊打開pro文件 在pro文件界面里單擊鼠標右鍵,并選擇添加庫。 解決問題

爬取前塵無憂python職位信息并保存到mongo數據庫

1.re實現 1 import re,os2 import requests3 from requests.exceptions import RequestException4 5 MAX_PAGE 10 #最大頁數6 KEYWORD python7 headers {8 User-Agent:9 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik…

實驗八——函數定義及調用總結

1.本次課學習到的知識點: (1)學習了數字金字塔。pyramid ()函數功能,函數定義時,形參n決定數字金字塔的層數; (2)不返回結果的函數定義: (3)復數運算: c1x1(y1) i,c2x2(y…

Apache JMeter 記一次使用HTTP工具POST提交JSON數據進行送積分高并發壓測(二)

一、前言 前面文章已經介紹Apache JMeter的基本概率和如果使用,但作為一個開發人員,自己寫的代碼都應該要好好的COD EREVIEW,好好的自測吧。但是有些場景比如高并發、負載和性能測試的時候,不借助工具是不好進行測試的。Jmter工具設計之初是用…

QT pro文件詳解

1.QT pro文件配置項說明 注釋:注釋是從一行的#開始,到這一行的結束。QT :這個是添加QT項目需要的模塊的,若項目中要排除某個模塊,也可用QT -配置項。TEMPLATE : 這個配置項確定qmake為這個應用程序生成哪種makefile …

可伸縮視頻編碼svc

可伸縮視頻編碼(Scalable Video Coding, SVC)技術把視頻信號編碼成分層的形式,當帶寬不足時只對基本層的碼流進行傳輸和解碼,但這時解碼的視頻質量不高。當帶寬慢慢變大時,可以傳輸和解碼增強層的碼流來提高視頻的解碼…

【vim】幾種模式的切換

很多初學者啟動vim后,不知道怎么輸入字符:按了半天字母,結果屏幕還是空的。 vim和記事本或WORD不一樣,不是一打開后就可以輸入文字,此時它處于正常模式。 vim一共有4個模式: 正常模式 (Normal-mode) 插入模…

數據結構----順序表與單鏈表(JAVA)

下面為學習順序表和單鏈表的一些基本操作函數&#xff1a; 1 public class SeqList<T> extends Object {2 protected int n;3 protected Object[] element;4 5 public SeqList(int length) {6 this.element new Object[length];7 this.n 0…

SSH初體驗系列--Hibernate--1--環境配置及demo

最近在學hibernate,常見的教程都是搭配mysql,因為公司本地電腦用的是pg,所以就嘗試著做個pg的小demo. 自己也是邊學邊寫&#xff0c;只當是加深印象.話不多說&#xff0c;直接開始; 一) 準備工作; 1) 本地安裝postgresql ,這個不多說&#xff0c;自己去網上下載; 注: 本次使用的…

Qt學習:QAction系列詳解

一、QAction類詳解 【詳細描述】 QAction類提供了抽象的用戶界面action&#xff0c;這些action可以被放置在窗口部件中。 應用程序可以通過菜單&#xff0c;工具欄按鈕以及鍵盤快捷鍵來調用通用的命令。由于用戶期望每個命令都能以相同的方式執行&#xff0c;而不管命令所使用的…

H.264優秀特征

一、主要特性 1、H.264/AVC相對以前的編碼方法&#xff0c;以MPEG-2為例&#xff0c;在圖像內容預測方面提高編碼效率&#xff0c;改善圖像質量的主要特點如下&#xff1a; ● 可變塊大小運動補償&#xff1a; 選擇運動補償大小和形狀比以前的標準更靈活&#xff0c;最小的…

Linux 文件系統 EXT4 的前世今生

在先前關于Linux文件系統的文章中&#xff0c;我寫了一份說明書去介紹Linux文件系統&#xff0c;里面有一些高級的概念&#xff0c;比如說&#xff0c;一切都是文件。我很想去深入地討論更多EXT文件系統的特性的信息。所以&#xff0c;首先讓我們來回答這個問題&#xff1a;什么…

windows 添加開始菜單

C:\Users\用戶名&#xff08;為你設置的電腦名稱&#xff09;\AppData\Roaming\Microsoft\Windows\Start Menu C:\ProgramData\Microsoft\Windows\Start Menu 注&#xff1a;默認狀態下AppData和ProgramData文件夾為隱藏狀態&#xff0c;所以要查看需要先顯示隱藏的文件。 具體…