Dynatrace OneAgent如何注入Java
How does Dynatrace OneAgent inject into Java
经典 Dynatrace 监控通过使用代理来监控 java 进程。您必须将代理添加到受监控的 VM 并且它起作用了。
Dynatrace OneAgent 无需代理即可完成此操作。但它是如何工作的。 Java 进程中没有添加代理。所需要做的就是重新启动 Java 进程。使用 Liberty Server 进行试用,可以找到两个名为 ruxitautosensor 和 ruxitsubpathsender 的 Dynatrace 线程。但是我不明白注入是如何工作的。
在非常高的级别上,安装的 OS 级代理运行一些进程,这些进程使用 OS 级功能在机器上迭代进程,并通过各种不同的技术将代理注入所有"deep monitoring" 支持的技术,例如Java、.NET 和其他一些。
由于显而易见的原因,可能不会发布更多详细信息,因为与通过调整启动脚本手动注入代理的传统方法相比,所有这些都具有明显的优势,尤其是在部署到非常大的环境中时。
在我看来他们使用的是标准 JVM 工具接口 API。
-agentpath:<path-to-agent>=<options>
到 JVM。
完整文档在这里:https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html
示例:
-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
注意:某些字符串已被混淆。
Dynatrace OneAgent 更改了 OS 中的“/etc/ld.so.preload”文件:
/$LIB/liboneagentproc.so
"/etc/ld.so.preload" 和 env 变量 "LD_PRELOAD" 用于在启动新进程时预加载指定的库。
经典 Dynatrace 监控通过使用代理来监控 java 进程。您必须将代理添加到受监控的 VM 并且它起作用了。
Dynatrace OneAgent 无需代理即可完成此操作。但它是如何工作的。 Java 进程中没有添加代理。所需要做的就是重新启动 Java 进程。使用 Liberty Server 进行试用,可以找到两个名为 ruxitautosensor 和 ruxitsubpathsender 的 Dynatrace 线程。但是我不明白注入是如何工作的。
在非常高的级别上,安装的 OS 级代理运行一些进程,这些进程使用 OS 级功能在机器上迭代进程,并通过各种不同的技术将代理注入所有"deep monitoring" 支持的技术,例如Java、.NET 和其他一些。
由于显而易见的原因,可能不会发布更多详细信息,因为与通过调整启动脚本手动注入代理的传统方法相比,所有这些都具有明显的优势,尤其是在部署到非常大的环境中时。
在我看来他们使用的是标准 JVM 工具接口 API。
-agentpath:<path-to-agent>=<options>
到 JVM。
完整文档在这里:https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html
示例:
-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
注意:某些字符串已被混淆。
Dynatrace OneAgent 更改了 OS 中的“/etc/ld.so.preload”文件:
/$LIB/liboneagentproc.so
"/etc/ld.so.preload" 和 env 变量 "LD_PRELOAD" 用于在启动新进程时预加载指定的库。