在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/defaultexport MAVEN_HOME=/opt/mavenexport JRE_HOME=/usr/java/default/jreexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin

3、检查jdk,maven安装情况

[root@server opt]# java –versionjava 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 –versionApache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)Maven home: /opt/mavenJava version: 1.8.0_101, vendor: Oracle CorporationJava home: /usr/java/jdk1.8.0_101/jreDefault locale: en_US, platform encoding: UTF-8OS 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.xSwitched 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/selinuxSELINUX=disabled[root@localhost ~]# setenforce 0[root@localhost ~]# iptables –F
  • 解压hbase

[root@localhost ~]# lsanaconda-ks.cfg                 hbase-1.2.4-bin.tar.gz  jdk-8u101-linux-x64.rpm                pinpoint-web-1.5.3-SNAPSHOT.warapache-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]# lshbase-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.0Java 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_collectorUsing CATALINA_HOME:   /opt/pp_collectorUsing CATALINA_TMPDIR: /opt/pp_collector/tempUsing JRE_HOME:        /usr/java/default/jreUsing CLASSPATH:       /opt/pp_collector/bin/bootstrap.jar:/opt/pp_collector/bin/tomcat-juli.jarTomcat 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_webUsing CATALINA_HOME:   /opt/pp_webUsing CATALINA_TMPDIR: /opt/pp_web/tempUsing JRE_HOME:        /usr/java/default/jreUsing CLASSPATH:       /opt/pp_web/bin/bootstrap.jar:/opt/pp_web/bin/tomcat-juli.jarTomcat 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


©著作权归作者所有:来自51CTO博客作者mob604756fa4732的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. ssh隧道的特别使用--ssh跳板机的实现
  2. 架构学习之路——高可用高并发系统设计原则
  3. Docker-LinuxKit搭建及使用场景分析
  4. 提供坚固耐用的笔记本电脑的合作技术
  5. Kubernetes在智联招聘内网的应用场景
  6. centos7 测试网速教程
  7. 2018,新开始,新起点!
  8. 苹果Mac图片批量压缩重命名添加水印工具:PhotoBulk
  9. 为知笔记docker私有化部署

随机推荐

  1. XML解析之sax解析案例(二)使用sax解析把 xm
  2. java Domj4读取xml文件
  3. 用xml和xsl做网页实例
  4. xml——json
  5. XML数据查询技术已经成为现今的研究热点
  6. PHP扩展之XML操作(二)——XML解析器安装及
  7. Jquery读取xml
  8. 使用XmlTextWriter生成XML文件
  9. PHP扩展之XML操作(一)——SimpleXML
  10. js字符串转换成xml并使用