1. Pinpoint 3.0.X 全栈部署实战指南
最近在阿里云ECS上完成了一套Pinpoint 3.0.2的全栈部署,这个APM系统确实能有效解决Java应用的性能监控问题。相比2.x版本,3.0引入了Pinot作为指标存储引擎,架构上有了显著变化。下面分享我的完整部署过程,包含多个关键组件的配置细节和避坑指南。
特别说明:本文部署方案仅适用于测试环境,生产环境请根据实际需求进行安全加固和性能优化
2. 环境规划与准备
2.1 服务器规格
- 机型:阿里云ECS
- 配置:4核8G 100G SSD
- 系统:Alibaba Cloud Linux 3.2104 LTS 64位
- 网络:专有网络VPC,安全组按需开放端口
2.2 软件版本矩阵
| 组件 | 版本 | 用途 | 下载源 |
|---|---|---|---|
| HBase | 2.5.10 | 存储Trace数据 | Apache Archive |
| Apache Pinot | 1.1.0 | 存储Metric数据 | Apache Archive |
| JDK | 17.0.17 | 主运行环境 | Oracle官网 |
| JDK 8 | 8u471 | HBase专用 | Oracle官网 |
| Pinpoint全家桶 | 3.0.2 | Collector/Web/Agent | GitHub Release |
| Redis | 6.2.21 | ServerMap实时监控 | Docker官方镜像 |
| Kafka | 3.4.0 | 消息队列 | Apache Archive |
3. 基础组件部署
3.1 JDK环境配置
bash复制# 主JDK(17)配置
tar -xzvf jdk-17.0.17_linux-x64_bin.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk-17.0.17
export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
# HBase专用JDK(8)解压备用
tar -xzvf jdk-8u471-linux-x64.tar.gz -C /data/
3.2 HBase部署与配置
bash复制tar -xzvf hbase-2.5.10-hadoop3-bin.tar.gz -C /data/
cd /data/hbase-2.5.10-hadoop3/conf
关键配置文件调整:
hbase-env.sh
bash复制export JAVA_HOME=/data/jdk1.8.0_471
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"
export HBASE_MANAGES_ZK=true
hbase-site.xml
xml复制<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>./tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>file:///data/hbase-2.5.10-hadoop3/data/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/hbase-2.5.10-hadoop3/data/zookeeper</value>
</property>
</configuration>
启动脚本:
bash复制#!/bin/bash
cd /data/hbase-2.5.10-hadoop3/bin
./start-hbase.sh
验证HBase状态:
bash复制jps | grep HMaster # 应看到HMaster进程
curl http://localhost:16010/master-status # 检查Web UI
3.3 初始化Pinpoint表结构
bash复制wget https://github.com/pinpoint-apm/pinpoint/archive/refs/tags/v3.0.2.tar.gz
tar -xzvf v3.0.2.tar.gz
cd pinpoint-3.0.2/hbase/scripts
./hbase shell hbase-create.hbase
验证表创建:
bash复制hbase shell
list # 应看到16个Pinpoint相关表
4. 指标系统部署
4.1 Kafka集群配置
bash复制tar -xzvf kafka_2.13-3.4.0.tgz -C /data/
cd /data/kafka_2.13-3.4.0/config
zookeeper.properties
properties复制dataDir=/tmp/zookeeper
clientPort=12181 # 避免与HBase内置ZK冲突
maxClientCnxns=0
admin.enableServer=false
server.properties
properties复制broker.id=0
listeners=PLAINTEXT://:19092
advertised.listeners=PLAINTEXT://localhost:19092
log.dirs=/data/kafka_2.13-3.4.0/logs
zookeeper.connect=localhost:12181
启动脚本:
bash复制#!/bin/bash
nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties > zk.log 2>&1 &
nohup ./bin/kafka-server-start.sh config/server.properties > kafka.log 2>&1 &
创建必要Topic:
bash复制./bin/kafka-topics.sh --create --topic inspector-stat-agent-00 --bootstrap-server localhost:19092
./bin/kafka-topics.sh --create --topic inspector-stat-app --bootstrap-server localhost:19092
./bin/kafka-topics.sh --create --topic system-metric-data-type --bootstrap-server localhost:19092
./bin/kafka-topics.sh --create --topic system-metric-tag --bootstrap-server localhost:19092
./bin/kafka-topics.sh --create --topic system-metric-double --bootstrap-server localhost:19092
4.2 Pinot实时分析引擎
bash复制tar -xzvf apache-pinot-1.1.0-bin.tar.gz -C /data/
cd /data/apache-pinot-1.1.0
修改实时表配置:
json复制// conf/sample_realtime_table_config.json
{
"stream.kafka.broker.list": "localhost:19092",
"replicasPerPartition": "1"
}
启动命令:
bash复制nohup ./bin/pinot-admin.sh QuickStart -type batch > pinot.log 2>&1 &
通过Swagger API创建Schema和Table:
- 访问
http://<服务器IP>:9000/help - 分别调用
/schemas和/tables接口 - 使用GitHub上的7组Schema/Table配置:
5. Pinpoint核心组件部署
5.1 Redis快速部署
bash复制docker run -d --name pinpoint-redis -p 6379:6379 redis:6.2.21
5.2 Collector配置
创建配置文件 /data/collector-starter-application.yml:
yaml复制pinpoint:
zookeeper:
address: localhost
metric:
kafka:
bootstrap:
servers: localhost:19092
spring:
pinot-datasource:
pinot:
jdbc-url: jdbc:pinot://localhost:9000
启动命令:
bash复制nohup java -Dpinpoint.zookeeper.address=localhost \
-Dspring.config.additional-location=/data/collector-starter-application.yml \
-jar pinpoint-collector-starter-3.0.2-exec.jar > collector.log 2>&1 &
5.3 Web配置
创建配置文件 /data/web-starter-application.yml:
yaml复制pinpoint:
zookeeper:
address: localhost
spring:
pinot-datasource:
pinot:
jdbc-url: jdbc:pinot://localhost:9000
启动命令:
bash复制nohup java -Dpinpoint.zookeeper.address=localhost \
-Dspring.config.additional-location=/data/web-starter-application.yml \
-jar pinpoint-web-starter-3.0.2-exec.jar > web.log 2>&1 &
验证服务:
bash复制jps # 应看到pinpoint相关进程
curl http://localhost:8080/serverMap # 检查Web界面
6. Agent接入方案
6.1 传统部署方式
Java启动参数示例:
bash复制java -javaagent:/path/to/pinpoint-agent/pinpoint-bootstrap-3.0.2.jar \
-Dpinpoint.agentId=your_agent_id \
-Dpinpoint.applicationName=your_app_name \
-Dprofiler.transport.grpc.collector.ip=collector_host_ip \
-jar your_application.jar
6.2 Kubernetes部署方案
Deployment配置示例:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
spec:
template:
spec:
containers:
- env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: JAVA_OPTS
value: >-
-Dspring.profiles.active=prod
-javaagent:/opt/pinpoint-agent/pinpoint-bootstrap-3.0.2.jar
-Dpinpoint.agentId=$(POD_NAME)
-Dpinpoint.applicationName=order-service
-Dprofiler.transport.grpc.collector.ip=pinpoint-collector
volumeMounts:
- name: pinpoint-agent
mountPath: /opt/pinpoint-agent
volumes:
- name: pinpoint-agent
configMap:
name: pinpoint-agent-config
7. 关键问题排查指南
7.1 常见启动问题
-
HBase启动失败:
- 检查JDK 8环境变量
- 确认
hbase.unsafe.stream.capability.enforce=false - 查看logs/hbase-root-*.log日志
-
Pinot表创建失败:
- 确认Kafka Topic已预先创建
- 检查
stream.kafka.broker.list配置 - 验证Zookeeper端口不冲突
-
Web界面无数据:
- 检查Collector日志是否有GRPC连接
- 验证Agent配置的Collector IP正确
- 确认Pinot表中有数据写入
7.2 性能优化建议
-
采样率调整:
在agent配置中修改:properties复制profiler.sampling.rate=10 # 默认1,值越大采样率越低 -
JVM参数优化:
bash复制-XX:+UseG1GC -Xms2g -Xmx2g # Collector/Web建议配置 -
存储优化:
- HBase定期压缩:
hbase shell中执行major_compact - Pinot段优化:通过REST API触发段合并
- HBase定期压缩:
8. 架构演进思考
Pinpoint 3.0的架构变化带来了几个显著优势:
- 指标与链路分离:Pinot专精于时序指标分析,HBase处理链路数据
- 实时分析能力:Pinot的OLAP能力支持复杂查询
- 扩展性提升:各组件可独立扩展
但同时也带来新的挑战:
- 部署复杂度增加:新增Pinot组件依赖
- 版本兼容性要求:各组件版本需要严格匹配
- 资源消耗增加:相比2.x版本需要更多服务器资源
对于中小型项目,可以考虑以下简化方案:
- 使用Docker Compose整合基础组件
- 采用All-in-One部署模式
- 关闭非必要监控指标
这套监控系统在实际使用中展现了不错的Java应用监控能力,特别是在分布式链路追踪方面。不过要注意的是,默认配置下的性能开销确实不小,建议在生产环境使用前做好充分的性能测试和参数调优。