Pinpoint 一款強大的APM工具


背景

程序的監控一直是程序員最頭痛的事情之一,現網程序有問題怎么辦?看進程看端口 top/free/df 三件套?網絡抓包?看日志?所以為了滿足這些初級需求很多公司都做了主機監控,進程端口監聽等功能,例如主機磁盤滿/只讀告警,端口不監聽告警。這些基礎的監控說到底都是黑盒監控,並沒有進入到程序內部的調用鏈里面,程序內部的運行情況完全是兩眼一抹黑,導致是該模塊本身有問題還是下游的依賴模塊出了問題,完全不知道,只能看一行行看日志慢慢確認。換言之,我們需要的是一個分布式調用鏈追蹤系統,能夠清楚的描述程序的調用關系,每一跳的耗時,以及請求數量的統計,很明顯,Pinpoint就是我們要找的工具。

 

Pinpoint

Pinpoint 是一個APM(Application performance management)工具,相對於其他APM工具(例如ZipKin)有一個強大的優勢,那就是應用程序無需修改一行代碼就能直接使用,例如Java程序直接使用Pinpoint提供的Java agent(jar包)就能使用。目前Pinpoint直接Java/PHP/Python三種語言,未來可能會支持更多語言,開源社區極其活躍,版本迭代比較快。

 

Pinpoint的優勢

除了上面談到的對用戶代碼無嵌入外,Pinpoint還有以下優勢:

1.強大的UI

UI會自動識別程序的調用關系並且繪制圖表,支持的組件多,例如Tomcat/Jetty/JBoss/Thrift/Kafka/Mysql等等。

 

2.調用鏈信息全

除了能看到調用關系及每一級耗時外,還能看到每一級的參數及SQL。

 

3.高性能

在JVM字節碼層做處理,程序的性能損耗小於3%。

 

Pinpoint架構

 

由Pinpoint官方給出的架構圖我們可以看出,Pinpoint Agent負責采集用戶程序的信息 通過 網絡將信息發給服務端 Pinpoint Collector,Pinpoint Collector將數據持久化到Hbase中,前端Web UI從Hbase中讀取數據展示給用戶。是一個標准的C/S分布式架構,選中Hbase的原因想必是為了支持海量數據。

 

安裝實驗 

以下記錄比較流水,由於筆者實驗已經已經安裝JDK1.8所以沒有這塊的安裝說明。

安裝zookeeper

理論上不用安裝,hbase默認會拉起zookeeper,不過是單機的

https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

安裝步驟參考:https://blog.csdn.net/yuan_xw/article/details/47148401

 

安裝hbase

https://www.apache.org/dyn/closer.lua/hbase/1.4.13/hbase-1.4.13-bin.tar.gz

注意設置JAVA_HOME環境變量,修改/data/hbase-1.4.13/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/

cd /data/hbase-1.4.13/bin

./start-hbase.sh 

 

創建hbase pinpoint相關表

https://github.com/naver/pinpoint/tree/master/hbase/scripts

$HBASE_HOME/bin/hbase shell hbase-create.hbase

$HBASE_HOME/bin/hbase shell hbase-create-snappy.hbase

 

安裝tomcat

參考:https://blog.csdn.net/lcyaiym/article/details/76696192

https://tomcat.apache.org/download-90.cgi 下載 apache-tomcat-9.0.37.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

cd /usr/local/tomcat/bin

./startup.sh 

 

安裝pinpoint collector

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下載 pinpoint-collector-2.0.4.war

啟動 

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-collector-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/profiles/release

配置中有關zookeeper的配置都改成localhost

根據 /usr/local/tomcat/logs/catalina.out 的報錯信息進行排查。

注意修改主機名,collector注冊zookeeper節點用的是主機名供其他服務發現,所以要確保DNS能正確解析。

 

安裝pinpoint web

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下載 pinpoint-web-2.0.4.war

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-web-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

把 /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties 文件清空。

 

安裝測試pinpoint agent

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下載 pinpoint-agent-2.0.4.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

rm -rf /usr/local/tomcat/webapps/*

unzip test.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/bin/catalina.sh 中加入以下三項配置:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pinpoint/pinpoint-agent-2.0.4/pinpoint-bootstrap-2.0.4.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20200906"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=JustTestPP"

 

配置說明:

agentId 表示該實例的唯一標識,是全局唯一的ID。

applicationName 表示同一服務。

例如有一個購買服務,但是有兩個實例,那么就可以這樣定義:

agentId=buy1

applicationName=buysercie

agentId=buy2

applicationName=buysercie

 

問題定位

只有開始的兩條記錄能被統計到,之后的記錄無法統計

解決方法:

修改 

/data/pinpoint/pinpoint-agent-2.0.4/pinpoint.config  

/data/pinpoint/pinpoint-agent-2.0.4/profiles/release/pinpoint-env.config

/data/pinpoint/pinpoint-agent-2.0.4/profiles/local/pinpoint-env.config

中 profiler.sampling.rate 值改為1,表示每一條記錄都采集。默認是20,表示每20條采集一條。

 

問題定位參考官方的FAQ http://naver.github.io/pinpoint/faq.html

github issue記錄 https://github.com/naver/pinpoint/issues

 

參考

http://naver.github.io/pinpoint/installation.html 

http://naver.github.io/pinpoint/videos.html
https://www.cnblogs.com/yyhh/p/6106472.html

http://naver.github.io/pinpoint/overview.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM