Как Dynatrace OneAgent внедряет в Java

Классический мониторинг Dynatrace работал с использованием агента для мониторинга java-процессов. Вам нужно было добавить агента в отслеживаемую виртуальную машину, и это сработало.

Dynatrace OneAgent делает это без агентов. Но как это работает. Агент не был добавлен в процесс Java. Все, что нужно, это перезапустить процесс Java. Попробовал это с Liberty Server и смог найти два потока Dynatrace, которые называются ruxitautosensor и ruxitsubpathsender. Но я не понимаю, как работает инъекция.


person Aubelix    schedule 08.04.2017    source источник
comment
Вы можете подключиться к работающей JVM с помощью API подключения, они должны использовать этот API.   -  person Joel Pearson    schedule 18.09.2017


Ответы (3)


На очень высоком уровне установленный агент уровня ОС запускает некоторые процессы, которые используют функциональные возможности уровня ОС для итерации процессов на машине и внедрения агента с помощью различных методов во все технологии, которые поддерживаются для «глубокого мониторинга», например. Java, .NET и ряд других.

Более подробная информация, скорее всего, не будет опубликована по понятным причинам, поскольку все это дает явное преимущество по сравнению с традиционным подходом к внедрению агентов вручную через настройку сценариев запуска, особенно если вы развертываете в очень большой среде.

person centic    schedule 10.04.2017

Dynatrace OneAgent изменил файл «/etc/ld.so.preload» в ОС:

/$LIB/liboneagentproc.so

«/etc/ld.so.preload» и переменная env «LD_PRELOAD» используются для предварительной загрузки указанной библиотеки при запуске нового процесса.

person Roc King    schedule 18.10.2019

Мне кажется, что они используют стандартные API JVM Tool Interface.

-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

Примечание. Некоторые строки были обфусцированы.

person mjoao    schedule 29.10.2018