WildFly 8.2.0 и Zabbix 3.0 и удаленный мониторинг JMX

Доброе утро всем. У меня возникла проблема при настройке Jboss wildfly 8.2.0 в Linux для удаленного мониторинга jmx для Zabbix 3.0 в конфигурации домена. Я использую профили "full" и "full-ha". Это строка, которую я включил:

(profile=full-ha)
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector use-management-endpoint="false"/>

(Profile=full)
<subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector use-management-endpoint="false"/>

Внутри host.xml я вставил голос для каждого виртуального сервера, конфигурацию для удаленного мониторинга jmx, вот, например:

<servers>
        <server name="server-one" group="main-server-group">
            <!-- Remote JPDA debugging for a specific server-->
            <jvm name="default">
              <jvm-options>
                <!--<option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/>-->
<option value="-Dcom.sun.management.jmxremote"/>
<option value="-Dcom.sun.management.jmxremote.port=10150"/>
<option value="-Dcom.sun.management.jmxremote.authenticate=false"/>
<option value="-Dcom.sun.management.jmxremote.ssl=false"/>
<!--<option value="-Dcom.sun.logmanager.Logmanager"/>-->
<!--org.jboss.logmanager.LogManager-->
              </jvm-options>
           </jvm>
           <!--      -->
        </server>

Для каждого сервера я ввел другой порт.

But when I try to start the domain, I receive the following error:
09:26:50,762 INFO  [org.jboss.as.process.Server:server-one.status] (ProcessController-threads - 3) JBAS012017: Starting process 'Server:server-one'
[Server:server-one] WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager
[Server:server-one] Exception in thread "main" java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
[Server:server-one]     at org.jboss.logmanager.Logger.getLogger(Logger.java:61)
[Server:server-one]     at org.jboss.as.server.DomainServerMain.main(DomainServerMain.java:86)
[Server:server-one]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[Server:server-one]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[Server:server-one]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[Server:server-one]     at java.lang.reflect.Method.invoke(Method.java:606)
[Server:server-one]     at org.jboss.modules.Module.run(Module.java:312)
[Server:server-one]     at org.jboss.modules.Main.main(Main.java:460)
09:26:51,682 INFO  [org.jboss.as.process.Server:server-one.status] (reaper for Server:server-one) JBAS012010: Process 'Server:server-one' finished with an exit status of 1
[Host Controller] 09:26:51,684 INFO  [org.jboss.as.host.controller] (ProcessControllerConnection-thread - 2) JBAS010926: Unregistering server server-one

Итак, я попытался поместить эту строку в domain.conf:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=$JBOSS_HOME/modules/org/jboss/logmanager/main/jboss-logmanager-1.5.2.Final.jar"

Но в этом случае я получаю следующие ошибки:

