跟我學SpringCloud | 第十六篇:微服務利劍之APM平臺(二)Pinpoint

SpringCloud系列教程 | 第十六篇:微服務利劍之APM平臺(二)Pinpoint

Springboot: 2.1.7.RELEASEgit

SpringCloud: Greenwich.SR2github

1. Pinpoint概述

Pinpoint是一個由韓國人編寫的爲大型分佈式系統服務的鏈路跟蹤平臺,並提供大量鏈路跟蹤數據分析彙總解決方案。自2012年7月開始開發,與2015年1月作爲一個開源項目推出。web

2. Pinpoint主要特性

  • 分佈式事務跟蹤,跟蹤跨分佈式應用的消息。
  • 自動檢測應用拓撲,幫助你搞清楚應用的架構。
  • 水平擴展以便支持大規模服務器集羣。
  • 提供代碼級別的可見性以便輕鬆定位失敗點和瓶頸。
  • 使用字節碼加強技術,添加新功能而無需修改代碼。

3. Pinpoint優點

  • 無入侵:採用字節碼加強技術,新增功能無需修改代碼。
  • 性能高:對性能的影響很是小(資源使用量最小僅增長3%),異步數據傳輸,採用UDP協議讓出網絡鏈接優先級。

4. Pinpoint架構簡介

先看一下官方提供的架構圖,如圖:spring

Pinpoint主要包含了4個組件:shell

  • Pinpoint Agent:探針,附加到用於分析的Java服務
  • Pinpoint Collector:數據收集組件,部署在Web容器上
  • Pinpoint Web UI:數據展現組件,部署在Web容器上
  • HBase Storage:數據存儲組件

架構圖從上往下看,首先是經過Agent組件收集須要的數據,經過UPD/TCP的方式將數據發送給Collector,由Collector將數據分析整理事後存入HBase,經過Web UI組件將分析好的數據從HBase中讀出,展現在現代化的UI界面上。apache

5. Pinpoint數據結構簡介

Pinpoint中,核心數據結構由Span, Trace, 和 TraceId組成。bootstrap

  • Span: RPC (遠程過程調用/remote procedure call)跟蹤的基本單元; 當一個RPC調用到達時指示工做已經處理完成幷包含跟蹤數據。爲了確保代碼級別的可見性,Span擁有帶SpanEvent標籤的子結構做爲數據結構。每一個Span包含一個TraceId。
  • Trace: 多個Span的集合; 由關聯的RPC (Spans)組成. 在同一個trace中的span共享相同的TransactionId。Trace經過SpanId和ParentSpanId整理爲繼承樹結構.
  • TraceId: 由 TransactionId, SpanId, 和 ParentSpanId 組成的key的集合. TransactionId 指明消息ID,而SpanId 和 ParentSpanId 表示RPC的父-子關係。
    • TransactionId (TxId): 在分佈式系統間單個事務發送/接收的消息的ID; 必須跨整個服務器集羣作到全局惟一.
    • SpanId: 當收到RPC消息時處理的工做的ID; 在RPC請求到達節點時生成。
    • ParentSpanId (pSpanId): 發起RPC調用的父span的SpanId. 若是節點是事務的起點,這裏將沒有父span - 對於這種狀況, 使用值-1來表示這個span是事務的根span。

6. Pinpoint版本依賴

  • Pinpoint所須要的Java版本兼容:
Pinpoint Version Agent Collector Web
1.0.x 6-8 6-8 6-8
1.1.x 6-8 7-8 7-8
1.5.x 6-8 7-8 7-8
1.6.x 6-8 7-8 7-8
1.7.x 6-8 8 8
1.8.0 6-10 8 8
1.8.1+ 6-11 8 8
  • HBase所須要的版本兼容
Pinpoint Version HBase 0.94.x HBase 0.98.x HBase 1.0.x HBase 1.2.x HBase 2.0.x
1.0.x yes no no no no
1.1.x no not tested yes not tested no
1.5.x no not tested yes not tested no
1.6.x no not tested not tested yes no
1.7.x no not tested not tested yes no
1.8.x no not tested not tested yes no
Pinpoint Version HBase 0.94.x HBase 0.98.x HBase 1.0.x HBase 1.2.x HBase 2.0.x
  • Agent - Collector所須要的版本兼容
