分布式追蹤工具pinpoint的原理與使用

前言:由于翻譯水平有限,難免有所疏漏。各位讀者在本機搭建環境demo時請如有疑惑請聯系:tienchen1990@hotmail.com

產品介紹:

Pinpoint是一個開源的APM(Application Performance Management (Monitoring)/ 應用性能管理)工具。基于Google Dapper論文實現,用于基于Java的大規模分布式應用。

由于當前網絡資料較少,且大部分為英文,因此在使用總結中難免有紕漏錯誤。如有疑問請自行參考相關文檔。

支持模塊:翻譯來源https://github.com/naver/pinpoint)

··JDK 6+

··Tomcat 6/7/8,?Jetty 8/9,?JBoss EAP 6,?Resin 3/4

··Spring, Spring Boot

·?Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, ?NingAsyncHttpClient

··Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER

··MySQL, Oracle, MSSQL, CUBRID, DBCP, POSTGRESQL, MARIA

··Arcus, Memcached, Redis, CASSANDRA

··iBATIS, MyBatis

··gson, Jackson, Json Lib

··log4j, Logback

環境要求:

Java環境

本例基于Jdk1.8, Hbase 1.0.3, pinpiont anget 1.6

安裝部署:

本實例基于Linux發行版Ubuntu 16.04, 其他諸如Windows/Mac OS等系統安裝方法基本相同,請自行查閱。官方spring boot應用需要pp1.6及以上版本支持。雖然我本地測試1.5.2也可以,但請以官方為準。

Jdk安裝

去oracle官網下載穩定版jdk-8u144-linux-x64 .tar.gz 解壓到/usr/java 目錄下

Tar -zxvf jdk-8u144-linux-x64 .tar.gz

mkdir /usr/java

mv 1.8.0_144/ /usr/java

配置環境變量

vi /etc/profile

添加:

export JAVA_HOME=/usr/java/jdk1.8

export PATH=$PATH:$JAVA_HOME/bin

wq保存退出

使之立即生效

source /etc/profile

pinpoint安裝

使用git clonehttps://github.com/naver/pinpoint.git下載pinpoint或者將項目作為zip文件下載并解壓縮

使用maven安裝pinpoint 并運行 mvn install -Dmaven.test.skip=true

git clonehttps://github.com/naver/pinpoint.git

cd pinpoint

mvn install -Dmaven.test.skip=true

HBASE安裝

Hbase用來存儲pinpoint采集來的數據

在官網下載hbase1.0.3版,解壓縮到指定目錄

tar -zxvf hbase-1.0.3-bin.tar.gz

mkdir -p /data/service

mv hbase-1.0.3/ /data/service/hbase

修改hbase-env.sh的JAVA_HOME環境變量位置

cd /data/service/hbase/conf/

vi hbase-env.sh

在27行左右的位置,修改如下

export JAVA_HOME=/usr/java/jdk1.8/

修改Hbase的配置信息

vi hbase-site.xml

在結尾修改成如下,這里我們指定Hbase本地來存儲數據,生產環境將數據建議存入HDFS中

hbase.rootdir

file:///data/hbase>

啟動hbase

cd /data/service/hbase/bin

./start-hbase.sh

查看Hbase是否啟動成功,如啟動成功,會看到HMaster進程

[root@localhost bin]# jps

12075 Jps

11784 HMaster

初始化Hbase的pinpoint庫

執行pinpoint提供的Hbase初始化語句,執行過程需要一小會兒時間。

執行腳本見附錄1.

./hbase shell/scripts/hbase-create.hbase

執行完畢后,進入Hbase, 可以看到相關版本信息

./hbase shell


然后登錄web,查看初始化數據是否成功

http://192.168.205.128:16010/master-status(以自己實際部署的ip地址為準)


安裝pinpoint-collector

部署war包

解壓Tomcat,將Tomcat重命名移動到指定位置

tar -zxvf apache-tomcat-8.0.36.tar.gz

mv apache-tomcat-8.0.36/ /data/service/pp-col

因為后面要部署較多的tomcat實例,因此建議修改pp-col的端口號,避免沖突。在此我們可以在每個默認端口前面加1

cd /data/service/pp-col/conf/

