`
白马探
  • 浏览: 14630 次
社区版块
存档分类
最新评论

SpringCloud:微服务利剑之APM平台Pinpoint

 
阅读更多

1. Pinpoint概述

Pinpoint是一个由韩国人编写的为大型分布式系统服务的链路跟踪平台,并提供大量链路跟踪数据分析汇总解决方案。自2012年7月开始开发,与2015年1月做为一个开源项目推出。

2. Pinpoint主要特性

  • 分布式事务跟踪,跟踪跨分布式应用的消息。
  • 自动检测应用拓扑,帮助你搞清楚应用的架构。
  • 水平扩展以便支持大规模服务器集群。
  • 提供代码级别的可见性以便轻松定位失败点和瓶颈。
  • 使用字节码增强技术,添加新功能而无需修改代码。

3. Pinpoint优势

  • 无入侵:采用字节码增强技术,新增功能无需修改代码。
  • 性能高:对性能的影响非常小(资源使用量最小仅增加3%),异步数据传输,采用UDP协议让出网络连接优先级。

4. Pinpoint架构简介

先看一下官方提供的架构图,如图:

 

SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
 

 

Pinpoint主要包含了4个组件:

  • Pinpoint Agent:探针,附加到用于分析的Java服务
  • Pinpoint Collector:数据收集组件,部署在Web容器上
  • Pinpoint Web UI:数据展示组件,部署在Web容器上
  • HBase Storage:数据存储组件

架构图从上往下看,首先是通过Agent组件收集需要的数据,通过UPD/TCP的方式将数据发送给Collector,由Collector将数据分析整理过后存入HBase,通过Web UI组件将分析好的数据从HBase中读出,展示在现代化的UI界面上。

5. Pinpoint数据结构简介

Pinpoint中,核心数据结构由Span, Trace, 和 TraceId组成。

  • Span: RPC (远程过程调用/remote procedure call)跟踪的基本单元; 当一个RPC调用到达时指示工作已经处理完成并包含跟踪数据。为了确保代码级别的可见性,Span拥有带SpanEvent标签的子结构作为数据结构。每个Span包含一个TraceId。
  • Trace: 多个Span的集合; 由关联的RPC (Spans)组成. 在同一个trace中的span共享相同的TransactionId。Trace通过SpanId和ParentSpanId整理为继承树结构.
  • TraceId: 由 TransactionId, SpanId, 和 ParentSpanId 组成的key的集合. TransactionId 指明消息ID,而SpanId 和 ParentSpanId 表示RPC的父-子关系。
    • TransactionId (TxId): 在分布式系统间单个事务发送/接收的消息的ID; 必须跨整个服务器集群做到全局唯一.
    • SpanId: 当收到RPC消息时处理的工作的ID; 在RPC请求到达节点时生成。
    • ParentSpanId (pSpanId): 发起RPC调用的父span的SpanId. 如果节点是事务的起点,这里将没有父span – 对于这种情况, 使用值-1来表示这个span是事务的根span。

6. Pinpoint版本依赖

  • Pinpoint所需要的Java版本兼容:
  • Pinpoint Version	Agent	Collector	Web
    1.0.x	6-8	6-8	6-8
    1.1.x	6-8	7-8	7-8
    1.5.x	6-8	7-8	7-8
    1.6.x	6-8	7-8	7-8
    1.7.x	6-8	8	8
    1.8.0	6-10	8	8
    1.8.1+	6-11	8	8
     
  • HBase所需要的版本兼容
  • Pinpoint Version	HBase 0.94.x	HBase 0.98.x	HBase 1.0.x	HBase 1.2.x	HBase 2.0.x
    1.0.x	yes	no	no	no	no
    1.1.x	no	not tested	yes	not tested	no
    1.5.x	no	not tested	yes	not tested	no
    1.6.x	no	not tested	not tested	yes	no
    1.7.x	no	not tested	not tested	yes	no
    1.8.x	no	not tested	not tested	yes	no
    Pinpoint Version	HBase 0.94.x	HBase 0.98.x	HBase 1.0.x	HBase 1.2.x	HBase 2.0.x
     Agent – Collector所需要的版本兼容
  • Agent Version	Collector 1.0.x	Collector 1.1.x	Collector 1.5.x	Collector 1.6.x	Collector 1.7.x	Collector 1.8.x
    1.0.x	yes	yes	yes	yes	yes	yes
    1.1.x	not tested	yes	yes	yes	yes	yes
    1.5.x	no	no	yes	yes	yes	yes
    1.6.x	no	no	not tested	yes	yes	yes
    1.7.x	no	no	no	no	yes	yes
    1.8.x	no	no	no	no	no	yes
    Agent Version	Collector 1.0.x	Collector 1.1.x	Collector 1.5.x	Collector 1.6.x	Collector 1.7.x	Collector 1.8.x
     Flink所需要的版本兼容
  • Pinpoint Version	flink 1.3.X	flink 1.4.X	flink 1.5.X	flink 1.6.X	flink 1.7.X	Pinpoint Version
    1.7.x	yes	yes	no	no	no	1.7.x
    1.8.x	yes	yes	no	no	no	1.8.x
    1.9.x	yes	yes	yes	yes	yes	1.9.x
    Pinpoint Version	flink 1.3.X	flink 1.4.X	flink 1.5.X	flink 1.6.X	flink 1.7.X	Pinpoint Version
    1.7.x	yes	yes	no	no	no	1.7.x
    1.8.x	yes	yes	no	no	no	1.8.x
    1.9.x	yes	yes	yes	yes	yes	1.9.x
     

    7. Spring Cloud与Pinpoint实战

    在介绍实战之前,我们先介绍一下Pinpoint部署构建。

    笔者构建的一些前置条件:

    java:1.8
    CentOS:7.6

    1. HBase部署

    存储方式需要使用HBase1.2.x的版本,笔者这里选择的是HBase1.2.6,下载地址为Apache官网,推荐使用有端点续传功能的下载器下载(实在是有点慢),HBase全版本下载地址:http://archive.apache.org/dist/hbase/ ,各位读者选择自己喜欢的版本下载。

    下载完成后,将HBase1.2.6放入CentOS的opt目录中,执行如下命令:

  • tar -xvzf hbase-1.2.6-bin.tar.gz
    mv hbase-1.2.6/ /data/service/hbase/
     修改hbase中config目录中的JAVA_HOME,将这里的JAVA_HOME修改为自己本地的路径,笔者这里修改如下:
  • export JAVA_HOME=/opt/jdk1.8.0_221
     修改完成后就可以进入hbase的bin目录,启动hbase了,执行如下语句:
  • ./start-hbase.sh
     启动成功后,可以执行jps,如果看到有HMaster,可有证明启动成功,如下:
  • 19263 HMaster
     也可以打开浏览器访问:http://ip:16010/master-status ,结果如图:

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
    ./hbase shell /opt/hbase-create.hbase
     
    ./hbase shell /opt/hbase-create.hbase
     

     

    接下来我们先把Pinpoint的HBase的构建脚本导入,进入HBase的bin目录下执行如下语句:

  • ./hbase shell /opt/hbase-create.hbase
     数据导入成功我们在HBase的UI界面上可以看到,如图:

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
     

     

    后面的目录是笔者用来存放HBase初始化脚本的路径,各位读者可根据情况自行替换,至此,HBase环境准备完成,接下来开始部署Collector和Web UI。

    1. Collector和Web UI部署

    出于简单方便考虑,不推荐初学者自行编译代码进行部署,可以直接使用官方提供的发行版本进行部署。

    浏览器访问链接:https://github.com/naver/pinpoint/releases/ ,直接下载当前最新Release版本即可,笔者现在看到的最新版本是1.8.4,如图,需要下载的内容有pinpoint-agent-1.8.4.tar.gzpinpoint-collector-1.8.4.warpinpoint-web-1.8.4.war

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
     

     

    首先需要准备两个tomcat,笔者这里下载的tomcat8,解压两份后并重命名为apache-tomcat-pinpoint-collectorapache-tomcat-pinpoint-web

    apache-tomcat-pinpoint-collector中的config中的server.xml进行修改。

    将8005改成18005,8080改成18080,8443改为18443,8009改为18009。

    同样也将apache-tomcat-pinpoint-web中的config中的server.xml进行修改。

    将8005改成28005,8080改成28080,8443改为28443,8009改为28009。

    apache-tomcat-pinpoint-collector中的webapp/ROOT清空,将pinpoint-collector-1.8.4.war放入并解压。解压完成后就可以进入bin目录使用./startup.sh启动tomcat了,并且使用命令tail -f ../logs/catalina.out观察启动日志是否启动成功。

    同样,将apache-tomcat-pinpoint-web中的webapp/ROOT清空,将pinpoint-web-1.8.4.war放入并解压。解压完成后就可以进入bin目录使用./startup.sh启动tomcat了,并且使用命令tail -f ../logs/catalina.out观察启动日志是否启动成功。

    当Collector和Web UI都启动成功后,就可以使用打开浏览器访问:http://ip:28080/#/main ,初次访问如图:

  • SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
  •  

     

    接入方式和上一篇的Skywalking是一致的,都是使用探针技术接入应用程序,java -jar的方式来加载Agent探针。

    首先在工程的跟目录中执行mvn install,而后在CentOS的opt中新建4个目录,分别存放4个打好包的工程。笔者这里创建的4个目录分别为/opt/project/consumer_service/opt/project/eureka_service/opt/project/provider_service/opt/project/zuul_service,将4个jar包分别放入对应的目录中,并解压刚才我们下载好的pinpoint-agent-1.8.4.tar.gz探针,我们将解压后的探针放在/opt的目录中,接下来,我们使用如下命令,顺次启动4个jar包:

    java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=consumer-service -Dpinpoint.applicationName=consumer-server -jar /opt/project/consumer_service/consumer-0.0.1-SNAPSHOT.jar
    
    java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=eureka-service -Dpinpoint.applicationName=eureka-server -jar /opt/project/eureka_service/eureka-0.0.1-SNAPSHOT.jar
    
    java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=provider-service -Dpinpoint.applicationName=provider-server -jar /opt/project/provider_service/provider-0.0.1-SNAPSHOT.jar
    
    java -javaagent:/opt/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=zuul-service -Dpinpoint.applicationName=zuul-server -jar /opt/project/zuul_service/zuul-0.0.1-SNAPSHOT.jar

     上述命令执行完成之后,再打开Web UI查看显示情况。

    首先打开浏览器访问:http://192.168.44.129:8080/client/hello?name=spring ,页面正常显示Hello, name is spring,查看Pinpoint的Web UI,如图:

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
     

     

    图清楚的显示了我们当前系统的拓扑结构,横线上面的数字代表了调用次数,右边部分,最上面显示的是成功和失败的情况,中间部分显示的是响应时间,下面显示的是加载所使用的时间。

    检查器(Inspector):这里已Zuul-Service为例,Timeline显示的是请求的时间段,Information显示的是节点的一些当前信息,包含Application Name、Agent Id、Agent版本、JVM信息、开始时间等。

    Heap信息的使用情况,如图:

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
     

     

    系统CPU、活动线程、响应时间等信息如图:

     

    SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint
  • 8. 小结

    这里总结一下整个案例的启动顺序:

    1. 启动HBase
    2. 启动collector
    3. 启动Web-UI
    4. 启动Agent(Eureka、provider、consumer、zuul)
    5. 应用调用
    6. 访问Web-UI查看统计信息

    同Skywalking一样,以上启动顺序供各位读者参考,请各位读者最好按照以上顺序启动,因为不同的组件之前其实是有相互依赖关系的,如果随意更改启动顺序可能会造成某些未知问题。至此,Spring Cloud和APM的相关操作就告一段落了。APM可以很好的帮我们理解系统行为,也是分析系统性能的工具,更是发生问题故障的时候利器,可以帮我们快速的定位查找问题。

 

 

分享到:
评论

相关推荐

    Pinpoint 2.0.X版本

    二、pinpoint-web:可视化监控平台 pinpoint-web是Pinpoint的前端展示部分,提供了丰富的图表和报表,用于直观地展示系统的健康状况。用户可以查看服务的调用拓扑图,追踪单个请求的完整路径,监控服务的性能指标,...

    基于 JFinal 的国产微服务框架,SpringCloud 之外的另一个选择

    JFinal 是一款基于 Java 的高性能 MVC 框架,它以简单、实用为设计原则,致力于提供快速开发体验。...通过了解和掌握 Jboot,开发者可以在不依赖 SpringCloud 的情况下,构建出高性能、高可扩展性的微服务体系。

    271760513/pinpoint:2.3.3 pinpoint 探针使用

    pinpoint 探针,docker镜像 271760513/pinpoint:2.3.3 使用

    Centos下分布式跟踪工具Pinpoint的完整部署记录(个人精华版本)

    Pinpoint能够帮助开发者监控微服务架构中的应用性能,通过追踪调用链路,提供详细的请求延迟和调用关系信息。以下是完整的部署步骤: 1. **系统准备**: 在开始部署前,确保你的CentOS系统已经更新到最新,并安装...

    java7源码-mypinpoint-plugin:APM-pinpoint第三方插件

    APM-pinpoint第三方插件 BRPC,XXL-JOB(执行器),TARS插件 1,下载pinpoint源码 2,本地安装好java6,java7,java8,java9(9可以使用高版本替代) 3,将插件项目作为module导入到pinpoint的plugins目录下 4,在plugins/...

    pinpoint安装部署、监控tomcat、weblogic、webSphere手册

    Pinpoint 是一款开源的应用性能管理(Application Performance Management, APM)工具,适用于基于 Java 的大规模分布式系统。它通过在应用程序启动时安装 agent 实现监控,无需对代码进行任何修改,能够最大限度地...

    第三步-pinpoint-搭建pinpoint.zip

    Pinpoint是一个针对大规模分布式系统的APM(Application Performance Monitoring)工具,它提供了丰富的服务调用链、性能指标和问题定位功能。通过Pinpoint,开发者可以清晰地了解系统内部的服务关系,监控服务的...

    《Pinpoint & Pinpoint C Agent(支持PHP) 简易安装文档》

    Pinpoint是一款开源的应用程序性能监控工具(APM),主要用于分布式系统的监控,尤其是针对微服务架构下的应用程序。它能够帮助开发者快速地识别和解决性能瓶颈问题。Pinpoint不仅提供了丰富的可视化界面,还可以...

    基于spring boot微服务学习pdf

    微服务设计.pdf;微服务架构.pptx;快速搭建Spring Boot.docx;spring-boot-reference-guide-zh.pdf;springboot.docx;leaning-pinpoint.pdf

    Pinpoint1.8.0安装.docx

    Pinpoint 是一款强大的分布式链路追踪系统,它基于谷歌的《Dapper大规模分布式系统的跟踪系统》论文设计,旨在提供微服务时代的性能监控解决方案。与zipkin和cat不同,Pinpoint 实现了字节码注入技术,实现了对代码...

    pinpoint-agent-2.0.1.tar.gz

    除了基本的监控功能,Pinpoint 还支持自定义插件,以便扩展到特定的应用框架和库,如Spring、MyBatis等。此外,它还可以与其他监控工具如Prometheus、ELK(Elasticsearch, Logstash, Kibana)集成,提供更丰富的监控...

    SpringCloud可视化链路追踪系统Zipkin部署过程

    SpringCloud 可视化链路追踪系统 Zipkin 部署过程 本文主要介绍了 SpringCloud 可视化链路追踪系统 Zipkin 部署过程,并提供了详细的示例代码,对大家的学习或者工作具有一定的参考学习价值。 什么是 Zipkin? ...

    pinpoint分布式系统APM工具

    Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它...

    pinpoint安装部署文档

    Pinpoint是一款开源的应用性能管理(APM)工具,主要用于监控和诊断分布式应用系统的性能问题。它通过采集应用系统中的调用链信息,帮助用户理解应用内部及应用间的交互情况,从而定位到性能瓶颈或异常所在。...

    pinpoint-agent-1.7.1.tar.gz

    7. **plugin**:这里存放Pinpoint的插件,用于支持对不同框架和库的监控,如Spring、MyBatis等。 8. **tools**:可能包含一些辅助工具,用于辅助安装或分析数据。 安装步骤大致如下: 1. 解压"pinpoint-agent-...

    开源社区的微服务生态体系.pptx

    7. **API Gateway**:如Zuul、Spring Cloud Gateway等,作为微服务架构的入口,提供路由、过滤等功能。 微服务架构对比传统的Java模块化方案(如OSGi、Jigsaw),其本质区别在于强调服务的独立部署和边界清晰,通过...

    java7源码-pinpoint:查明

    pinpoint-docker docker-compose pull docker-compose up -d 服务端容器 pinpoint-web pinpoint服务器ui界面 入口:ip:8079 pinpoint-collector pinpoint数据收集器 收集客户端数据 pinpoint-hbase pinpoint数据...

    pinpoint二次开发.pptx

    Pinpoint 是一个开源的 APM(Application Performance Management/应用性能管理)工具,基于字节码增强技术实现拦截请求链路。 Pinpoint 的主要功能特性包括 JVM 健康监控、内存监控、调用链路监控、CPU 监控等。 ...

    PinPoint使用教程 Pinpoint是用Java编写的大型分布式系统的APM

    Pinpoint是用Java编写的大型分布式系统的APM(Application Performance Management应用程序性能管理)工具,Pinpoint 通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互...

Global site tag (gtag.js) - Google Analytics