Agent Version Collector 1.0.x Collector 1.1.x Collector 1.5.x Collector 1.6.x Collector 1.7.x Collector 1.8.x
1.0.x yes yes yes yes yes yes
1.1.x not tested yes yes yes yes yes
1.5.x no no yes yes yes yes
1.6.x no no not tested yes yes yes
1.7.x no no no no yes yes
1.8.x no no no no no yes
Agent Version Collector 1.0.x Collector 1.1.x Collector 1.5.x Collector 1.6.x Collector 1.7.x Collector 1.8.x
  • Flink所須要的版本兼容
Pinpoint Version flink 1.3.X flink 1.4.X flink 1.5.X flink 1.6.X flink 1.7.X Pinpoint Version
1.7.x yes yes no no no 1.7.x
1.8.x yes yes no no no 1.8.x
1.9.x yes yes yes yes yes 1.9.x
Pinpoint Version flink 1.3.X flink 1.4.X flink 1.5.X flink 1.6.X flink 1.7.X Pinpoint Version
1.7.x yes yes no no no 1.7.x
1.8.x yes yes no no no 1.8.x
1.9.x yes yes yes yes yes 1.9.x

7. Spring Cloud與Pinpoint實戰

在介紹實戰以前,咱們先介紹一下Pinpoint部署構建。瀏覽器

筆者構建的一些前置條件:tomcat

java:1.8
CentOS:7.6

  1. HBase部署

存儲方式須要使用HBase1.2.x的版本,筆者這裏選擇的是HBase1.2.6,下載地址爲Apache官網,推薦使用有端點續傳功能的下載器下載(實在是有點慢),HBase全版本下載地址:http://archive.apache.org/dist/hbase/ ,各位讀者選擇本身喜歡的版本下載。

下載完成後,將HBase1.2.6放入CentOS的opt目錄中,執行以下命令:

tar -xvzf hbase-1.2.6-bin.tar.gz
mv hbase-1.2.6/ /data/service/hbase/

修改hbase中config目錄中的JAVA_HOME,將這裏的JAVA_HOME修改成本身本地的路徑,筆者這裏修改以下:

export JAVA_HOME=/opt/jdk1.8.0_221

修改完成後就能夠進入hbase的bin目錄,啓動hbase了,執行以下語句:

./start-hbase.sh

啓動成功後,能夠執行jps,若是看到有HMaster,可有證實啓動成功,以下:

19263 HMaster

也能夠打開瀏覽器訪問:http://ip:16010/master-status ,結果如圖:

接下來咱們先把Pinpoint的HBase的構建腳本導入,進入HBase的bin目錄下執行以下語句:

./hbase shell /opt/hbase-create.hbase

數據導入成功咱們在HBase的UI界面上能夠看到,如圖:

後面的目錄是筆者用來存放HBase初始化腳本的路徑,各位讀者可根據狀況自行替換,至此,HBase環境準備完成,接下來開始部署Collector和Web UI。

  1. Collector和Web UI部署

出於簡單方便考慮,不推薦初學者自行編譯代碼進行部署,能夠直接使用官方提供的發行版本進行部署。

瀏覽器訪問連接:https://github.com/naver/pinpoint/releases/ ,直接下載當前最新Release版本便可,筆者如今看到的最新版本是1.8.4,如圖,須要下載的內容有pinpoint-agent-1.8.4.tar.gzpinpoint-collector-1.8.4.warpinpoint-web-1.8.4.war

首先須要準備兩個tomcat,筆者這裏下載的tomcat8,解壓兩份後並重命名爲apache-tomcat-pinpoint-collectorapache-tomcat-pinpoint-web

apache-tomcat-pinpoint-collector中的config中的server.xml進行修改。

將8005改爲18005,8080改爲18080,8443改成18443,8009改成18009。

一樣也將apache-tomcat-pinpoint-web中的config中的server.xml進行修改。

將8005改爲28005,8080改爲28080,8443改成28443,8009改成28009。

apache-tomcat-pinpoint-collector中的webapp/ROOT清空,將pinpoint-collector-1.8.4.war放入並解壓。解壓完成後就能夠進入bin目錄使用./startup.sh啓動tomcat了,而且使用命令tail -f ../logs/catalina.out觀察啓動日誌是否啓動成功。