sed -i 's/port="8005"/port="18005"/g' server.xml

sed -i 's/port="8080"/port="18080"/g' server.xml

sed -i 's/port="8443"/port="18443"/g' server.xml

sed -i 's/port="8009"/port="18009"/g' server.xml

sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml

如果你本機的網卡不是eth0,需要進行如下修改?;蛘咧苯佑?vi"進去,修改localhost

sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml

部署pinpoint-collector.war包

rm -rf /data/service/pp-col/webapps/*

unzip pinpoint-collector-1.6.0.war -d /data/service/pp-col/webapps/ROOT

啟動tomcat

cd /data/service/pp-col/bin/

./startup.sh

查看日志,是否啟動成功

tail -f ../logs/catalina.out

安裝pinpoint-web

部署war包

解壓Tomcat,將Tomcat重命名移動到指定位置

tar -zxvf apache-tomcat-8.0.36.tar.gz

mv apache-tomcat-8.0.36/ /data/service/pp-web

因為后面要部署較多的tomcat實例,因此建議修改pp-col的端口號,避免沖突。在此我們可以在每個默認端口前面加2

cd /data/service/pp-web/conf/

sed -i 's/port="8005"/port="28005"/g' server.xml

sed -i 's/port="8080"/port="28080"/g' server.xml

sed -i 's/port="8443"/port="28443"/g' server.xml

sed -i 's/port="8009"/port="28009"/g' server.xml

sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml

如果你本機的網卡不是eth0,需要進行如下修改?;蛘咧苯佑?vi"進去,修改localhost

sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml

部署pinpoint-collector.war包

rm -rf /data/service/pp-web/webapps/*

unzip pinpoint-web-1.6.0.war -d /data/service/pp-web/webapps/ROOT

查看war包是否解壓成功

ll /data/service/pp-web/webapps/ROOT/WEB-INF/classes/

[root@localhost conf]# ll /data/service/pp-web/webapps/ROOT/WEB-INF/classes/

total 88

-rw-rw-r--. 1 root root 2164 Apr? 7? 2016 applicationContext-cache.xml

-rw-rw-r--. 1 root root 3649 Apr? 7? 2016 applicationContext-dao-config.xml

-rw-rw-r--. 1 root root 1490 Apr? 7? 2016 applicationContext-datasource.xml

-rw-rw-r--. 1 root root 6680 Apr? 7? 2016 applicationContext-hbase.xml

-rw-rw-r--. 1 root root 1610 Apr? 7? 2016 applicationContext-websocket.xml

-rw-rw-r--. 1 root root 6576 Apr? 7? 2016 applicationContext-web.xml

drwxrwxr-x. 2 root root 4096 Apr? 7? 2016 batch

-rw-rw-r--. 1 root root? 106 Apr? 7? 2016 batch.properties

drwxrwxr-x. 3 root root 4096 Apr? 7? 2016 com

-rw-rw-r--. 1 root root? 682 Apr? 7? 2016 ehcache.xml

-rw-rw-r--. 1 root root 1001 Apr? 7? 2016 hbase.properties

-rw-rw-r--. 1 root root? 153 Apr? 7? 2016 jdbc.properties

-rw-rw-r--. 1 root root 3338 Apr? 7? 2016 log4j.xml

drwxrwxr-x. 2 root root 4096 Apr? 7? 2016 mapper

-rw-rw-r--. 1 root root 1420 Apr? 7? 2016 mybatis-config.xml

drwxrwxr-x. 3 root root 4096 Apr? 7? 2016 org

-rw-rw-r--. 1 root root? 630 Apr? 7? 2016 pinpoint-web.properties

-rw-rw-r--. 1 root root? 141 Apr? 7? 2016 project.properties

-rw-rw-r--. 1 root root 3872 Apr? 7? 2016 servlet-context.xml

drwxrwxr-x. 2 root root 4096 Apr? 7? 2016 sql

配置文件解釋:

hbase.properties 配置我們pp-web從哪個數據源獲取采集數據,這里我們只指定Hbase的zookeeper地址

jdbc.properties pp-web連接自身Mysql數據庫的連接認證配置。

pinpoint-web.properties 這里pp-web集群的配置文件

applicationContext-* .xml 這些文件在后續的調優工作中會用到

log4j.xml 日志相關

啟動tomcat

cd /data/service/pp-web/bin/

./startup.sh

查看日志,是否啟動成功

tail -f ../logs/catalina.out

日志中出現下面這句話,說明已經啟動成功了

org.apache.catalina.startup.Catalina.start Server startup in 79531 ms

在瀏覽器中訪問http://192.168.205.128:28080(具體以自己配置的ip為準)

部署pp-agent采集監控數據(探針)

解壓Tomcat,將Tomcat重命名移動到指定位置

tar -zxvf apache-tomcat-8.0.36.tar.gz

mv apache-tomcat-8.0.36/ /data/pp-test

配置localhost的外部訪問權限

cd /data/pp-test/conf/

sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml

解壓測試的war包(對于spring boot應用打成的jar包,后面會介紹)

rm -rf /data/pp-test/webapps/*

unzip test.war -d /data/pp-test/webapps/ROOT

配置pp-agent探針

解壓pp-agent, 并移動到指定位置

tar -zxvf pinpoint-agent-1.5.2.tar.gz

mv pinpoint-agent-1.5.2 /data/pp-agent

編輯配置文件

cd /data/pp-agent/

vi pinpoint.config

修改IP將其指定到pp-col的ip

profiler.collector.ip=192.168.245.136

修改測試項目下的tomcat啟動文件"catalina.sh",修改這個只要是為了監控測試環境的Tomcat,增加探針

cd /data/pp-test/bin

vi catalina.sh

在第20行左右增加如下字段

CATALINA_OPTS="$CATALINA_OPTS-javaagent:/data/pp-agent/pinpoint-bootstrap-1.6.0.jar"

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20161122"

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP

第一行是pp-agent的jar包的位置

第二行是agent的唯一標識,名稱隨意,但不可與其他項目重復

第三行是被采集項目的名稱,名稱隨意,但不可與其他項目重復

監控Tomcat

啟動測試用的Tomcat的服務器

cd /data/pp-test/bin/

./startup.sh

查看啟動日志,確實Tomcat啟動

tail -f ../logs/catalina.out

訪問測試環境


訪問pp-web

192.168.205.128/28080(具體以自己實際配置的ip為準)


在右邊的綠色小點點即每一次訪問

『注意』要查看每一次訪問詳情,需要按住左鍵不動,在綠色小點點上拉一個小框框即可

可以看到每一次的訪問都詳細的記載在下表中

Spring Boot應用的部署采集

Spring Boot應用探測非常簡單,只要想在啟動命令中添加相關參數即可。如下

java -jar-javaagent:/data/pp-agent/pinpoint-bootstrap-1.6.0.jar-Dpinpoint.agentId=tuandai-test20170905 -Dpinpoint.applicationName=tuandai-test -jar user-service-core-1.0.0-CLIENTS-SNAPSHOT.jar &

注意點:

Pinpoint主要有三大組件,agent,collector,web。Agent探針部署在應用里面,同時agent中配置了collector系統的ip,從而實現了collector能夠搜集監控應用的信息。Collector和ui中同時和hbase建立聯系,collector負責將監控到的數據存入hbase中,ui負責讀取hbase中的數據并展示。從而實現了對應用的性能管理。

關于hbase的啟動有兩種方式:standalone和distributed模式。Standalone是hbase使用自帶的zookeeper啟動,distributed模式是hbase和zookeeper分開啟動。本例中采用standalone模式啟動。如果要采用distributed模式啟動,只需要更改hbase-env.sh和hbase-site.xml配置文件:

Hbase-env.sh指定java環境變量和distributed模式啟動

Hbase-site.xml配置文件:

vim hbase-site.xml

指定hbase和zookeeper存放數據的目錄,這里zookeeper和hbase在同一服務器,采用127.0.0.1,開啟集群模式

FAQ:

Zookeepeer連接異常,請注意是否2182端口被占用。

Hbase如果寫入異常,請檢查權限

Tomcat應用啟動后,瀏覽器無法訪問,請設置防火墻開放端口,或關閉防火墻

參考資料:

https://github.com/naver/pinpoint

http://www.cnblogs.com/yyhh/p/6106472.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容