分布式追踪工具pinpoint的原理与使用

前言:由于翻译水平有限,难免有所疏漏。各位读者在本机搭建环境demo时请如有疑惑请联系:[email protected]

产品介绍:

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


分布式追踪工具pinpoint的原理与使用_第1张图片

然后登录web,查看初始化数据是否成功

http://192.168.205.128:16010/master-status(以自己实际部署的ip地址为准)


分布式追踪工具pinpoint的原理与使用_第2张图片

安装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

访问测试环境

分布式追踪工具pinpoint的原理与使用_第3张图片


分布式追踪工具pinpoint的原理与使用_第4张图片

访问pp-web

192.168.205.128/28080(具体以自己实际配置的ip为准)


分布式追踪工具pinpoint的原理与使用_第5张图片

在右边的绿色小点点即每一次访问

分布式追踪工具pinpoint的原理与使用_第6张图片

『注意』要查看每一次访问详情,需要按住左键不动,在绿色小点点上拉一个小框框即可

分布式追踪工具pinpoint的原理与使用_第7张图片

可以看到每一次的访问都详细的记载在下表中

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

分布式追踪工具pinpoint的原理与使用_第8张图片

指定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

你可能感兴趣的:(分布式追踪工具pinpoint的原理与使用)