分布式跟踪工具Pinpoint

  • 分布式跟踪工具Pinpoint已关闭评论
  • 1,319 views
  • A+
所属分类:运维实战

前言

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

Pinpoint下载地址:https://github.com/naver/pinpoint/releases

架构图

分布式跟踪工具Pinpoint

优点

  • 分布式事务跟踪,跟踪跨分布式应用的消息
  • 自动检测应用拓扑,帮助你搞清楚应用的架构
  • 水平扩展以便支持大规模服务器集群
  • 提供代码级别的可见性以便轻松定位失败点和瓶颈
  • 代码零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可

支持模块

  • JDK 6+
  • Tomcat 6/7/8, Jetty 8/9
  • Spring, Spring Boot
  • Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient,NingAsyncHttpClient
  • Thrift Client, Thrift Service
  • MySQL, Oracle, MSSQL, CUBRID, DBCP, POSTGRESQL
  • Arcus, Memcached, Redis
  • iBATIS, MyBatis
  • gson, Jackson, Json Lib
  • log4j, Logback
链路跟踪系统的功能
  • 故障快速定位
  • 各个调用环节的性能分析
  • 数据分析等
  • 生成服务调用拓扑图

搭建环境

机器 安装 功能
10.209.3.81(8080,9994,9995,9996) pinpoint+hbase pinpointweb面板、控制器以及hbase数据库
10.209.3.81 pinpoint-agent+分布式项目 采集分布式项目数据,发送给collector

这里有必要说一下版本兼容的问题,官方给出如下:

Pinpoint Version   HBase 0.94.x     HBase 0.98.x   HBase 1.0.x     HBase 1.1.x
1.0.x                       yes              no                no                 no
1.1.x                        no               not tested     yes             not tested
1.5.x                        no               not tested     yes             not tested

由于下面使用了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 centos

创建测试环境:

[root@k4151v ~/pinpoint/soft]# pwd
/root/pinpoint/soft
[root@k4151v ~/pinpoint/soft]# ls
apache-tomcat-8.0.36.tar.gz hbase_scripts jdk-8u131-linux-x64.tar.gz pinpoint-collector-1.7.2.war
hbase-1.2.6-bin.tar.gz hbase_scripts.zip pinpoint-agent-1.7.2.tar.gz pinpoint-web-1.7.2.war

启动镜像:

docker run -d -it --name pinpoint -v /root/pinpoint/soft:/mnt/app  -p 9901:8080 -p 9994:9994 -p 9995:9995 -p  9996:9996  -p 16010:16010  centos
[root@k4151v ~/pinpoint/soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cba588470840 centos "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:9994-9996->9994-9996/tcp, 0.0.0.0:16010->16010/tcp, 0.0.0.0:9901->8080/tcp pinpoint

进入到镜像开始干活了:

docker exec -it cba588470840 /bin/bash

安装JDK

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

# 解压
tar -xvf jdk-8u131-linux-x64.tar.gz
# 移动路径
mv jdk1.8.0_131/ /opt/jdk1.8
# 配置环境变量
vi /etc/profile
export JAVA_HOME=/opt/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=/opt/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://10.209.3.81:16010/master-status

分布式跟踪工具Pinpoint

 

初始化Hbase的pinpoint库:

./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase
[root@cba588470840 bin]# ./hbase shell /mnt/app/hbase_scripts/hbase-create.hbase 
2018-05-11 07:37:04,301 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
0 row(s) in 1.4190 seconds

0 row(s) in 4.2310 seconds

0 row(s) in 2.2530 seconds

0 row(s) in 1.2200 seconds

0 row(s) in 1.2240 seconds

0 row(s) in 1.2220 seconds

0 row(s) in 1.2200 seconds

0 row(s) in 1.2230 seconds

0 row(s) in 1.2210 seconds

0 row(s) in 8.2440 seconds

0 row(s) in 1.2190 seconds

0 row(s) in 1.2210 seconds

0 row(s) in 1.2190 seconds

0 row(s) in 1.2180 seconds

0 row(s) in 1.2270 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.0200 seconds

刷新hbase管理端,查看HBase的数据是否初始化成功:

分布式跟踪工具Pinpoint

 

安装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.war

启动Tomcat:

./startup.sh

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

tail -f catalina.out
11-May-2018 07:46:51.398 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
11-May-2018 07:46:51.405 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
11-May-2018 07:46:51.416 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 19608 ms
2018-05-11 07:46:56 [INFO ](p.w.c.z.ZookeeperClusterDataManager) Reserved ZookeeperClusterDataManager$PullCollectorClusterJob started.
2018-05-11 07:46:56 [INFO ](p.w.c.z.ZookeeperClusterDataManager) syncPullCollectorCluster() started.
2018-05-11 07:46:56 [INFO ](p.w.c.z.ZookeeperClusterDataManager) Get collector([7239@cba588470840]) info.
2018-05-11 07:46:56 [INFO ](p.w.c.z.ZookeeperClusterDataManager) syncPullCollectorCluster() completed.

最后,访问以下地址:

http://10.209.3.81:9901/pinpoint/

分布式跟踪工具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=10.209.3.81

分布式跟踪工具Pinpoint

这里需要特别注意的是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 &

效果演示

 

分布式跟踪工具Pinpoint

 

总结

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

  • 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")

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar