自动注入 DDTrace-Java Agent¶
本 Java 工具主要用于将 DDTrace-Java agent 注入到当前已经运行的 Java 进程中,无需手动配置和重启宿主 Java 进程。
- · · Issue ·
原理¶
Agent 注入的基本原理是通过 /proc/[Java-PID](或者 /tmp/)目录下的一个文件,注入
再给 JVM 一个发送一个 SIGQUIT 信号,然后 JVM 就会读取指定的 agent jar 包。
下载并编译¶
建议下载源码并编译:
使用 -h
查看:
agent-attach-java$ java -jar target/agent-attach-java-jar-with-dependencies.jar -h
java -jar agent-attach-java.jar [-options <dd options>]
[-agent-jar <agent filepath>]
[-pid <pid>]
[-displayName <service name/displayName>]
[-h]
[-help]
[-options]:
this is dd-java-agnet.jar env, example:
dd.agent.port=9529,dd.agent.host=localhost,dd.service=serviceName,...
[-agent-jar]:
default is: /usr/local/ddtrace/dd-java-agent.jar
[-pid]:
service PID String
[-displayName]:
service name
Note: -pid or -displayName must have a non empty !!!
example command line:
java -jar agent-attach-java.jar -options 'dd.service=test,dd.tag=v1'\
-displayName tmall.jar \
-agent-jar /usr/local/ddtrace/dd-java-agent.jar
参数说明:
-options
DDTrace 参数 :dd.agent.host=localhost,dd.agent.port=9529,dd.service=mytest ...
-agent-jar
agent 路径 默认为:/usr/local/ddtrace/dd-java-agent.jar
-pid
进程 PID , PID 和displayName
不可以同时为空,使用其中一个即可。-displayName
进程名称 比如-displayName tmall.jar
-h or -help
帮助
注意:由于从 JDK 9 开始就没有 tools.jar 文件。所以在项目目录下带上了 tools 文件。lib/tools.jar 是 JDK 1.8 版本的。
动态注入 dd-java-agent.jar¶
- 首先下载 dd-java-agent.jar,并放到 /usr/local/ddtrace/ 目录下。
mkdir -p /usr/local/ddtrace
cd /usr/local/ddtrace
wget https://static.guance.com/ddtrace/dd-java-agent.jar
Attention
必须使用扩展版 DDTrace,否则自动注入功能受限(各种 Trace 参数无法设置)。
-
启动 Java 应用(如果 Java 应用已启动,则忽略)
-
启动 agent-attach-java.jar 注入 dd-trace-java.jar