大量使用微服务的你,不知道是否遇见过这种问题,服务器没有异常报警,网络也很空闲,但系统却被卡在某一步业务无法继续进行。
传统项目,我们可以只需要对Web服务、应用服务、数据库服务这三层进行检查即可,即使逐步进行,也不会浪费太多时间。但微服务是由大量的应用组成,此时如果一个个逐步进行检查,会浪费大量时间和精力,更甚至,问题还没找到,业务限时促销已经结束。
基于这些问题你就要考虑引入APM工具,本文介绍下Pinpoint。
一、先来看下效果图
1、调用链路监控
2、Tomcat状态监控
3、调用细节展示
二、Pinpoint简介
Pinpoint, 2012年七月开始开发,在2015年1月作为一个开源项目启动, 是一个为大型分布式系统服务的n层架构跟踪平台。 Pinpoint的特点如下:
-
分布式事务跟踪,跟踪跨分布式应用的消息
-
自动检测应用拓扑,帮助你搞清楚应用的架构
-
水平扩展以便支持大规模服务器集群
-
提供代码级别的可见性以便轻松定位失败点和瓶颈
-
使用字节码增强技术,添加新功能而无需修改代码
如果你要在生产环境使用Pinpoint,无需做任何代码改动,只需要在Tomcat增加agent配置(以Jar包运行的项目增加JVM配置)即可。
三、安装准备
3.1、GitHub 地址
https://github.com/naver/pinpoint
3.2、需要的软件列表
-
java
-
tomcat
-
hbase
-
pinpoint-agent
-
pinpoint-web
-
pinpoint-collector
Java、Tomcat的安装配置,不做解释。后三者在上面的github中即可下载到
3.3、本文以以下结构进行
pinpoint-web
pinpoint-collector
hbase
部署到一台机器上,暂且称之为监控机器
pinpoint-agent存放在应用机器上,用于收集tomcat信息并传输到监控机器
四、安装Hbase
4.1、下载地址:
https://hbase.apache.org/downloads.html
我使用的版本是1.3.3
4.2、下载后,解压到服务器指定目录
配置Java变量
cd /${hbase_dir}/conf/
vim hbase-env.sh
# 增加java配置
export JAVA_HOME=/usr/local/jdk1.8.0_45/
4.3、修改Hbase配置信息(本文是将数据放到本地)
vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///opt/data/hbase</value>
<description>The directory shared by RegionServers.
</description>
</property>
</configuration>
4.4、启动Hbase
bin/start-hbase.sh
4.5、查看Hbase是否启动成功
# 查看Hbase是否启动成功,如果启动成功的会看到"HMaster"的进程
[root@localhost bin]# jps
12075 Jps
11784 HMaster
4.6、初始化Hbase的pinpoint库
脚本文件地址:https://github.com/naver/pinpoint/tree/master/hbase/scripts
# 执行pinpoint提供的Hbase初始化语句,这时会初始化一会。
./hbase shell /home/pp_res/hbase-create.hbase
# 执行完了以后,进入Hbase
./hbase shell
# 进入后可以看到Hbase的版本,还有一些相关的信息
2016-11-15 01:55:44,861 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using built
...
hbase(main):001:0>
# 输入"status 'detailed'"可以查看刚才初始化的表,是否存在
hbase(main):001:0> status 'detailed'
version 1.0.3
0 regionsInTransition
master coprocessors: []
1 live servers
localhost:50887 1478538574709
...
五、部署pinpoint-collector
部署war包(以ROOT目录部署),修改server.xml配置
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
启动tomcat
六、部署pinpoint-web
部署war包(以ROOT目录部署),修改server.xml配置
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
启动tomcat
访问http://IP:28080/
如果可以访问到以下界面,说明成功
七、部署pinpoint-agent采集监控数据
7.1、在需要监控的应用服务器上创建路径,存放pinpoint-agent
mkdir -p /opt/pp-zd
上传解压pinpoint-agent
7.2、配置pinpoint-agent
# 编辑配置文件
vim pinpoint.config
# 主要修改IP,只需要指定到安装pp-col的IP就行了,安装pp-col启动后,自动就开启了9994,9995,9996的端口了。这里就不需要操心了,如果有端口需求,要去pinpoint-collector的配置文件("pinpoint-collector/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties")中,修改这些端口
profiler.collector.ip={监控机器ID}
7.3、监控tomcat
编辑应用Tomcat的bin/catalina.sh,增加agent配置
vim bin/catalina.sh
# 第一行是pp-agent的jar包位置
# 第二行是agent的ID,这个ID是唯一的
# 第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了
APPLICATION_NAME="app-name" # 变量
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/pp-zd/pinpoint-agent/pinpoint-bootstrap-1.8.3.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$APPLICATION_NAME"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
7.4、重启tomcat
返回到pinpoint-web控制台查看,应该已经有了刚刚操作的应用
八、使用简介
红框1:选择应用
红框2:选择调用链展示的层数
红框3:跳转到Tomcat状态界面
本文简单展示了一种应用场景,更多场景,还需要自己去探索。
更多精彩内容,请关注公众号。
博客文章每周从公众号同步一次。