[Host Controller] 09:28:18,462 INFO  [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010922: Starting server server-one
09:28:18,512 INFO  [org.jboss.as.process.Server:server-one.status] (ProcessController-threads - 3) JBAS012017: Starting process 'Server:server-one'
[Server:server-one] Could not load Logmanager "/application/jboss/modules/org/jboss/logmanager/main/jboss-logmanager-1.5.2.Final.jar"
[Server:server-one] java.lang.ClassNotFoundException: /application/jboss/modules/org/jboss/logmanager/main/jboss-logmanager-1.5.2.Final.jar
[Server:server-one]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[Server:server-one]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[Server:server-one]     at java.security.AccessController.doPrivileged(Native Method)
[Server:server-one]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[Server:server-one]     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
[Server:server-one]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[Server:server-one]     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
[Server:server-one]     at java.util.logging.LogManager$1.run(LogManager.java:191)
[Server:server-one]     at java.security.AccessController.doPrivileged(Native Method)
[Server:server-one]     at java.util.logging.LogManager.<clinit>(LogManager.java:181)
[Server:server-one]     at java.util.logging.Logger.demandLogger(Logger.java:339)
[Server:server-one]     at java.util.logging.Logger.getLogger(Logger.java:393)
[Server:server-one]     at com.sun.jmx.remote.util.ClassLogger.<init>(ClassLogger.java:55)
[Server:server-one]     at sun.management.jmxremote.ConnectorBootstrap.<clinit>(ConnectorBootstrap.java:823)
[Server:server-one]     at sun.management.Agent.startAgent(Agent.java:260)
[Server:server-one]     at sun.management.Agent.startAgent(Agent.java:456)
[Server:server-one] WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager
[Server:server-one] Exception in thread "main" java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
[Server:server-one]     at org.jboss.logmanager.Logger.getLogger(Logger.java:61)
[Server:server-one]     at org.jboss.as.server.DomainServerMain.main(DomainServerMain.java:86)
[Server:server-one]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[Server:server-one]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[Server:server-one]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[Server:server-one]     at java.lang.reflect.Method.invoke(Method.java:606)
[Server:server-one]     at org.jboss.modules.Module.run(Module.java:312)
[Server:server-one]     at org.jboss.modules.Main.main(Main.java:460)
09:28:19,384 INFO  [org.jboss.as.process.Server:server-one.status] (reaper for Server:server-one) JBAS012010: Process 'Server:server-one' finished with an exit status of 1

Так что я могу сделать? Почему я получаю эти ошибки и как я могу решить и, наконец, запустить свой виртуальный сервер?

Спасибо всем за вашу помощь

Привет Красный


person Nothing But Old    schedule 14.04.2016    source источник
comment
Просто общий комментарий. Может не относиться к конкретному вопросу. По нескольким причинам мы не используем zabbix для мониторинга параметров jmx непосредственно из WildFly (или любого другого приложения на основе Java). Мы используем джолокию между ними. Jolokia конвертирует JMX в http и zabbix считывает данные http. Работает как часы.   -  person Arnab Biswas    schedule 10.06.2016


Ответы (1)


Буквально вчера занимался этим вопросом. Этот вопрос суммирует решение, но основная проблема заключается в следующем:

  • Командная строка должна переопределить java.util.logging.manager на org.jboss.logmanager.LogManager с помощью директивы "java.util.logging.manager=org.jboss.logmanager.LogManager" (значение — это имя класса, а не jar)
  • Для этого требуется, чтобы jar журнала jbss находился в пути к классам во время загрузки, поэтому командная строка должна вставить jar в путь к классам загрузки с помощью этой директивы: "-Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-1.5.2.Final-redhat-1.jar" (фактическая версия может отличаться в зависимости от используемой версии EAP).
  • Кроме того, вы должны добавить пакет ведения журнала jboss в список модулей времени загрузки. В скрипте запуска (модификатор conf) есть такая строка:

    если ["x$JBOSS_MODULES_SYSTEM_PKGS" = "x"]; затем JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman" фи

и его необходимо расширить, чтобы включить пакет ведения журнала jboss:

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
   JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman, org.jboss.logmanager"
fi

В этой последней части вы можете пропустить переменную env, поскольку она преобразуется в системное свойство командной строки, например:

-Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS

то есть вы можете просто установить это системное свойство напрямую.

Основной причиной, требующей этой настройки, являются настройки командной строки JMX, которые активируют java.util.logging очень рано в процессе загрузки, что можно наблюдать в вашем журнале здесь:

[Server:server-one]     at java.util.logging.Logger.demandLogger(Logger.java:339)
[Server:server-one]     at java.util.logging.Logger.getLogger(Logger.java:393)
[Server:server-one]     at com.sun.jmx.remote.util.ClassLogger.<init>(ClassLogger.java:55)
[Server:server-one]     at sun.management.jmxremote.ConnectorBootstrap.<clinit>(ConnectorBootstrap.java:823)
[Server:server-one]     at sun.management.Agent.startAgent(Agent.java:260)
[Server:server-one]     at sun.management.Agent.startAgent(Agent.java:456)

Таким образом, удаление параметров командной строки JMX также устраняет эту проблему, которую вы можете компенсировать, активировав службы JMX позже в процессе загрузки, поэтому у вас есть варианты.

person Nicholas    schedule 14.04.2016
comment
Привет, я пытался настроить параметры, которыми вы поделились, но теперь, даже с -Xbootclasspath, загружая модуль logmanager, я получаю следующую ошибку: Ошибка: не удалось найти или загрузить основной класс org.jboss.logmanager А затем выйти из оболочки. Я скопировал банку пути из командной строки, так что я уверен, что это правильно. - person Nothing But Old; 14.04.2016
comment
Можете ли вы вставить строки журнала ошибок? Кроме того, мы обнаружили, и я подумал, что это наша странная установка, но она может повлиять и на вас, файл configuration/logging.properties создается при запуске jboss, но в данном случае util. ведение журнала будет инициализировано до создания этого файла, поэтому он может отсутствовать или содержать недопустимые настройки (у нас был несуществующий каталог для server.log). - person Nicholas; 14.04.2016
comment
.... и сбой, вызванный недопустимым файлом logging.properties, фактически приводит к ошибке ClassNotFound, которая вводит в заблуждение, но трассировка стека ошибок дает понять, что происходит. - person Nicholas; 14.04.2016
comment
Привет, когда я запускаю domain.sh, он даже не запускается, он просто печатает строку параметров, ошибка не может быть найдена ... и затем выход. Единственные журналы, которые я нахожу, это host-controller и process-controller. - person Nothing But Old; 15.04.2016
comment
Последний сообщает следующую строку: 2016-04-14 14:36:36,417 INFO [org.jboss.as.process.Server:server-two.status] (reaper for Server:server-two) JBAS012010: Process 'Server :server-two' завершен со статусом выхода 130 2016-04-14 14:36:36,514 INFO [org.jboss.as.process.Host Controller.status] (жнец для хост-контроллера) JBAS012010: процесс «Хост-контроллер» завершено со статусом выхода 130 - person Nothing But Old; 15.04.2016
comment
У вашего xbootclasspath есть /p на конце, верно? - person Nicholas; 15.04.2016
comment
Это мой Xbootclasspath: -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-1.5.2.Final.jar - person Nothing But Old; 15.04.2016