Skip to content

Commit 3aece64

Browse files
Merge pull request #5 from GuanceCloud/2-iss-download
增加 -h , 重命名
2 parents cea13e1 + 46db584 commit 3aece64

File tree

10 files changed

+53
-96
lines changed

10 files changed

+53
-96
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
target
2+
out
23
dependency-reduced-pom.xml
34
/.metadata/
45
/.recommenders/

README.md

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,4 @@
33
## 原理
44
Attach 根本原理是使用文件 Socket 通讯, 就是往一个文件中写入 `load instrument xxx.jar=params`, 再给 jvm 一个 SIGQUIT 信号, 之后 jvm 读取 socket 文件, 加载对应的 agent.
55

6-
## 如何在 jvm 运行时动态添加 agent
7-
1. 首先下载***指定***的 ddtrace , 并放到 /usr/local/ddtrace/
8-
```shell
9-
mkdir -p /usr/local/ddtrace
10-
cd /usr/local/ddtrace
11-
wget https://github.com/GuanceCloud/dd-trace-java/releases/download/v0.113.0-attach/dd-java-agent.jar
12-
13-
```
14-
15-
2. 启动 java 程序
16-
3. 启动 agent-attach-java.jar
17-
```shell
18-
# 命令的参数有三个 options download agent-jar 没有的话 都是默认值
19-
# options=""
20-
# download ="" 下个版本(指定版本下载)
21-
# agent-jar="/usr/local/ddtrace/dd-java-agent.jar"
22-
java -jar agent-attach-java.jar -options "dd.agent.port=9529"
23-
24-
```
6+
文档位置: [观测云docs-attach-agent](https://docs.guance.com/developers/ddtrace-attach/)

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@
3636
</descriptorRefs>
3737
<archive>
3838
<manifest>
39-
<mainClass>name.dhruba.javaagent.MyMainClass</mainClass>
39+
<mainClass>com.guance.javaagent.MyMainClass</mainClass>
4040
</manifest>
4141
<manifestEntries>
42-
<Premain-Class>name.dhruba.javaagent.MyJavaAgent</Premain-Class>
43-
<Agent-Class>name.dhruba.javaagent.MyJavaAgent</Agent-Class>
42+
<Premain-Class>com.guance.javaagent.MyJavaAgent</Premain-Class>
43+
<Agent-Class>com.guance.javaagent.MyJavaAgent</Agent-Class>
4444
<Can-Redefine-Classes>true</Can-Redefine-Classes>
4545
<Can-Retransform-Classes>true</Can-Retransform-Classes>
4646
</manifestEntries>

src/main/java/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
Manifest-Version: 1.0
2-
Main-Class: name.dhruba.javaagent.MyMainClass
2+
Main-Class: com.guance.javaagent.MyMainClass
33

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.guance.javaagent;
2+
3+
import java.lang.instrument.IllegalClassFormatException;
4+
import java.security.ProtectionDomain;
5+
6+
import org.objectweb.asm.Opcodes;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
public class ClassFileTransformer implements java.lang.instrument.ClassFileTransformer, Opcodes {
11+
12+
static final Logger logger = LoggerFactory.getLogger(ClassFileTransformer.class);
13+
14+
@Override
15+
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
16+
ProtectionDomain protectionDomain, byte[] classfileBuffer)
17+
throws IllegalClassFormatException {
18+
logger.info("class file transformer invoked for className: {}", className);
19+
20+
return classfileBuffer;
21+
}
22+
23+
}

src/main/java/name/dhruba/javaagent/Config.java renamed to src/main/java/com/guance/javaagent/Config.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package name.dhruba.javaagent;
1+
package com.guance.javaagent;
2+
3+
import java.io.PrintStream;
24

35
public class Config {
46
private String options;
@@ -44,9 +46,26 @@ static Config parse(String... args){
4446
case "-agent-jar":
4547
agentJar = arg;
4648
break;
49+
case "-h":
50+
case "-help":
51+
printOut();
52+
break;
53+
4754
}
4855
}
4956
}
5057
return new Config(option,downloadAddr,agentJar);
5158
}
59+
public static void printOut(){
60+
PrintStream out = System.out;
61+
out.println(" java -jar agent-attach-java.jar [-options <dd options>]");
62+
out.println(" [-agent-jar <agent filepath>]");
63+
out.println(" [-h]");
64+
out.println(" [-help]");
65+
out.println(" [-options]:");
66+
out.println(" this is dd-java-agnet.jar env, example:");
67+
out.println(" dd.agent.port=9529,dd.agent.host=localhost,dd.service=serviceName");
68+
out.println(" [-agent-jar]:");
69+
out.println(" default is: /usr/local/ddtrace/dd-java-agent.jar");
70+
}
5271
}

src/main/java/name/dhruba/javaagent/JavaAgentLoader.java renamed to src/main/java/com/guance/javaagent/JavaAgentLoader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package name.dhruba.javaagent;
1+
package com.guance.javaagent;
22

33
import java.util.List;
44
import com.sun.tools.attach.VirtualMachineDescriptor;
@@ -28,6 +28,7 @@ public static void loadAgent(String agentJar ,String options) {
2828
attach.loadAgent(jarFilePath, options);
2929
}
3030
attach.detach();
31+
logger.info(String.format("attach agent into [%s]",virtualMachineDescriptor.displayName()));
3132
}
3233
} catch (Exception e) {
3334
throw new RuntimeException(e);

src/main/java/name/dhruba/javaagent/MyJavaAgent.java renamed to src/main/java/com/guance/javaagent/MyJavaAgent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package name.dhruba.javaagent;
1+
package com.guance.javaagent;
22

33
import java.lang.instrument.Instrumentation;
44

src/main/java/name/dhruba/javaagent/MyMainClass.java renamed to src/main/java/com/guance/javaagent/MyMainClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package name.dhruba.javaagent;
1+
package com.guance.javaagent;
22

33
import java.util.Arrays;
44

src/main/java/name/dhruba/javaagent/ClassFileTransformer.java

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)