在APP爆炸的今天,app之间、app内部的耦合越来越多也越来越复杂,如何监控管理这些APP实际情况成了越来越热门的话题。本文介绍开源APM(Application Performance Management)工具pinpoint的部署和简单的使用方法。
基本介绍
1
现在的服务(Services )通常包括许多不同的组件(components),这些组件内部使用API调用,与外部服务之间也有API调用关系。每个事务如何在服务内部被执行通常是一个黑盒(blackbox)。Pinpoint精确跟踪这些组件之间的事务流,并提供一个清晰的视图,以便识别问题点和潜在的瓶颈。
Pinpoint提供以下五种视图:
服务器图(ServerMap) - 通过可视化其组件的互连方式来了解任何分布式系统的拓扑。单击节点将显示有关组件的详细信息,例如其当前状态和事务计数。
实时活动线程图(Realtime Active Thread Chart) - 实时监视应用程序内的活动线程。
请求/响应散布图(Request/Response Scatter Chart) - 可视化请求计数和响应模式,以确定潜在问题。可以通过在图表上拖动来选择事务以获取更多详细信息。
调用栈信息(CallStack) - 增强分布式环境中每个事务的代码级可见性,识别单个视图中的瓶颈和故障点。
检查器(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
如果Hbase不是与pp-web, pp-collector装在一台机器上,需要安装zookeeper,只要安装就好,保证2181端口启动就好。
如果zookeeper安装在独立机器上,这里需要修改一下ppcolletor 和 ppweb的配置文件pinpoint-collector.properties,pinpoint-web.properties,不然会导致两个模块启动失败。
发现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