如何在java源码对接中集成pinpoint-agent

一、思路

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 验证

1 Like