• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

分布式跟踪工具Pinpoint初探

技术杂谈 勤劳的小蚂蚁 2个月前 (02-07) 65次浏览 已收录 0个评论 扫描二维码

前言

由于工作需要,前段时间抽口研究了一下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:
  1. docker pull docker.io/centos
创建测试环境:
  1. 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进行安装。
  1. # 解压
  2. tar -xvf jdk-8u131-linux-x64.tar.gz
  3. # 移动路径
  4. mv jdk1.8.0_131/ /usr/java/jdk1.8
  5. # 配置环境变量
  6. vi /etc/profile
  7. export JAVA_HOME=/usr/java/jdk1.8
  8. export PATH=$PATH:$JAVA_HOME/bin
  9. # 使生效
  10. source /etc/profile

安装Hbase

解压,并放入指定目录:
  1. tar -zxvf hbase-1.2.6-bin.tar.gz
  2. mv hbase-1.2.6/ /usr/local/hbase
配置JDK环境变量位置:
  1. cd /usr/local/hbase/conf/
  2. vi hbase-env.sh
导入以下配置:
  1. export JAVA_HOME=/usr/java/jdk1.8/
修改Hbase的配置信息:
  1. vi hbase-site.xml
指定Hbase存储数据路径,建议为宿机目录:
  1. <configuration>
  2.    <property>
  3.      <name>hbase.rootdir</name>
  4.      <value>file:///mnt/app/hbase_data</value>
  5.   </property>
  6. </configuration>
最后,启动hbase:
  1. cd /usr/local/hbase/bin/
  2. ./start-hbase.sh
查看Hbase是否启动成功,如果启动成功的会看到”HMaster”的进程:
  1. [root@c0931ce16a8a bin]# jps
  2. 489Jps
  3. 172HMaster
启动成功以后,我们可以通过以下网址访问:
不出意外,应该是这个样子:
初始化Hbase的pinpoint库:
  1. ./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase
  1. [root@c0931ce16a8a bin]#./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase
  2. 2018-05-0908:48:25,931 WARN  [main] util.NativeCodeLoader:Unable to load native-hadoop library for your platform...using builtin-java classes where applicable
  3. 0 row(s)in1.5670 seconds
  4. 0 row(s)in4.2500 seconds
  5. 0 row(s)in4.2440 seconds
  6. 0 row(s)in1.2200 seconds
  7. 0 row(s)in1.2210 seconds
  8. 0 row(s)in1.2220 seconds
  9. 0 row(s)in1.2220 seconds
  10. 0 row(s)in1.2210 seconds
  11. 0 row(s)in1.2260 seconds
  12. 0 row(s)in8.2590 seconds
  13. 0 row(s)in1.2260 seconds
  14. 0 row(s)in2.2270 seconds
  15. 0 row(s)in1.2290 seconds
  16. 0 row(s)in1.2240 seconds
  17. 0 row(s)in2.2340 seconds
  18. TABLE
  19. AgentEvent
  20. AgentInfo
  21. AgentLifeCycle
  22. AgentStatV2
  23. ApiMetaData
  24. ApplicationIndex
  25. ApplicationMapStatisticsCallee_Ver2
  26. ApplicationMapStatisticsCaller_Ver2
  27. ApplicationMapStatisticsSelf_Ver2
  28. ApplicationStatAggre
  29. ApplicationTraceIndex
  30. HostApplicationMap_Ver2
  31. SqlMetaData_Ver2
  32. StringMetaData
  33. TraceV2
  34. 15 row(s)in0.0430 seconds
登录web,来查看HBase的数据是否初始化成功:

安装pinpoint

解压Tomcat8,将Tomcat8移动到指定位置:
  1. tar -xvf apache-tomcat-8.0.36.tar.gz
  2. mv apache-tomcat-8.0.36/usr/local/tomcat8
为了方便省事,我们把pinpoint-web 和 pinpoint-collector 都撸进一个Tomcat中:
  1. mv pinpoint-collector-1.7.2.war  /usr/local/tomcat8/webapps/
  2. mv pinpoint-web-1.7.2.war  /usr/local/tomcat8/webapps/
  3. # 把web重命名以下
  4. mv pinpoint-web-1.7.2.war  pinpoint
启动Tomcat:
  1. ./startup.sh
前面的步骤ok,基本不会出现问题,你也可以查看日志是否启动成功:
  1. tail -f catalina.out
最后,访问以下地址:

测试收集

配置Pinpoint-agent

解压Pinpoint-agent:
  1. tar - xvf pinpoint-agent-1.7.2.tar.gz
配置pinpoint.config:
  1. # 这是指pinpoint-collector的地址,默认为127.0.0.1,这里修改为以下
  2. profiler.collector.ip=192.168.1.180
这里需要特别注意的是collector的端口一共有3个。 9994是tcp端口9995,9996是udp端口,要保证这些是通的。初始化创建Docker的时候我们已经做了映射。

普通项目部署

修改应用所在tomcat的/bin/catalina.sh:
  1. # 修改为自己的目录
  2. CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/software/pinpoint-agent-1.7.2/pinpoint-bootstrap-1.7.2.jar"
  3. # 这里的agentId必须唯一,标志一个jvm
  4. CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=myapp"
  5. # applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName
  6. CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP"
保存以后,启动项目即可。

springboot项目部署

  1. 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

    丨极客文库, 版权所有丨如未注明 , 均为原创丨
    本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
    转载请注明原文链接:分布式跟踪工具Pinpoint初探
    喜欢 (0)
    [247507792@qq.com]
    分享 (0)
    勤劳的小蚂蚁
    关于作者:
    温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

    您必须 登录 才能发表评论!

    • 精品技术教程
    • 编程资源分享
    • 问答交流社区
    • 极客文库知识库

    客服QQ


    QQ:2248886839


    工作时间:09:00-23:00