天天看点

调用链路监控 | Pinpoint

大量使用微服务的你,不知道是否遇见过这种问题,服务器没有异常报警,网络也很空闲,但系统却被卡在某一步业务无法继续进行。

传统项目,我们可以只需要对Web服务、应用服务、数据库服务这三层进行检查即可,即使逐步进行,也不会浪费太多时间。但微服务是由大量的应用组成,此时如果一个个逐步进行检查,会浪费大量时间和精力,更甚至,问题还没找到,业务限时促销已经结束。

基于这些问题你就要考虑引入APM工具,本文介绍下Pinpoint。

一、先来看下效果图

1、调用链路监控

调用链路监控 | Pinpoint

2、Tomcat状态监控

调用链路监控 | Pinpoint

3、调用细节展示

调用链路监控 | Pinpoint

二、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"的进程 
[[email protected] 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

七、部署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控制台查看,应该已经有了刚刚操作的应用

八、使用简介

调用链路监控 | Pinpoint

红框1:选择应用

红框2:选择调用链展示的层数

红框3:跳转到Tomcat状态界面

本文简单展示了一种应用场景,更多场景,还需要自己去探索。

更多精彩内容,请关注公众号。

博客文章每周从公众号同步一次。

调用链路监控 | Pinpoint

继续阅读