Pinpoint 链路追踪安装部署指南
一、Pinpoint 简介
Pinpoint 是一个开源的 APM(Application Performance Management,应用性能管理)工具。
它主要用于大型分布式系统中的链路追踪和性能分析,通过采集应用运行过程中的调用信息,帮助开发人员快速定位:
- 服务调用链路
- 请求响应耗时
- 服务依赖关系
- 慢接口问题
- 系统性能瓶颈
- 异常调用
Pinpoint 使用 Java 编写,设计思想来源于 Google Dapper 分布式追踪系统。
Pinpoint 最大特点:
无侵入式 Agent,不需要修改业务代码即可完成应用监控。
二、Pinpoint 特点
1. 无侵入式 Agent
Pinpoint 通过 Java Agent 技术实现应用监控。
只需要在 JVM 启动参数中增加:
-javaagent:/opt/pinpoint-agent/pinpoint-agent.jar
即可自动采集应用信息。
支持采集:
- HTTP 请求
- Controller 调用
- Service 方法调用
- SQL 执行
- Redis 操作
- MQ 消息
- RPC 调用
- 异常信息
2. 性能影响较低
Pinpoint 通过字节码增强技术实现链路采集。
官方设计目标:
- 对业务代码无侵入
- 额外资源消耗较低
- 性能影响约 3% 左右
实际生产环境可以通过:
- 调整采样比例
- 限制监控范围
- 增加 Collector 节点
降低资源消耗。
三、Pinpoint 架构组成
Pinpoint 主要由三个核心组件组成:
+----------------+
| Pinpoint Web |
| UI |
+-------+--------+
|
|
+-------+--------+
| Collector |
+-------+--------+
|
+-----------+-----------+
| |
| |
+-------------+ +-------------+
| Agent | | Agent |
| 服务A | | 服务B |
+-------------+ +-------------+
核心组件:
- Pinpoint Agent
- Pinpoint Collector
- Pinpoint Web UI
四、核心组件介绍
1. Pinpoint Agent
Agent 部署在业务应用服务器中。
主要负责:
- 采集应用调用信息
- 生成 Trace 数据
- 记录方法耗时
- 收集异常
- 上报 Collector
例如:
用户请求
|
v
订单服务
|
v
库存服务
|
v
数据库
Agent 会记录完整调用链。
2. Pinpoint Collector
Collector 是链路数据收集服务。
主要功能:
- 接收 Agent 上报数据
- 数据解析
- 数据处理
- 数据存储
所有应用节点的数据都会发送到 Collector。
生产环境通常部署:
- 多 Collector 节点
- 负载均衡
- 独立存储
3. Pinpoint Web UI
Web UI 是可视化管理平台。
可以查看:
服务拓扑
展示服务调用关系:
用户请求
|
v
Gateway
|
v
订单服务
|
v
MySQL
调用链分析
例如:
HTTP Request
订单服务 50ms
用户服务 30ms
MySQL 120ms
总耗时:200ms
可以快速定位:
- 哪个服务慢
- 哪个接口慢
- 哪个 SQL 慢
五、官方地址
Pinpoint Github:
https://github.com/pinpoint-apm/pinpoint
Pinpoint Docker:
https://github.com/pinpoint-apm/pinpoint-docker
六、Docker 安装部署
1. 环境准备
安装:
- Linux
- Docker
- Docker Compose
查看 Docker:
docker -v
查看 Docker Compose:
docker-compose -v
2. 下载源码
git clone https://github.com/pinpoint-apm/pinpoint-docker.git
进入目录:
cd pinpoint-docker
3. 启动 Pinpoint
拉取镜像:
docker-compose pull
启动:
docker-compose up -d
查看状态:
docker ps
正常情况下:
pinpoint-web
pinpoint-collector
pinpoint-hbase
pinpoint-flink
七、访问 Pinpoint Web
默认地址:
http://服务器IP:8080
进入页面后可以查看:
- 应用列表
- 服务拓扑
- 调用链
- 请求耗时
- JVM 状态
八、Java 应用接入 Agent
1. 准备 Agent
目录:
/opt/pinpoint-agent/
├── pinpoint-agent.jar
├── pinpoint-root.config
└── pinpoint.config
2. 修改配置
编辑:
pinpoint-root.config
配置 Collector:
profiler.collector.ip=192.168.1.100
配置应用名称:
profiler.application.name=order-service
注意:
不同服务必须使用不同名称。
例如:
user-service
order-service
payment-service
3. 启动 Java 服务
普通启动:
java -jar order-service.jar
增加 Agent:
java \
-javaagent:/opt/pinpoint-agent/pinpoint-agent.jar \
-jar order-service.jar
启动后:
应用服务
|
Pinpoint Agent
|
Collector
|
Web UI
即可看到链路数据。
九、Spring Boot 项目接入示例
例如:
服务名称:
order-service
启动:
java \
-javaagent:/opt/pinpoint-agent/pinpoint-agent.jar \
-Dpinpoint.applicationName=order-service \
-Dpinpoint.agentId=order-service-01 \
-jar order-service.jar
多个实例:
order-service-01
order-service-02
order-service-03
agentId 必须保证唯一。
十、微服务链路效果
例如订单请求:
用户请求
|
Gateway
|
+-------+-------+
| |
用户服务 订单服务
|
|
库存服务
|
|
MySQL
Pinpoint 可以查看:
- 请求经过哪些服务
- 服务耗时
- SQL 执行时间
- Redis 调用
- 异常位置
十一、常见问题
1. Agent 没有数据
检查 Collector 地址:
profiler.collector.ip=
确认地址正确。
检查 JVM 参数:
jps -lvm
确认存在:
-javaagent
2. 服务名称重复
错误:
profiler.application.name=test
多个服务使用相同名称会导致数据合并。
建议:
user-service
order-service
payment-service
3. Collector 连接失败
检查网络:
ping collector-ip
检查端口:
telnet collector-ip port
检查 Docker:
docker ps
十二、生产环境部署建议
Agent 管理
统一目录:
/opt/pinpoint-agent
所有 Java 服务加载同一套 Agent。
Collector 部署
生产环境建议:
多个 Collector
|
负载均衡
|
Agent
避免单点问题。
数据存储
Pinpoint 默认依赖:
- HBase
- Flink
需要根据业务量规划:
- 存储容量
- 数据保留周期
- 清理策略
十三、总结
Pinpoint 是一款非常适合 Java 分布式系统的链路追踪工具。
整体流程:
业务服务
|
Pinpoint Agent
|
Collector
|
存储
|
Web UI
优势:
- 无需修改业务代码
- 支持分布式链路追踪
- 可视化调用关系
- 快速定位性能问题
适用场景:
- Spring Boot
- Spring Cloud
- 微服务架构
- 大型 Java 分布式系统
通过 Docker 可以快速部署 Pinpoint,通过 Java Agent 即可完成业务系统接入。
评论区