Aubelix
Aubelix

Reputation: 43

How does Dynatrace OneAgent inject into Java

Classical Dynatrace monitoring worked by using an agent for monitoring java processes. You had to add the agent to the monitored VM and it worked.

Dynatrace OneAgent does this without agents. But how does it work. There was no agent added to the Java process. All that is needed is restarting the Java process. Tried it out with Liberty Server and could find two Dynatrace threads called ruxitautosensor and ruxitsubpathsender. But i do not understand how the injection works.

Upvotes: 4

Views: 7517

Answers (3)

Roc King
Roc King

Reputation: 491

Dynatrace OneAgent changed the "/etc/ld.so.preload" file in OS:

/$LIB/liboneagentproc.so

"/etc/ld.so.preload" and env variable "LD_PRELOAD" are used to preload specified lib when starting new process.

Upvotes: 5

mjoao
mjoao

Reputation: 197

It seems to me they are using standard JVM Tool Interface APIs.

-agentpath:<path-to-agent>=<options> to JVM.

Full documentation here: https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html

Example: -agentpath:C:/PROGRA~2/DYNATR~1/oneagent/agent/lib64/oneagentloader.dll=isjdwppresent=true,loglevelcon=none,tenant=00000000-0000-0000-0000-000000000000,tenanttoken=XXXXXXXXXXXXXXXX,server=https://10.10.10.10:8443/communication

Note: Some strings have been obfuscated.

Upvotes: 0

centic
centic

Reputation: 15882

On a very high level the installed OS-level agent runs some processes which use OS-level functionality to iterate processes on the machine and inject the agent via various different techniques into all the technologies that are supported for "deep monitoring", e.g. Java, .NET and a number of others.

More details are likely not published for obvious reasons as all this gives a clear advantage compared to the traditional approach for injecting agents manually via adjusting startup scripts, especially if you are deploying into a very large environment.

Upvotes: -3

Related Questions