Pinpoint 技術架構及部署
目錄
一、背景
隨著專案微服務的進行,微服務數量逐漸增加,服務間的呼叫也越來越複雜,我們急切需要一個APM工具幫我們監控各個服務的效能及對服務間的呼叫進行跟蹤,而通過調研多個開源APM工具後,最終我們選擇了pintpoint。
1.2、選擇它有4個方面原因:
- pinpoint是基於java開發的,利於專案後期對原始碼的修改
- 整合pinpoint不需要修改一行程式碼
- pinpoint有非常直觀的UI,符合專案的當前需求
- pinpoint的社群還是挺活躍,一般提問題第二天就有專案的committer回覆
二、簡介
Pinpoint是一個開源的 APM (Application Performance Management/應用效能管理)工具,用於基於java的大規模分散式系統。在使用上力圖簡單高效,通過在啟動時安裝agent,不需要修改哪怕一行程式碼,最小化效能損失(3%).
2.1、架構圖
2.2、三個主要元件
- Collector, 收集應用中agent傳送的資料並存儲到Hbase中
- Agent, 是和應用一起啟動的和應用共享JVM,定時傳送資料給Collector
- Web UI, 從hbase中讀取資料並展示給使用者,之後會有demo展示其功能
2.3、依賴環境
- JDK:1.8
- Pinpoint:1.7.3
- Tomcat:7.0.59
三、Pinpoint Collector 收集端
部署在獨立的Tomcat容器中,如 tomcat-pinpoint-collector
3.1、安裝 pinpoint-collector
上傳pinpoint-collector-1.7.3.war到 tomcat/webapps目錄
解壓:
unzip pinpoint-collector-1.7.3.war -d pinpoint-collector
3.2、配置 pinpoint-collector
Pinpoint Collector 有 2 個配置檔案: pinpoint-collector.properties 和 hbase.properties 這些配置檔案在war檔案下的 WEB-INF/classes 目錄3.2.1、pinpoint-collector.properties: 包含colletor的配置,在配置pinpoint agent時需要與之對應:
- collector.receiver.base.port(agent中是 profiler.collector.tcp.port - 預設: 9994)
- collector.receiver.stat.udp.port(agent中是 profiler.collector.stat.port - 預設: 9995)
- collector.receiver.span.udp.port(agent中是 profiler.collector.span.port - 預設: 9996)
注意:pinpoint collector 1.5.x版本 和 較新的 1.7.x版本的 pinpoint-collector.properties配置文
件有差異
具體參考:
https://github.com/naver/pinpoint/blob/1.7.3/collector/src/main/resources/pinpoint-collecto
r.properties
https://github.com/naver/pinpoint/blob/1.5.2/collector/src/main/resources/pinpoint-collecto
r.properties
- cluster.zookeeper.address(預設: localhost,修改為hbase相關的zookeeper的IP地址)
3.3.2、hbase.properties : 包含連線到HBase的配置
- hbase.client.host (預設: localhost,修改為hbase相關的zookeeper的IP地址)
- hbase.client.port (預設: 2181)
四、Pinpoint Web
部署在獨立的Tomcat容器中,如 tomcat-pinpoint-web4.1、安裝 pinpoint-web
上傳pinpoint-web-1.7.3.war到 tomcat/webapps目錄
pinpoint-web應用需要部署為tomcat的ROOT應用
cd tomcat/webapps
rm -fr ROOT
unzip pinpoint-web-1.7.3.war -d ROOT
4.2、配置 pinpoint-web
和collector類似,Pinpoint web有和安裝相關的配置檔案:pinpoint-web.properties 和 hbase.properties 這些檔案在 WEB-INF/classes 目錄下
- pinpoint-web.properties
cluster.zookeeper.address(預設: localhost,修改為hbase相關的zookeeper的IP地址)
- hbase.properties : 包含連線到HBase的配置
五、Pinpoint Agent
5.1、安裝 pinpoint-agent
上傳pinpoint-agent-1.7.3.tar.gz到安裝目錄,如 /home/jyapp
解壓:
mkdir pinpoint-agent
tar zxvf pinpoint-agent-1.7.3.tar.gz -C pinpoint-agent
pinpoint-agent 目錄層次如下:
|-- boot
| |-- pinpoint-bootstrap-core-$VERSION.jar
|-- lib
| |-- pinpoint-profiler-$VERSION.jar
| |-- pinpoint-profiler-optional-$VERSION.jar
| |-- pinpoint-rpc-$VERSION.jar
| |-- pinpoint-thrift-$VERSION.jar
| |-- ...
|-- pinpoint-bootstrap-$VERSION.jar
|-- pinpoint.config(Agent配置檔案)
Pinpoint Agent 作為一個java agent需要附加到取樣的應用(如 Tomcat)
為了讓agent生效,在執行應用時需要設定 -javaagent JVM 引數為 $AGENT_PATH/pinpointbootstrap-$ VERSION.jar
-javaagent:$AGENT_PATH/pinpoint-bootstrap-$1 VERSION.jar
另外,Pinpoint Agent 需要兩個命令列引數來在分散式系統中標記自身:
- -Dpinpoint.agentId - 唯一標記agent執行所在的應用(如,loan-33)
- -Dpinpoint.applicationName - 將許多的同樣的應用例項分組為單一服務(如,loan)
注意:pinpoint.agentId 必須全域性唯一來標識應用例項, 而所有共用相同 pinpoint.applicationName 的應用被當 成單個服務的多個例項
5.2、配置 pinpoint-agent
在pinpoint.config 中有很多Pinpoint Agent的配置選項 ,而最重要的必須檢查的配置選項是collector ip address 和 TCP/UDP 埠,Agent需要這些值來建立到collector的連線並正確工作 在 pinpoint.config 中相應的設定這些值:
- profiler.collector.ip (pinpoint collector ip,預設: 127.0.0.1)
- profiler.collector.tcp.port (collector中是 collector.receiver.base.port - 預設: 9994)
- profiler.collector.stat.port (collector中是 collector.receiver.stat.udp.port - 預設: 9995)
- profiler.collector.span.port (collector中是 collector.receiver.span.udp.port - 預設: 9996)
5.3、Tomcat整合示例
在tomcat 啟動指令碼(catalina.sh)中新增 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/jyapp/pinpoint-agent/pinpoint-bootstrap-1.7.3.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=$AGENT_ID"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
注意:
$AGENT_ID - 需改為應用的唯一標記,如 loan-33,代表loan 33伺服器
$APPLICATION_NAME - 需改為應用名,如 loan,代表貸款應用
啟動tomcat來開始web應用的取樣 SpringBoot微服務同理,在啟動命令上新增 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName 即可
六、監控效果圖
七、其他
將web請求路由到agent
從 1.5.0 版本開始, Pinpoint 可以通過collector從web直接傳送請求到agent(反之亦然)。 為此需要使用 Zookeeper 來協調agent和collector之間和collectors 和 web 之間的通訊通道.。在此之上,實時通訊(例如活動 執行緒數量監控)才變的可能 通常使用HBase後端提供的Zookeeper例項,這樣就不需要額外的Zookeeper配置。相關的配置選項在這裡:
7.1、pinpoint-web.properties
cluster.enable=true
cluster.web.tcp.port=9997
cluster.zookeeper.address=localhost
cluster.zookeeper.sessiontimeout=30000
cluster.zookeeper.retry.interval=60000
cluster.connect.address=
7.2、pinpoint-collector.properties
cluster.enable=true
cluster.zookeeper.address=localhost
cluster.zookeeper.sessiontimeout=30000
cluster.listen.ip=
cluster.listen.port=