首页 » 杂七杂八 » 正文

开源APM工具PinPoint部署方法

在APP爆炸的今天,app之间、app内部的耦合越来越多也越来越复杂,如何监控管理这些APP实际情况成了越来越热门的话题。本文介绍开源APM(Application Performance Management)工具pinpoint的部署和简单的使用方法。

基本介绍

1

现在的服务(Services )通常包括许多不同的组件(components),这些组件内部使用API调用,与外部服务之间也有API调用关系。每个事务如何在服务内部被执行通常是一个黑盒(blackbox)。Pinpoint精确跟踪这些组件之间的事务流,并提供一个清晰的视图,以便识别问题点和潜在的瓶颈。

Pinpoint提供以下五种视图:

  1. 服务器图(ServerMap) – 通过可视化其组件的互连方式来了解任何分布式系统的拓扑。单击节点将显示有关组件的详细信息,例如其当前状态和事务计数。
  2. 实时活动线程图(Realtime Active Thread Chart) – 实时监视应用程序内的活动线程。
  3.  请求/响应散布图(Request/Response Scatter Chart) – 可视化请求计数和响应模式,以确定潜在问题。可以通过在图表上拖动来选择事务以获取更多详细信息。
  4.  调用栈信息(CallStack) – 增强分布式环境中每个事务的代码级可见性,识别单个视图中的瓶颈和故障点。
  5.  检查器(Inspector) – 查看应用程序的其他详细信息,如CPU使用率,内存/垃圾收集,TPS和JVM参数。
Pinpoint内部实现架构

2

从pinpoint 1.5.0开始,Pinpoint可以直接通过Collector将请求从Web发送到Agents(反之亦然)。为了实现这一点,Pinpoint使用Zookeeper来协调Agents和Collector之间的通信,以及Collector和Web实例之间的通信。通过添加zookeeper,现在可以进行实时通信(例如活动线程计数监视),因为HBase自带zookeeper,通常使用HBase后端提供的Zookeeper实例。

Pinpoint支持的模块

3

  • Tomcat 6/7/8, Jetty 8/9,JBoss EAP 6
  • Spring, Spring Boot
  • Apache HTTP Client 3.x/4.x,JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
  • Thrift Client, ThriftService, DUBBO PROVIDER, DUBBO CONSUMER
  • MySQL, Oracle, MSSQL,CUBRID, DBCP, POSTGRESQL, MARIA
  • Arcus, Memcached, Redis,CASSANDRA
  • iBATIS, MyBatis
  • gson, Jackson, Json Lib
  • log4j, Logback
Pinpoint代码编译

4

Pinpoint代码是java编写的,使用maven进行编译,准备如下安装包:

  • jdk-8u101-linux-x64.rpm
  • apache-maven-3.3.9-bin.tar.gz

1、上传到服务器/home/lkx/目录下:

[root@server ~]# cd /home/lkx/
[root@server lkx]# rpm -ivh jdk-8u101-linux-x64.rpm
[root@server lkx]# cd /opt/
[root@server opt]# tar zxf /home/lkx/apache-maven-3.3.9-bin.tar.gz
[root@server opt]# mv apache-maven-3.3.9/ maven/
[root@server opt]# vim /etc/profile

2、增加如下内容:

export JAVA_HOME=/usr/java/default
export MAVEN_HOME=/opt/maven
export JRE_HOME=/usr/java/default/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin

3、检查jdk,maven安装情况

[root@server opt]# java –version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
[root@server opt]# mvn –version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /opt/maven
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_101/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
[root@server opt]#

4、克隆pinpoint代码:

[root@server opt]# git clone https://github.com/naver/pinpoint
[root@server opt]# cd pinpoint
[root@server pinpoint]# git branch –a
* master
  remotes/origin/1.0.x
  remotes/origin/1.1.x
  remotes/origin/1.5.x
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
[root@server pinpoint]# git checkout 1.5.x
Switched to branch '1.5.x'
[root@server pinpoint]# 
[root@server pinpoint]#

5、设置环境变量

[root@server pinpoint]# export  JAVA_6_HOME=/usr/java/default
[root@server pinpoint]# export  JAVA_7_HOME=/usr/java/default
[root@server pinpoint]# export  JAVA_8_HOME=/usr/java/default

6、开始编译pinpoint

[root@server pinpoint]# mvn -f ./pom.xml install -Dmaven.test.skip=true
此处省略一万字。。。。。。

7、编译成功后,获取到的war包为:

[root@server pinpoint]# ls ./collector/target/pinpoint-collector-1.5.3-SNAPSHOT.war
./collector/target/pinpoint-collector-1.5.3-SNAPSHOT.war
[root@server pinpoint]# 
[root@server pinpoint]# ls ./web/target/pinpoint-web-1.5.3-SNAPSHOT.war
./web/target/pinpoint-web-1.5.3-SNAPSHOT.war
[root@server pinpoint]# 
[root@server pinpoint]# ls ./agent/target/pinpoint-agent-1.5.3-SNAPSHOT.tar.gz 
./agent/target/pinpoint-agent-1.5.3-SNAPSHOT.tar.gz
[root@server pinpoint]# 
[root@server pinpoint]#
pinpoint部署