一樣,將apache-tomcat-pinpoint-web中的webapp/ROOT清空,將pinpoint-web-1.8.4.war放入並解壓。解壓完成後就能夠進入bin目錄使用./startup.sh啓動tomcat了,而且使用命令tail -f ../logs/catalina.out觀察啓動日誌是否啓動成功。

當Collector和Web UI都啓動成功後,就可使用打開瀏覽器訪問:http://ip:28080/#/main ,初次訪問如圖:

  1. Agent啓用

實戰案例,本實戰案例和上一篇實戰案例保持一致,一樣是4個服務,包括Zuul-Service、Eureka-Service、Consumer-Service和Provider-Service。具體實現代碼本章再也不列出,各位讀者能夠參考上一篇或者Github倉庫(https://github.com/meteor1993/SpringCloudLearning/tree/master/chapter15),下面咱們介紹Spring Cloud是如何與Pinpoint整合使用的。

接入方式和上一篇的Skywalking是一致的,都是使用探針技術接入應用程序,java -jar的方式來加載Agent探針。

首先在工程的跟目錄中執行mvn install,然後在CentOS的opt中新建4個目錄,分別存放4個打好包的工程。筆者這裏建立的4個目錄分別爲/opt/project/consumer_service/opt/project/eureka_service/opt/project/provider_service/opt/project/zuul_service,將4個jar包分別放入對應的目錄中,並解壓剛纔咱們下載好的pinpoint-agent-1.8.4.tar.gz探針,咱們將解壓後的探針放在/opt的目錄中,接下來,咱們使用以下命令,順次啓動4個jar包:

java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=consumer-service -Dpinpoint.applicationName=consumer-server -jar /opt/project/consumer_service/consumer-0.0.1-SNAPSHOT.jar

java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=eureka-service -Dpinpoint.applicationName=eureka-server -jar /opt/project/eureka_service/eureka-0.0.1-SNAPSHOT.jar

java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=provider-service -Dpinpoint.applicationName=provider-server -jar /opt/project/provider_service/provider-0.0.1-SNAPSHOT.jar

java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=zuul-service -Dpinpoint.applicationName=zuul-server -jar /opt/project/zuul_service/zuul-0.0.1-SNAPSHOT.jar

上述命令執行完成以後,再打開Web UI查看顯示狀況。

首先打開瀏覽器訪問:http://192.168.44.129:8080/client/hello?name=spring ,頁面正常顯示Hello, name is spring,查看Pinpoint的Web UI,如圖:

圖清楚的顯示了咱們當前系統的拓撲結構,橫線上面的數字表明瞭調用次數,右邊部分,最上面顯示的是成功和失敗的狀況,中間部分顯示的是響應時間,下面顯示的是加載所使用的時間。

檢查器(Inspector):這裏已Zuul-Service爲例,Timeline顯示的是請求的時間段,Information顯示的是節點的一些當前信息,包含Application Name、Agent Id、Agent版本、JVM信息、開始時間等。

Heap信息的使用狀況,如圖:

系統CPU、活動線程、響應時間等信息如圖:

更多Pinpoint的信息,讀者能夠經過官方Demo(http://125.209.240.10:10123/#/main )或者自行構建試驗來查看結果,這裏再也不一一贅述。至此,Spring Cloud和Pinpoint的使用介紹也就完成了。更多有關Pinpoint的信息各位讀者能夠前往Github的官網進行查閱,地址爲:https://github.com/naver/pinpoint

8. 小結

這裏總結一下整個案例的啓動順序:

  1. 啓動HBase
  2. 啓動collector
  3. 啓動Web-UI
  4. 啓動Agent(Eureka、provider、consumer、zuul)
  5. 應用調用
  6. 訪問Web-UI查看統計信息

同Skywalking同樣,以上啓動順序供各位讀者參考,請各位讀者最好按照以上順序啓動,由於不一樣的組件以前實際上是有相互依賴關係的,若是隨意更改啓動順序可能會形成某些未知問題。至此,Spring Cloud和APM的相關操做就告一段落了。APM能夠很好的幫咱們理解系統行爲,也是分析系統性能的工具,更是發生問題故障的時候利器,能夠幫咱們快速的定位查找問題。

相關文章
相關標籤/搜索