pinpoint介绍

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

2Pinpoint的特点如下

·        分布式事务跟踪,跟踪跨分布式应用的消息

·        自动检测应用拓扑,帮助你搞清楚应用的架构

·        水平扩展以便支持大规模服务器集群

·        提供代码级别的可见性以便轻松定位失败点和瓶颈

·        使用字节码增强技术,添加新功能而无需修改代码

 

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 有明显的差异,主要体现在如下两个方面:

  1. Pinpoint 是一个完整的性能监控解决方案:有从探针、收集器、存储到 Web 界面等全套体系;而 Zipkin 只侧重收集器和存储服务,虽然也有用户界面,但其功能与 Pinpoint 不可同日而语。反而 Zipkin 提供有 Query 接口,更强大的用户界面和系统集成能力,可以基于该接口二次开发实现。
  2. 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-colTomcat的配置,主要修改端口,避免与pp-webTomcat的端口冲突。我在原本默认的端口前都加了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

 查看日志,是否成功启动

tail -f ../logs/catalina.out

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-webTomcat的配置,主要修改端口,避免与pp-colTomcat的端口冲突。我在原本默认的端口前都加了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

cd /home/pp_test/
rm -rf /data/pp-test/webapps/*
unzip test.war -d /data/pp-test/webapps/ROOT

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-colIP就行了,安装pp-col启动后,自动就开启了999499959996的端口了。这里就不需要操心了,如果有端口需求,要去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-agentjar包位置

2.   第二行是agentID,这个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下载地址在

\\192.168.0.123\公共上传专区\lyq

此文件已配置好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、正式环境

客户反馈错误时,可以根据时间段查看请求情况,快速定位错误;

分析系统的性能瓶颈,进行有针对性的优化;

查看系统的CPUMemoryTPS使用情况;

2、测试环境

本地测试时,可查看请求调用情况,sql执行情况,判断业务逻辑及数据是否正常;

接口联调时,分析请求调用情况;

 


猜你喜欢

转载自blog.csdn.net/failure_lee/article/details/80277102