1. Pinpoint概述
Pinpoint是一个由韩国人编写的为大型分布式系统服务的链路跟踪平台,并提供大量链路跟踪数据分析汇总解决方案。自2012年7月开始开发,与2015年1月做为一个开源我的项目推出。(理解源码可+求求: 1791743380)
2. Pinpoint次要个性
- 分布式事务跟踪,跟踪跨分布式应用的音讯。
- 自动检测利用拓扑,帮忙你搞清楚利用的架构。
- 程度扩大以便反对大规模服务器集群。
- 提供代码级别的可见性以便轻松定位失败点和瓶颈。
- 应用字节码加强技术,增加新性能而无需批改代码。
3. Pinpoint劣势
- 无入侵:采纳字节码加强技术,新增性能无需批改代码。
- 性能高:对性能的影响十分小(资源使用量最小仅减少3%),异步数据传输,采纳UDP协定让出网络连接优先级。
4. Pinpoint架构简介
先看一下官网提供的架构图,如图:
[
](https://simple-spring-cloud-b...
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版本兼容:
PinpointVersionAgentCollectorWeb
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 VersionHBase 0.94.xHBase 0.98.xHBase 1.0.xHBase 1.2.xHBase 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
PinpointVersionHBase0.94.xHBase0.98.xHBase1.0.xHBase1.2.x
HBase2.0.x
- Agent – Collector所须要的版本兼容
Agent VersionCollector 1.0.xCollector 1.1.xCollector 1.5.xCollector 1.6.xCollector 1.7.xCollector 1.8.x
1.0.x yes yes yes yes yes yes
1.1.xnot 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.xno no no no yes yes
1.8.x no no no no no yes
Agent Version Collector 1.0.xCollector 1.1.xCollector 1.5.xCollector 1.6.xCollector 1.7.xCollector 1.8.x
- Flink所须要的版本兼容
Pinpoint Versionflink 1.3.Xflink 1.4.Xflink 1.5.Xflink 1.6.Xflink 1.7.XPinpoint 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 yes1.9.x
Pinpoint Version flink 1.3.Xflink 1.4.Xflink 1.5.Xflink 1.6.Xflink 1.7.XPinpoint 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
- 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.gzmv 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 ,后果如图:
](https://simple-spring-cloud-b...
接下来咱们先把Pinpoint的HBase的构建脚本导入,进入HBase的bin目录下执行如下语句:
./hbase shell /opt/hbase-create.hbase
数据导入胜利咱们在HBase的UI界面上能够看到,如图:
](https://simple-spring-cloud-b...
前面的目录是笔者用来寄存HBase初始化脚本的门路,各位读者可依据状况自行替换,至此,HBase环境筹备实现,接下来开始部署Collector和Web UI。
- Collector和Web UI部署
出于简略不便思考,不举荐初学者自行编译代码进行部署,能够间接应用官网提供的发行版本进行部署。
浏览器拜访链接:https://github.com/naver/pinpoint/releases/ ,间接下载以后最新Release版本即可,笔者当初看到的最新版本是1.8.4,如图,须要下载的内容有pinpoint-agent-1.8.4.tar.gz
、pinpoint-collector-1.8.4.war
和pinpoint-web-1.8.4.war
。
https://simple-spring-cloud-b...
首先须要筹备两个tomcat,笔者这里下载的tomcat8,解压两份后并重命名为apache-tomcat-pinpoint-collector
和apache-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 ,首次拜访如图:
](https://simple-spring-cloud-b...
- Agent启用
实战案例,本实战案例和上一篇实战案例保持一致,同样是4个服务,包含Zuul-Service、Eureka-Service、Consumer-Service和Provider-Service。
接入形式和上一篇的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.jarjava -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.jarjava -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.jarjava -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](http://192.168.44.129:8080/client/hello?name=spring) ,页面失常显示Hello, name is spring,查看Pinpoint的Web UI,如图:
](https://simple-spring-cloud-b...
图分明的显示了咱们以后零碎的拓扑构造,横线下面的数字代表了调用次数,左边局部,最下面显示的是胜利和失败的状况,两头局部显示的是响应工夫,上面显示的是加载所应用的工夫。
查看器(Inspector):这里已Zuul-Service为例,Timeline显示的是申请的时间段,Information显示的是节点的一些以后信息,蕴含Application Name、Agent Id、Agent版本、JVM信息、开始工夫等。
Heap信息的应用状况,如图:
](https://simple-spring-cloud-b...
零碎CPU、流动线程、响应工夫等信息如图:
](https://simple-spring-cloud-b...
更多Pinpoint的信息,读者能够通过官网Demo(http://125.209.240.10:10123/#/main )或者自行构建试验来查看后果,这里不再一一赘述。至此,Spring Cloud和Pinpoint的应用介绍也就实现了。更多无关Pinpoint的信息各位读者能够返回Github的官网进行查阅,地址为:https://github.com/naver/pinpoint 。
8. 小结
这里总结一下整个案例的启动程序:
- 启动HBase
- 启动collector
- 启动Web-UI
- 启动Agent(Eureka、provider、consumer、zuul
- 利用调用
- 拜访Web-UI查看统计信息
同Skywalking一样,以上启动程序供各位读者参考,请各位读者最好依照以上程序启动,因为不同的组件之前其实是有相互依赖关系的,如果随便更改启动程序可能会造成某些未知问题。至此,Spring Cloud和APM的相干操作就告一段落了。APM能够很好的帮咱们了解零碎行为,也是剖析零碎性能的工具,更是产生问题故障的时候利器,能够帮咱们疾速的定位查找问题。