Я пытаюсь заставить агент Newreli c java работать в контейнере docker для мониторинга сервера HiveMetaStore, работающего в контейнере docker.
Чтобы запустить агент Newreli c во время запуска JVM, я должен передать флаг Javaagent /path/to/newrelic.jar в JVM.
Я пытался:
hive --service metastore -javaagent /path/to/newrelic.jar
Это не удалось с «Нераспознанной опцией» в коде сервера HiveMetaStore, где он вообще не должен был заканчиваться.
Сценарий куста вызывает bin / ext / metastore. * Сценарий 1040 *, который, в свою очередь, вызывает
exec $HADOOP jar $JAR $CLASS "$@"
Поэтому я попытался пропатчить этот вызов:
exec $HADOOP -javaagent /path/to/newrelic.jar jar $JAR $CLASS "$@"
Это также не удалось.
Затем я посмотрел глубже на сценарий oop. Наконец, функция hadoop_java_exe c в libexec // hadoop_functions. sh вызывает:
exec "${JAVA}" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
Поэтому я пропатчил этот код:
exec "${JAVA}" "-javaagent /path/to/newrelic.jar" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
Это снова не удалось.
И последнее, но не менее важное: я понял, что можно передать java свойства через HAD OOP _OPTS (в libexec / hadoop_functions. sh):
function hadoop_finalize_hadoop_opts
{
hadoop_translate_cygwin_path HADOOP_LOG_DIR
hadoop_add_param HADOOP_OPTS hadoop.log.dir "-Dhadoop.log.dir=${HADOOP_LOG_DIR}"
hadoop_add_param HADOOP_OPTS hadoop.log.file "-Dhadoop.log.file=${HADOOP_LOGFILE}"
…
}
Но я не смог выяснить, как передать -javaagent: /path/to/newrelic.jar с помощью этого механизма.
Есть кто-нибудь, кто пробовал это раньше и может помочь с этим?
Приношу свои извинения, если это глупый вопрос. Спасибо заранее, Ute