本文目录导读:

针对Java应用对接Pinpoint(一款APM监控工具,主要用于分布式系统追踪),核心流程包括环境准备、Agent部署、配置修改和验证,以下是标准对接案例:
环境准备
-
Pinpoint Collector & Web 已部署
- 确保Pinpoint服务端(Collector、Web、HBase)已运行
- 获取Collector地址(如:
168.1.100:9994)
-
Java应用环境
- JDK 1.8+(推荐JDK 11/17)
- 应用可正常启动(Spring Boot、Tomcat、Dubbo等)
下载并配置Agent
下载Pinpoint Agent
# 从Pinpoint官网或GitHub Release下载 wget https://github.com/pinpoint-apm/pinpoint-agent/releases/download/v2.5.2/pinpoint-agent-2.5.2.tar.gz tar -xzvf pinpoint-agent-2.5.2.tar.gz -C /opt/
配置Agent核心文件
编辑 pinpoint-agent-2.5.2/pinpoint.config:
# 必填:Collector地址(支持多地址) profiler.collector.ip=192.168.1.100 profiler.collector.tcp.port=9994 profiler.collector.stat.port=9995 profiler.collector.span.port=9996 # 推荐:应用名称(在Web端显示) profiler.application.name=my-java-service # 增强采样率(生产环境建议0.1~0.5) profiler.sampling.rate=1 # 开启异步追踪(如MQ、线程池) profiler.trace.thread.enable=true
Java应用启动参数接入
关键参数(JVM启动时添加):
-javaagent:/opt/pinpoint-agent-2.5.2/pinpoint-bootstrap.jar \ -Dpinpoint.agentId=my-service-01 \ # 唯一标识(推荐使用主机名+端口) -Dpinpoint.applicationName=my-java-service # 应用名(与config一致)
具体案例(不同部署方式):
Spring Boot JAR包启动
java -javaagent:/opt/pinpoint-agent/pinpoint-bootstrap.jar \
-Dpinpoint.agentId=user-service-01 \
-Dpinpoint.applicationName=user-service \
-jar user-service-1.0.0.jar
Tomcat 容器
修改 bin/catalina.sh 或 setenv.sh:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/pinpoint-agent/pinpoint-bootstrap.jar" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=tomcat-01" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=tomcat-webapp"
Docker 容器
# Dockerfile
FROM openjdk:11-jre
COPY pinpoint-agent-2.5.2/ /opt/pinpoint/
ENV JAVA_TOOL_OPTIONS="-javaagent:/opt/pinpoint/pinpoint-bootstrap.jar \
-Dpinpoint.agentId=${HOSTNAME} \
-Dpinpoint.applicationName=my-docker-app"
运行容器时:
docker run -e PINPOINT_AGENT_ID="my-app-$(hostname)" my-image
验证接入是否成功
检查步骤:
-
Agent日志:查看Agent目录下
logs/pinpoint.log- 成功标志:
Pinpoint agent connected to collector无报错
- 成功标志:
-
Pinpoint Web界面
- 访问
http://pinpoint-web:8080 - 左侧应出现应用名
my-java-service - 点击后能看到实时/历史调用链
- 访问
-
HBase数据
- 通过HBase Shell检查表:
list 'AgentInfo' scan 'AgentInfo', {LIMIT=>5}
- 通过HBase Shell检查表:
进阶配置(可选)
采样率优化(生产推荐)
# 每分钟采样10个事务 profiler.sampling.type=PER_MINUTE_BASED profiler.sampling.counting.per.minute=10
排除不需要追踪的请求
# 跳过健康检查、静态资源等 profiler.ignore.pattern=/actuator/health|/favicon.ico|/*.js|/*.css
自定义应用类型
# 如标记为Dubbo、Tomcat、Spring Boot profiler.application.server.type=1000 # 1000=Spring Boot
多Collector负载均衡
# 逗号分隔多Collector地址 profiler.collector.ip=192.168.1.100,192.168.1.101
常见问题排查
| 问题现象 | 解决方案 |
|---|---|
| Web看不到应用 | 检查Agent日志是否连接到Collector;检查网络防火墙(9994-9996端口) |
| 调用链缺失 | 确认所有微服务都接入相同的Pinpoint;检查HBase是否正常 |
| 性能下降5-10% | 降低采样率(sampling.rate=0.1);关闭不必须的插件 |
| Agent启动报ClassNotFound | 检查JDK版本;确保pinpoint-bootstrap.jar路径绝对正确 |
完整项目示例(Spring Boot + Maven)
- pom.xml(无需额外依赖,Agent运行时注入)
- 应用启动脚本:
#!/bin/bash APP_NAME=order-service JAVA_OPTS="-Xms1g -Xmx1g -javaagent:/opt/pinpoint/pinpoint-bootstrap.jar \ -Dpinpoint.agentId=${APP_NAME}-$(hostname) \ -Dpinpoint.applicationName=${APP_NAME}" java $JAVA_OPTS -jar ${APP_NAME}.jar
最佳实践:
- 统一管理Agent版本(建议所有微服务使用同一版本)
- Agent目录放在独立路径(如
/opt/pinpoint/) - 生产环境启用采样率控制,避免存储爆炸
- 使用
pinpoint-agent.conf外置配置(通过-Dpinpoint.config指定)