-
Pinpoint概述
Pinpoint是一个由韩国人编写的为大型分布式系统服务的链路跟踪平台,并提供大量链路跟踪数据分析汇总解决方案。自2012年7月开始开发,与2015年1月做为一个开源项目推出。 -
Pinpoint主要特性
分布式事务跟踪,跟踪跨分布式应用的消息。
自动检测应用拓扑,帮助你搞清楚应用的架构。
水平扩展以便支持大规模服务器集群。
提供代码级别的可见性以便轻松定位失败点和瓶颈。
使用字节码增强技术,添加新功能而无需修改代码。 -
Pinpoint优势
无入侵:采用字节码增强技术,新增功能无需修改代码。
性能高:对性能的影响非常小(资源使用量最小仅增加3%),异步数据传输,采用UDP协议让出网络连接优先级。 -
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界面上。
- 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 Collecto