Pinpoint介绍
一、介绍
Pinpoint是一款对Java编写的大规模分布式系统的开源的APM(Application Performance Management/应用性能管理)工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,方便工程师能够快速定位问题。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的,只需要在被测试的Tomcat中加上3句话,打下探针,就可以监控整套程序了。
二、使用教程及特点
1、使用参考以下教程
https://blog.csdn.net/xiaozhuanddapang/article/details/74278970
web界面网址:http://192.168.1.229:28080/#/main
2、Pinpoint的特点如下
· 分布式事务跟踪,跟踪跨分布式应用的消息
· 自动检测应用拓扑,帮助你搞清楚应用的架构
· 水平扩展以便支持大规模服务器集群
· 提供代码级别的可见性以便轻松定位失败点和瓶颈
· 使用字节码增强技术,添加新功能而无需修改代码
3、Pinpoint架构图
(图片出处:官网)架构说明:
· Pinpoint-Collector:收集各种性能数据
· Pinpoint-Agent:和自己运行的应用关联起来的探针
· Pinpoint-Web:将收集到的数据显示成WEB网页形式
· HBase Storage:收集到的数据存到HBase中
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
Pinpoint项目地址 https://github.com/naver/pinpoint
三、Pinpoint 与 Zipkin
Pinpoint 与 Zipkin 都是基于 Google Dapper 的那篇论文,因此理论基础大致相同。Pinpoint 与 Zipkin 有明显的差异,主要体现在如下两个方面:
- Pinpoint 是一个完整的性能监控解决方案:有从探针、收集器、存储到 Web 界面等全套体系;而 Zipkin 只侧重收集器和存储服务,虽然也有用户界面,但其功能与 Pinpoint 不可同日而语。反而 Zipkin 提供有 Query 接口,更强大的用户界面和系统集成能力,可以基于该接口二次开发实现。
- Pinpoint 提供有 Java Agent 探针,通过字节码注入的方式实现调用拦截和数据收集,可以做到真正的代码无侵入,只需要在启动服务器的时候添加一些参数,就可以完成探针的部署;而 Zipkin 的 Java 接口实现 Brave,只提供了基本的操作 API,如果需要与框架或者项目集成的话,就需要手动添加配置文件或增加代码。
四、Linux安装部署
1. 环境配置
1.1 获取需要的依赖包
进入home目录,创建一个"pp_res"的资源目录,用来存放需要安装的包
mkdir /home/pp_res
cd /home/pp_res/
使用xshell等类似的工具,将需要的文件上传到Linux虚拟机中
1. jdk7 --- Java运行环境
2. hbase-1.0 --- 数据库,用来存储监控信息
3. tomcat8.0 --- Web服务器
4. pinpoint-collector.war --- pp的控制器
5. pinpoint-web.war --- pp展示页面
1.2 配置jdk1.7
这套APM系统主要是用jdk1.7来进行部署的,首先要配置jdk的环境变量
cd /home/pp_res/
tar -zxvf jdk-7u79-linux-x64.tar.gz
mkdir /usr/java
mv jdk1.7.0_79/ /usr/java/jdk17
配置java环境变量
vi /etc/profile
将下列复制到profile的最后一行中
export JAVA_HOME=/usr/java/jdk17
export PATH=$PATH:$JAVA_HOME/bin
让环境变量生效
source /etc/profile
测试java的环境变量是否配置好了
[root@localhost pp_res]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
2. 安装Hbase
pinpoint收集来的测试数据,主要是存在Hbase数据库的。所以它可以收集大量的数据,可以进行更加详细的分析。
2.1 将Hbase解压,并且放入指定目录
cd /home/pp_res/
tar -zxvf hbase-1.0.3-bin.tar.gz
mkdir -p /data/service
mv hbase-1.0.3/ /data/service/hbase
2.2 修改hbase-env.sh的JAVA_HOME环境变量位置
cd /data/service/hbase/conf/
vi hbase-env.sh
在27行左右的位置,修改如下
export JAVA_HOME=/usr/java/jdk17/
2.3 修改Hbase的配置信息
vi hbase-site.xml
在结尾修改成如下,这里我们指定Hbase本地来存储数据,生产环境将数据建议存入HDFS中。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///data/hbase</value>
</property>
</configuration>
2.4 启动hbase
cd /data/service/hbase/bin
./start-hbase.sh
查看Hbase是否启动成功,如果启动成功的会看到"HMaster"的进程
[root@localhost bin]# jps
12075 Jps
11784 HMaster
2.5 初始化Hbase的pinpoint库
执行pinpoint提供的Hbase初始化语句,这时会初始化一会。
./hbase shell /home/pp_res/hbase-create.hbase
可以登录web,来查看HBase的数据是否初始化成
HbaseWeb : http://192.168.1.229:16010/master-status
3. 安装pinpoint-collector
3.1 部署war包
解压Tomcat,将Tomcat重命名移动到指定位置
cd /home/pp_res/
tar -zxvf apache-tomcat-8.0.36.tar.gz
mv apache-tomcat-8.0.36/ /data/service/pp-col
修改pp-col的Tomcat的配置,主要修改端口,避免与pp-web的Tomcat的端口冲突。我在原本默认的端口前都加了1,下面是替换的shell命令。
【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
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
sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml
部署pinpoint-collector.war包
【注意:如果没有unzip命令,可以 "yum install unzip" 】
cd /home/pp_res/
rm -rf /data/service/pp-col/webapps/*
unzip pinpoint-collector-1.5.2.war -d /data/service/pp-col/webapps/ROOT
启动Tomcat
cd /data/service/pp-col/bin/
./startup.sh
查看日志,是否成功启动
4. 安装pinpoint-web
4.1 部署war包
解压Tomcat,将Tomcat重命名移动到指定位置
cd /home/pp_res/
tar -zxvf apache-tomcat-8.0.36.tar.gz
mv apache-tomcat-8.0.36/ /data/service/pp-web
修改pp-web的Tomcat的配置,主要修改端口,避免与pp-col的Tomcat的端口冲突。我在原本默认的端口前都加了2,下面是替换的shell命令
【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
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
sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml
部署pinpoint-collector.war包
【注意:如果没有unzip命令,可以 "yum install unzip" 】
cd /home/pp_res/
rm -rf /data/service/pp-web/webapps/*
unzip pinpoint-web-1.5.2.war -d /data/service/pp-web/webapps/ROOT
查看war包是否解压成功
[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
启动Tomcat
cd /data/service/pp-web/bin/
./startup.sh
查看日志,Tocmat是否启动成功
tail -f ../logs/catalina.out
日志中出现下面这句话,说明已经启动成功了
org.apache.catalina.startup.Catalina.start Server startup in 79531 ms
这时候我们可以访问一下这个地址,在浏览器中输入"http://192.168.1.229:28080",就会出现主页面了
5. 部署pp-agent采集监控数据
5.1 在测试系统中,部署pp-agent采集监控数据
部署采集器就很简单了,只需要加3句话就好了。首先,先建立一个文件夹,放测试需要的包
mkdir /home/pp_test
cd /home/test
5.2 配置模拟的Tomcat测试环境
为了方便观察,配置一个假的系统,解压Tomcat到指定目录
cd /home/pp_test
mkdir /data
tar -zxvf apache-tomcat-8.0.36.tar.gz
解压测试用的war包
5.3 配置pp-agent采集器
解压pp-agent
cd /home/pp_test
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就行了,安装pp-col启动后,自动就开启了9994,9995,9996的端口了。这里就不需要操心了,如果有端口需求,要去pp-col的配置文件("pp-col/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties")中,修改这些端口
profiler.collector.ip=192.168.1.229
修改测试项目下的tomcat启动文件"catalina.sh",修改这个只要是为了监控测试环境的Tomcat,增加探针
cd /data/pp-test/bin
vi catalina.sh
在20行增加如下字段
1. 第一行是pp-agent的jar包位置
2. 第二行是agent的ID,这个ID是唯一的,我是用pp + 今天的日期命名的,只要与其他的项目的ID不重复就好了
3. 第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pp-agent/pinpoint-bootstrap-1.5.2.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20161122"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP
5.4 监控Tomcat
配置好了。就可以开始监控了,我们启动测试用的Tomcat的服务器
cd /data/pp-test/bin/
./startup.sh
五、使用docker安装部署
1、下载镜像
docker pullyous/pinpoint
2、启动容器
#启动容器
docker run -i-t --name=pinpoint -p 28080-28082:28080-28082 -p 2181:2181 -p 29994:29994 -p29995:29995/udp -p 29996:29996/udp -p 16010:16010 --cap-add SYS_PTRACEyous/pinpoint:latest bash
#进入docker bash
docker exec-it pinpoint /bin/bash
#启动hbase
quickstart/bin/start-hbase.sh
#初始化hbase数据库table
quickstart/bin/init-hbase.sh
#启动Pinpoint
#启动Collector:
quickstart/bin/start-collector.sh
#启动Web UI:
quickstart/bin/start-web.sh
#启动TestApp测试程序:
quickstart/bin/start-testapp.sh
访问pinpoint
http://192.168.1.229:28080/#/main
访问成功即部署成功。
六、开发环境下部署pp-agent
4种部署方式都需要使用到pinpoint-agent-1.7.1文件;文件pinpoint-agent-1.7.1-229.tar.gz下载地址在
此文件已配置好pinpoint.config,如果是网上新下载的,修改以下内容:
配置采样率
#在Pinpoint,可以收集采样资料而不必跟踪每个请求。在开发环境中请求量很小,每个数据都收集。而在产品环境请求量巨大,收集小比率的数据如1~5%,足够检查整个应用的状态。有采样后,可以最小化应用的网络开销并降低诸如网络和服务器的设施费用。
#pinpoint采样方法
#Pinpoint 支持计数采样,如果设置为10则只采样10分之一的请求。我们计划增加新的采样器来更有效率的收集数据。
#注:对应的配置项在agent下的pinpoint.config文件中,默认"profiler.sampling.rate=1"表示全部
# 1 out of n transactions will be sampledwhere n is the rate. (20: 5%)
#profiler.sampling.rate=20
profiler.sampling.rate=1
1 idea下使用tomcat部署
1、找到tomcat的路径
2、修改tomcat的bin目录下的catalina.bat文件,增加agent启动参数
setCATALINA_OPTS=-javaagent:D:/dev/pinpoint/pinpoint-agent-1.7.1-229/pinpoint-bootstrap-1.7.1.jar-Dpinpoint.applicationName=devtomcat165 -Dpinpoint.agentId=dev165tomcat
2 idea下使用springboot使用jar启动
在启动配置里添加agent参数
-javaagent:D:/dev/pinpoint/pinpoint-agent-1.7.1-229/pinpoint-bootstrap-1.7.1.jar-Dpinpoint.applicationName=log165
-Dpinpoint.agentId=log165springboot
3 eclipse下使用tomcat部署
在启动参数里增加
-javaagent:D:/dev/pinpoint/pinpoint-agent-1.7.1-229/pinpoint-bootstrap-1.7.1.jar-Dpinpoint.applicationName=clothingweb165
-Dpinpoint.agentId=clothingweb165
4 eclipse下使用springboot
七、使用场景
1、正式环境
l 客户反馈错误时,可以根据时间段查看请求情况,快速定位错误;
l 分析系统的性能瓶颈,进行有针对性的优化;
l 查看系统的CPU、Memory、TPS使用情况;
2、测试环境
l 本地测试时,可查看请求调用情况,sql执行情况,判断业务逻辑及数据是否正常;
l 接口联调时,分析请求调用情况;