一、思路
pinpoint agent 通过在启动命令中加入参数,指定agent jar包路径、agentID、appNAME来启动探针。
源码构建过程中,可以将git仓库中的内容一并打包至buildpack风格的 slug.tgz 包中,并基于此包在运行环境中运行起来。
既然如此,可以将pinpoint agent所需要的资源托管到代码仓库中,在应用启动的过程中,通过修改启动命令的方式运行。
二、代码仓库托管资源
获取 pinpoint agent 的压缩包(当前使用 v1.7.2 版本)解压到目标源码文件夹中。推送后的效果如下图:
- 创建一个目录 pinpoint 用来放置相关资源:
- 目录内容:
三、修改启动命令
源码构建应用可以通过代码仓库根目录下的 Procfile
来定义这个应用如何启动。这种启动方式可以指定系统中的某一个脚本来启动。在这个脚本中,可以定义是否启动,以及如何启动pinpoint agent。示例如下:
- Procfile 内容:
#指定启动脚本
web: bash -c /app/run.sh
- 启动脚本内容:
#!/bin/bash
#通过特定环境变量定义是否启动 pinpoint agent
if [[ $ENABLE_APM == "true" ]];then
AGENT_ID=${SERVICE_ID:0:10}
PINPOINT_AGETN_VERSION=1.7.2
PINPOINT_AGENT_PATH=/app/pinpoint
#将 pinpoint agent 启动参数加入到 $JAVA_OPTS 中
export JAVA_OPTS="$JAVA_OPTS -javaagent:${PINPOINT_AGENT_PATH}/pinpoint-bootstrap-${PINPOINT_AGETN_VERSION}-SNAPSHOT.jar -Dpinpoint.agentId=${AGENT_ID:-${SERVICE_ID:0:10}} -Dpinpoint.applicationName=${APP_NAME:-${SERVICE_NAME:-$HOSTNAME}}"
fi
PORT=${PORT:-5000}
sleep ${PAUSE:-0}
#最终启动命令
exec java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar
四、示例
最后使用一个 java-maven 的源码构建项目作为集成 pinpoint agent 的示例。源码地址
- 源码构建该项目,并依赖 pinpoint-collector、Mysql
- 添加开关环境变量
$ENABLE_APM
- 访问 pinpoint-web 验证