为了账号安全,请及时绑定邮箱和手机立即绑定

分布式跟踪工具Pinpoint初探

标签:
测试

图片描述

前言

由于工作需要,前段时间抽口研究了一下APM相关技术。 大的互联网公司都有自己的分布式跟踪系统,比如Google的Dapper,Twitter的zipkin,淘宝的鹰眼,新浪的Watchman,京东的Hydra等,当然还有一些收费的工具。由于技术栈、项目规模以及方便且容易上手的原因,最终还是选择Pinpoint,本文是为了记录Pinpoint详细的搭建过程。

架构图

图片描述

优点

  • 分布式事务跟踪,跟踪跨分布式应用的消息

  • 自动检测应用拓扑,帮助你搞清楚应用的架构

  • 水平扩展以便支持大规模服务器集群

  • 提供代码级别的可见性以便轻松定位失败点和瓶颈

  • 代码零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可
Why

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络,那现在的问题是一个请求经过了这些服务后其中出现了一个调用失败的问题,只知道有异常,但具体的异常在哪个服务引起的就需要进入每一个服务里面看日志,这样的处理效率是非常低的。

链路跟踪系统的功能
  • 故障快速定位
  • 各个调用环节的性能分析
  • 数据分析等
  • 生成服务调用拓扑图
搭建环境
机器 安装 功能
192.168.1.180(8080,9994,9995,9996) pinpoint+hbase pinpointweb面板、控制器以及hbase数据库
192.168.1.190 pinpoint-agent+分布式项目 采集分布式项目数据,发送给collector

由于下面使用了Docker环境,相关软件已经上传至映射目录。

工具说明
Pinpoint-Web 将收集到的数据显示成WEB网页形式
Pinpoint-Collector 收集各种性能数据
Pinpoint-Agent 和自己运行的应用关联起来的探针
HBase Storage 收集到的数据存到HBase中
hbase_scripts Pinpoint初始化数据库
jdk-1.8 Java运行环境
apache-tomcat-8.0 Tomcat运行容器

HBase脚本介绍

  • hbase-create.hbase - 创建pinpoint必须的表。
  • hbase-drop.hbase - 删除pinpoint必须的所有表
  • hbase-flush-table.hbase - 刷新所有表
  • hbase-major-compact-htable.hbase- 压缩主要的所有表

Docker环境

这里,我们使用Docker进行测试,下载一个纯净版的centos:

docker pull docker.io/centos

创建测试环境:

docker run -it --name pinpoint -v /home/software/:/mnt/app  -p 9901:8080 -p 9994:9994 -p 9995:9995 -p  9996:9996  -p 16010:16010  docker.io/centos

安装JDK

由于oracle官网设置了必须认证才可以下载JDK,这里我们使用事先下载好的JDK8进行安装。

# 解压
tar -xvf jdk-8u131-linux-x64.tar.gz
# 移动路径
mv jdk1.8.0_131/ /usr/java/jdk1.8
# 配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# 使生效
source /etc/profile

安装Hbase

解压,并放入指定目录:

tar -zxvf hbase-1.2.6-bin.tar.gz

mv hbase-1.2.6/ /usr/local/hbase

配置JDK环境变量位置:

cd /usr/local/hbase/conf/

vi hbase-env.sh

导入以下配置:

export JAVA_HOME=/usr/java/jdk1.8/

修改Hbase的配置信息:

vi hbase-site.xml

指定Hbase存储数据路径,建议为宿机目录:

<configuration>
    <property>
      <name>hbase.rootdir</name>
      <value>file:///mnt/app/hbase_data</value>
   </property>
</configuration>

最后,启动hbase:

cd /usr/local/hbase/bin/

./start-hbase.sh

查看Hbase是否启动成功,如果启动成功的会看到"HMaster"的进程:

[root@c0931ce16a8a bin]# jps
489 Jps
172 HMaster

启动成功以后,我们可以通过以下网址访问:

http://192.168.1.180:16010/master-status

不出意外,应该是这个样子:

图片描述

初始化Hbase的pinpoint库:

./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase
[root@c0931ce16a8a bin]# ./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase 
2018-05-09 08:48:25,931 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
0 row(s) in 1.5670 seconds

0 row(s) in 4.2500 seconds

0 row(s) in 4.2440 seconds

0 row(s) in 1.2200 seconds

