Pinpoint–基础–02–架构设计
1、整体架构
1.1、Pinpoint Collector
- 数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
- 部署在 Web 容器上
1.2、Pinpoint Web
- 监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
- 部署在 Web 容器上
1.3、Pinpoint Agent
- 用于收集 Java应用端 的监控数据,无侵入式,只需要在启动命令中加入部分参数即可
- 附加到 Java应用端
1.4、HBase Storage
- 数据库,用于保存监控数据
- 采用HBase进行存储
2、流程
- 首先 通过 agent 收集调用 应用的数据
- 其次 将数据 发送到 collector,collector 处理和分析数据
- 最后 将数据 存储到 HBase 中,可以通过 Pinpoint Web UI 查看已经分析好的调用分析数据。
3、数据结构
3.1、Span
- RPC(远程过程调用)追踪的基本单元
- 代表了远程调用到达时处理的工作并且包含了追踪数据【直白点说,你可以把一个应用当作一个Span】,为了确保代码级别的可见性,Span有子节点,用SpanEvent【这个就相当于一次方法调用,故一个Span可能大部分都会有多个SpanEvent】表示,每个Span都包含一个TraceId,每个Span有一个SpanId和ParentSpanId,如果这个Span为请求的最原始的发起者,ParentSpanId为-1。
3.2、Trace
- Span的集合,由关联的RPC调用组成【这个也就是说在分布式系统中,每个应用代表一个Span,不同应用的一次全链路的请求表示一个Trace,即一个Trace会包含多个Span】
- 在同一个链路中的Spans共享同一个TransactionId
- Trace通过SpanIds和ParentSpanIds排序成分层树结构
3.3、TraceId
-
一系列key的集合,这些key包括
- TransactionId
- SpanId
- ParentSpanId
-
TransactionId
- 代表消息id,来自单个事务的分布式系统发送、接收的消息id
- 这个id在一次追踪过程中唯一
-
SpanId和ParentSpanId代表远程调用的父子关系
3.4、TransactionId(TxId)
一次事务(请求)中分布式系统发送/接收的消息id,在整个请求关联的所有应用服务中必须唯一
3.5、SpanId
处理接收RPC消息的应用id,在RPC消息到达某个节点时生成
3.6、ParentSpanId(pSpanId)
发起RPC调用的父span的 SpandId,如果某个节点是整个事务请求的发起者,那么它没有父span,对于这种情况,我们使用 -1表示这是整个事务请求的根span