Я пытаюсь запустить java-агент Newrelic в док-контейнере для мониторинга сервера HiveMetaStore, работающего в док-контейнере.
Чтобы запустить агент Newrelic во время запуска JVM, я должен передать JVM флаг-javaagent /path/to/newrelic.jar.
Я попытался:
hive --service metastore -javaagent /path/to/newrelic.jar
Это не удалось с «неопознанным параметром» в коде сервера HiveMetaStore, где он вообще не должен был оказаться.
Сценарий куста вызывает сценарий bin/ext/metastore.sh, который, в свою очередь, вызывает
exec $HADOOP jar $JAR $CLASS "$@"
Итак, я попытался исправить этот вызов:
exec $HADOOP -javaagent /path/to/newrelic.jar jar $JAR $CLASS "$@"
Это тоже не удалось.
Затем я более внимательно изучил сценарий Hadoop. Наконец, вызывается функция hadoop_java_exec в libexec//hadoop_functions.sh:
exec "${JAVA}" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
Итак, я исправил этот код:
exec "${JAVA}" "-javaagent /path/to/newrelic.jar" "-Dproc_${command}" ${HADOOP_OPTS} "${class}" "$@"
Это снова не удалось.
И последнее, но не менее важное: я понял, что можно передавать свойства Java через HADOOP _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, используя этот механизм.
Есть ли кто-нибудь, кто пробовал это раньше и может помочь с этим?
Мои извинения, если это глупый вопрос. Заранее спасибо, Уте
Unrecognized option: -javaagent:/opt/newrelic-agent-5.10.0/newrelic.jar
- person Ute Schürfeld   schedule 23.03.2020hadoop_add _param HADOOP_OPTS java.javaagent -javaagent:${NEWRELIC_AGENT_HOME}\/newrelic.jar
к вышеупомянутому файлу libexec/Hadoop_functions.sh. Таким образом, агент запустился :-) - person Ute Schürfeld   schedule 23.03.2020