Pinpoint

关注
义项:应用性能管理工具
Pinpoint

Pinpoint 是一套面向大规模分布式系统的应用性能管理(APM)工具,由韩国 NAVER 公司开发并以开源方式发布,采用 Apache License 2.0 许可。它受 Google Dapper 论文启发,通过在跨服务调用中传递追踪标识,把分布式事务还原为可分析的调用链,并提供应用拓扑、实时监控与代码级调用栈等视图,主要用于定位性能瓶颈与故障点。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Pinpoint 是一个开源的 APM(应用性能管理)工具,面向以 Java 与 PHP 编写的大规模分布式系统。它的目标是把由众多组件互相调用、对外表现为黑盒的分布式事务还原成可视的调用链,从而分析系统的整体结构以及组件之间的连接关系。

在功能定位上,它常被归入调用链系统或分布式跟踪系统的范畴:前端发起一次请求后,后台可能经由多个服务逐级调用,若某一环节出错,仅凭各服务自身日志难以判断问题来源;此类工具的作用是记录并汇总整条调用路径上的性能数据,帮助维护人员快速定位[1]。

原理

Pinpoint 采用字节码增强实现接入。它的 Agent 在 JVM 类加载阶段对可追踪的类库进行插桩,自动接管发起远程调用处的标记信息读写,因此使用方不需要改动业务代码,只需在启动参数中挂载 Agent。官方仓库说明这种做法对资源的额外占用约为 3%。

其数据模型由 Span、Trace 与 TraceId 三个概念构成。Span 是一次远程过程调用的追踪基本单元,内部还可细分为 SpanEvent 以体现方法级细节;Trace 是同一事务下若干 Span 的集合,按 SpanId 与 ParentSpanId 组织成树形结构;TraceId 则把 TransactionId、SpanId 与 ParentSpanId 组合在一起,其中 TransactionId 需在整个服务器集群内全局唯一,根节点的 ParentSpanId 取 -1 表示它是事务起点[2]。

在部署形态上,Pinpoint 由 Agent、Collector 与 Web 三部分组成:Agent 作为探针与被监控的应用同机部署,Collector 接收上报的性能数据,Web 模块把入库的数据渲染为网页界面,链路数据通常写入 Apache HBase 存储[2]。控制台提供的典型视图包括展示组件互联与调用关系的 ServerMap、按时间分布请求耗时的散点图、可下钻到代码级的调用栈,以及展示 CPU、内存与垃圾回收、TPS 和 JVM 参数的 Inspector。

发展历程

项目于 2012 年 7 月启动开发。其动因来自 NAVER 内部系统:当时已有多种应用性能管理工具,但不足以有效处理 n 层架构系统中的问题,因此团队决定自行构建一套新的追踪平台[3]。

2015 年 1 月 9 日,Pinpoint 作为开源项目对外发布[3]。此后它被用于 NAVER 的主要服务中[4]。

在语言支持上,Pinpoint 早期面向 Java,之后扩展到 PHP,官方仓库中已列出 Java、PHP 与 Python 的支持情况。项目还提供了用于快速体验的 Docker 镜像仓库。

在版本与运行环境方面,官方给出的兼容表显示 Agent、Collector 与 Web 所需的 Java 版本随版本迭代逐步提高。随着版本演进,其存储层也出现按数据类型拆分的变化[5]。

许可方面,Pinpoint 以 Apache License 2.0 发布。

应用

Pinpoint 的典型用途是观测微服务与中间件之间的调用关系。官方说明其 Agent 支持的模块涵盖 Tomcat、Jetty、WebLogic、Undertow 等应用服务器,Spring 与 Spring Boot 等框架,Apache HttpClient、OkHttpClient、Netty 等 HTTP 客户端,以及 Thrift、Dubbo、gRPC 等远程调用框架。

在数据存储与消息组件方面,受支持的模块还包括 MySQL、Oracle、PostgreSQL、MariaDB 等关系型数据库,Redis、Memcached、MongoDB、Elasticsearch 等存储服务,以及 Kafka、RabbitMQ、ActiveMQ、RocketMQ 等消息队列,另有 MyBatis、HikariCP、Logback 等常用库。

使用方式上,接入方在应用启动时通过 javaagent 参数指定探针包路径,并用参数声明应用名与实例标识,随后即可在控制台看到对应的应用与调用数据[6]。项目的快速入门文档提供了配套的示例应用以便试用。

局限

作为基于字节码增强的方案,Pinpoint 的语言覆盖范围有限。官方资料明确其面向 Java 与 PHP 编写的大型分布式系统,这意味着采用其他语言栈的服务难以获得同等程度的代码级追踪。

字节码增强本身属于实现难度较高的技术路线。相关技术资料在比较手动埋点与自动埋点时指出,自动方式虽然免去业务改码,但在工具开发阶段需要投入更多资源,并对开发者识别类库跟踪点的能力要求更高[7]。

此外,它的运行依赖较重的后端组件,需要部署 Collector 与用于存储的 HBase 等设施,采集与展示链路的各个环节都需要独立运维;在语言支持面上,也有资料认为其追踪对象以 Java 应用为主[8]。

参见

  • 应用性能管理 —— Pinpoint 所属的工具类别,用于监测和优化应用运行状态。

  • 分布式链路追踪 —— Pinpoint 的核心能力方向,记录一次请求跨越多个服务的完整路径。

  • Google Dapper —— Pinpoint 的设计受到该大规模分布式系统跟踪技术的启发。

  • HBase —— Pinpoint 常用的链路数据存储系统。

  • 字节码增强 —— Pinpoint 实现无侵入接入所依赖的技术手段。

  • Zipkin —— 同属分布式追踪领域的开源系统,实现路线与 Pinpoint 有所不同。

词条评价
词条统计

浏览次数:3 次

阅读量:1 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:56:57Z

历史版本

本条目引用的词条
应用性能管理 分布式链路追踪 Google Dapper HBase 字节码增强 Zipkin