0 row(s) in 1.2210 seconds

0 row(s) in 1.2220 seconds

0 row(s) in 1.2220 seconds

0 row(s) in 1.2210 seconds

0 row(s) in 1.2260 seconds

0 row(s) in 8.2590 seconds

0 row(s) in 1.2260 seconds

0 row(s) in 2.2270 seconds

0 row(s) in 1.2290 seconds

0 row(s) in 1.2240 seconds

0 row(s) in 2.2340 seconds

TABLE
AgentEvent
AgentInfo
AgentLifeCycle
AgentStatV2
ApiMetaData
ApplicationIndex
ApplicationMapStatisticsCallee_Ver2
ApplicationMapStatisticsCaller_Ver2
ApplicationMapStatisticsSelf_Ver2
ApplicationStatAggre
ApplicationTraceIndex
HostApplicationMap_Ver2
SqlMetaData_Ver2
StringMetaData
TraceV2
15 row(s) in 0.0430 seconds

登录web,来查看HBase的数据是否初始化成功:

图片描述

安装pinpoint

解压Tomcat8,将Tomcat8移动到指定位置:

tar -xvf apache-tomcat-8.0.36.tar.gz

mv apache-tomcat-8.0.36 /usr/local/tomcat8

为了方便省事,我们把pinpoint-web 和 pinpoint-collector 都撸进一个Tomcat中:

mv pinpoint-collector-1.7.2.war  /usr/local/tomcat8/webapps/
mv pinpoint-web-1.7.2.war  /usr/local/tomcat8/webapps/
# 把web重命名以下
mv pinpoint-web-1.7.2.war  pinpoint

启动Tomcat:

./startup.sh

前面的步骤ok,基本不会出现问题,你也可以查看日志是否启动成功:

tail -f catalina.out

最后,访问以下地址:

http://192.168.1.180:9901/pinpoint

图片描述

测试收集

配置Pinpoint-agent

解压Pinpoint-agent:

tar - xvf pinpoint-agent-1.7.2.tar.gz

配置pinpoint.config:

# 这是指pinpoint-collector的地址,默认为127.0.0.1,这里修改为以下
profiler.collector.ip=192.168.1.180

这里需要特别注意的是collector的端口一共有3个。
9994是tcp端口9995,9996是udp端口,要保证这些是通的。初始化创建Docker的时候我们已经做了映射。

普通项目部署

修改应用所在tomcat的/bin/catalina.sh:

# 修改为自己的目录
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/software/pinpoint-agent-1.7.2/pinpoint-bootstrap-1.7.2.jar"
# 这里的agentId必须唯一,标志一个jvm
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=myapp"
# applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP"

保存以后,启动项目即可。

springboot项目部署

nohup java -javaagent:/home/software/pinpoint-agent-1.7.2/pinpoint-bootstrap-1.7.2.jar -Dpinpoint.agentId=itstyle-myapp -Dpinpoint.applicationName=itstyle-MyTestPP -jar myapp.jar &
效果演示

当然,这只是个空统计,并没有进行测试:

图片描述

分享一下真实测试场景:

图片描述
图片描述

总结

至此,整个环境已经搭建完毕,当然了还有一些大家需要注意的地方

  • Hbase使用的是默认自带的zookeeper,你也可以自行安装。

  • Dcoker下部署Hbase,切记要把数据放置在宿机,放置数据丢失。

  • 创建Docker容器是,记得映射 8080,9994,9995,9996,16010 相关端口,这里为了省事,把Hbase和pinpoint装在了一起。

  • 如果zookeeper安装在独立机器上,这里需要修改一下pp-colletor 和 pp-web的配置文件pinpoint-collector.properties,pinpoint-web.properties,不然会导致俩个模块启动失败。

  • 思考:官网上说损耗在百分之几,这个还没有详细的测试,网上有人说相对高并发下,性能损失能达到30%~50%之间;也有人说可能是配置参数的问题,待研究。

最后,由于国内下载速度的原因,这里提供下相关软件: 分布式跟踪工具Pinpoint初探(科帮网).zip

参考文章

https://github.com/naver/pinpoint

https://skyao.io/learning-pinpoint/installation/quickstart.html

https://blog.52itstyle.com/archives/2806/

http://www.tangrui.net/2016/zipkin-vs-pinpoint.html

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.7万
获赞与收藏
2434

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消