- A+
前言
Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用
于基于java的大规模分布式系统。由于工作需要,前段时间抽口研究了一下APM相关技术。 大的互联网公司都有自己的分布式跟踪系统,比如Google的Dapper,Twitter的zipkin,淘宝的鹰眼,新浪的Watchman,京东的Hydra等,当然还有一些收费的工具。由于技术栈、项目规模以及方便且容易上手的原因,最终还是选择Pinpoint,本文是为了记录Pinpoint详细的搭建过程。
Pinpoint下载地址:https://github.com/naver/pinpoint/releases
架构图
优点
- 分布式事务跟踪,跟踪跨分布式应用的消息
- 自动检测应用拓扑,帮助你搞清楚应用的架构
- 水平扩展以便支持大规模服务器集群
- 提供代码级别的可见性以便轻松定位失败点和瓶颈
- 代码零侵入,运用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
初始化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
解压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-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
这里需要特别注意的是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")
- 安卓客户端下载
- 微信扫一扫
- 微信公众号
- 微信公众号扫一扫