5

准备如下:

  • apache-tomcat-9.0.0.M11.tar.gz(tomcat 8也支持)、
  • hbase-1.2.4-bin.tar.gz
  • hbase-create.hbase(在pinpoint源码中pinpoint/hbase/scripts/hbase-create.hbase)

部署时为了方便起见,使用hbase自带的zookeeper,将hbase、collector、web都部署在同一台机器上,ip为192.168.1.154,collector的端口号为18080,web的端口号为28080。

1、部署Hbase

  • 关闭selinux和iptables
[root@localhost ~]# vi /etc/sysconfig/selinux
SELINUX=disabled
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables –F
  • 解压hbase
[root@localhost ~]# ls
anaconda-ks.cfg                 hbase-1.2.4-bin.tar.gz  jdk-8u101-linux-x64.rpm                pinpoint-web-1.5.3-SNAPSHOT.war
apache-tomcat-9.0.0.M11.tar.gz  hbase-create.hbase      pinpoint-collector-1.5.3-SNAPSHOT.war
[root@localhost ~]# 
[root@localhost ~]# cd /opt/
[root@localhost opt]#
[root@localhost opt]# tar zxf /root/hbase-1.2.4-bin.tar.gz 
[root@localhost opt]#
[root@localhost opt]# ls
hbase-1.2.4
[root@localhost opt]# mv hbase-1.2.4/ hbase
[root@localhost opt]# cd hbase/
  • 配置hbase
[root@localhost hbase]# vi conf/hbase-env.sh

找到# export JAVA_HOME=/usr/java/jdk1.6.0/ 在这一行下增加一行:

export JAVA_HOME=/usr/java/default

增加rootdir配置,使用本地存储base数据

[root@localhost hbase]# vi conf/hbase-site.xml
<configuration>
 <property>
    <name>hbase.rootdir</name>
    <value>file:///opt/hbase/data</value>
  </property>
</configuration>
  • 启动hbase
[root@localhost hbase]# ./bin/start-hbase.sh 
starting master, logging to /opt/hbase/bin/../logs/hbase-root-master-localhost.localdomain.out 
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
[root@localhost hbase]#
  • 导入初始化数据
[root@localhost hbase]# ./bin/hbase shell /root/hbase-create.hbase
……
TABLE                                                                                                                                            
AgentEvent                                                                                                                                       
AgentInfo                                                                                                                                        
AgentLifeCycle                                                                                                                                   
AgentStat                                                                                                                                        
AgentStatV2                                                                                                                                      
ApiMetaData                                                                                                                                      
ApplicationIndex                                                                                                                                 
ApplicationMapStatisticsCallee_Ver2                                                                                                              
ApplicationMapStatisticsCaller_Ver2                                                                                                              
ApplicationMapStatisticsSelf_Ver2                                                                                                                
ApplicationTraceIndex                                                                                                                            
HostApplicationMap_Ver2                                                                                                                          
SqlMetaData_Ver2                                                                                                                                 
StringMetaData                                                                                                                                   
TraceV2                                                                                                                                          
Traces                                                                                                                                           
16 row(s) in 0.0250 seconds
  • 确认初始化数据导入成功

使用浏览器访问http://192.168.1.154:16010/master-status确认数据导入成功,User tables有如下表则导入初始化数据成功。

2、部署pinpoint collector

[root@localhost ~]# cd /opt/
[root@localhost opt]# tar zxf /root/apache-tomcat-9.0.0.M11.tar.gz 
[root@localhost opt]# mv apache-tomcat-9.0.0.M11/ pp_collector
[root@localhost opt]# cd pp_collector/conf/
[root@localhost conf]# sed -i 's/port="8005"/port="18005"/g' server.xml
[root@localhost conf]# sed -i 's/port="8080"/port="18080"/g' server.xml
[root@localhost conf]# sed -i 's/port="8443"/port="18443"/g' server.xml
[root@localhost conf]# sed -i 's/port="8009"/port="18009"/g' server.xml
[root@localhost conf]# sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml
[root@localhost conf]# sed -i "s/localhost/192.168.1.154/g" server.xml
[root@localhost conf]# cd ../webapps/
[root@localhost webapps]# rm -rf *
[root@localhost webapps]# yum install -y unzip
[root@localhost webapps]# unzip /root/pinpoint-collector-1.5.3-SNAPSHOT.war -d /opt/pp_collector/webapps/ROOT
[root@localhost webapps]# cd ../bin/
[root@localhost bin]# ./startup.sh 
Using CATALINA_BASE:   /opt/pp_collector
Using CATALINA_HOME:   /opt/pp_collector
Using CATALINA_TMPDIR: /opt/pp_collector/temp
Using JRE_HOME:        /usr/java/default/jre
Using CLASSPATH:       /opt/pp_collector/bin/bootstrap.jar:/opt/pp_collector/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]#

3、部署pinpoint web

[root@localhost ~]# cd /opt/
[root@localhost opt]# tar zxf /root/apache-tomcat-9.0.0.M11.tar.gz 
[root@localhost opt]# mv apache-tomcat-9.0.0.M11/ pp_web
[root@localhost opt]# cd pp_web/conf/
[root@localhost conf]#
[root@localhost conf]# sed -i 's/port="8005"/port="28005"/g' server.xml
[root@localhost conf]# sed -i 's/port="8080"/port="28080"/g' server.xml
[root@localhost conf]# sed -i 's/port="8443"/port="28443"/g' server.xml
[root@localhost conf]# sed -i 's/port="8009"/port="28009"/g' server.xml
[root@localhost conf]# sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml
[root@localhost conf]# sed -i "s/localhost/192.168.1.154/g" server.xml
[root@localhost conf]# cd ../webapps/
[root@localhost webapps]# rm -rf *
[root@localhost webapps]# unzip /root/pinpoint-web-1.5.3-SNAPSHOT.war -d /opt/pp_web/webapps/ROOT
[root@localhost webapps]# cd ../bin/
[root@localhost bin]#  ./startup.sh 
Using CATALINA_BASE:   /opt/pp_web
Using CATALINA_HOME:   /opt/pp_web
Using CATALINA_TMPDIR: /opt/pp_web/temp
Using JRE_HOME:        /usr/java/default/jre
Using CLASSPATH:       /opt/pp_web/bin/bootstrap.jar:/opt/pp_web/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]#
使用浏览器访问http://192.168.1.154:28080/确认pinpoint web启动成功

4、部署pinpoint agent

pinpoint agent部署在具体的应用组件上,采集具体应该组件的信息,将CrapApi的war部署在192.168.1.160的tomcat容器中,使用pinpoint agent采集crapapi的应用信息。

将编译出来的pinpoint-agent-1.5.3-SNAPSHOT.tar.gz上传到192.168.1.160的/opt目录下

[root@localhost opt]# mkdir pinpoint-agent-1.5.3
[root@localhost opt]# tar zxf pinpoint-agent-1.5.3-SNAPSHOT.tar.gz pinpoint-agent-1.5.3
[root@localhost pinpoint-agent-1.5.3]# vi pinpoint.config

修改profiler.collector.ip=127.0.0.1 为profiler.collector.ip=192.168.1.154

[root@localhost pinpoint-agent-1.5.3]# cd /opt/apache-tomcat-8.0.36/bin/
[root@localhost bin]# vim catalina.sh

在脚本开头加入

AGENT_VERSION="1.5.3-SNAPSHOT" 
AGENT_ID="CrapApi"
APPLICATION_NAME="CrapApi-192.168.1.160"
AGENT_PATH="/opt/pinpoint-agent-1.5.3"
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-${AGENT_VERSION}.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"

其中AGENT_ID需要唯一。 重启crapapi的tomcat

[root@localhost bin]#./shutdown.sh && ./startup.sh

重启完毕后,访问http://192.168.1.154:28080/,在Application list下会多出CrapApi的应用:

pinpoint简单使用

6

1、首先使用CrapApi做一些操作,登入系统等等操作,使得CrapApi进行一些事务,这样pinpoint才能采集到数据。下图为CrapApi一部分操作后,pinpoint web上显示的监控数据。

2、点击右下角servers,出现如下界面:

点击Inspector,会新弹出一个页面如下,显示检测信息,分析Heap Usage、PermGen Usage 、JVM/System Cpu Usage、Transactions Per Second等信息。

如果组件内部出现调用错误,如下图中会显示有错误调用:

点击如下图中红色框中的位置:

弹出新页面如下:

点击出错的Api即可追踪出错栈信息。

一些使用注意事项

7

  1. 如果Hbase不是与pp-web, pp-collector装在一台机器上,需要安装zookeeper,只要安装就好,保证2181端口启动就好。
  2. 如果zookeeper安装在独立机器上,这里需要修改一下ppcolletor 和 ppweb的配置文件pinpoint-collector.properties,pinpoint-web.properties,不然会导致两个模块启动失败。
  3. 发现pinpoint还是有些缺陷,异步的操作监控不到。比如rabbitmq中的信息就采集不到,github上也有人自己开发了一个pinpoint的rabbitmq插件,但也不是很完善,比如一个消息对应多个消费者的这种模型pinpoint本身就不支持,所以插件这部分内容也是不完善的。
参考文档

8

Pinpoint官方GitHub

https://github.com/naver/pinpoint 

Pinpoint官方安装说明

https://github.com/naver/pinpoint/blob/master/doc/installation.md Pinpoint

中文部署说明

https://sconts.com/11

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

Pinpoint rabbitmq插件

https://github.com/majinkai/pinpoint-plugin

发表评论