将 JMX Exporter 与 Wildfly 15 一起使用时出现 NoClassDefFoundError

Posted

技术标签:

【中文标题】将 JMX Exporter 与 Wildfly 15 一起使用时出现 NoClassDefFoundError【英文标题】:NoClassDefFoundError when using JMX Exporter with Wildfly 15 【发布时间】:2019-09-16 09:19:57 【问题描述】:

我们将 Wildfly 15 与 JMX Exporter 一起使用。启动 WildFly 服务器时,出现以下异常,并且我的想法已经不多了。该包存在于modules/system/layers/base/org/wildfly/common/main/wildfly-common-1.4.0.Final.jar下。

=========================================================================
  JBoss Bootstrap Environment
  JBOSS_HOME: /opt/jboss/wildfly-15.0.1.Final
  JAVA: /opt/java/jdk1.8.0_201/bin/java
  JAVA_OPTS:  -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:/opt/jboss/wildfly-15.0.1.Final/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.5.Final.jar -Xbootclasspath/p:/opt/jboss/wildfly-15.0.1.Final/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager-1.1.6.Final.jar -Xbootclasspath/p:/opt/jboss/wildfly-15.0.1.Final/modules/system/layers/base/org/slf4j/impl/main/slf4j-jboss-logmanager-1.0.3.GA.jar -javaagent:/opt/jboss/wildfly-15.0.1.Final/prometheus/jmx-prometheus.jar=9404:/opt/jboss/wildfly-15.0.1.Final/prometheus/config.yaml -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager -server -Xmx3G -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n 
=========================================================================
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Listening for transport dt_socket at address: 8787
java.lang.NoClassDefFoundError: org/wildfly/common/net/HostName
    at org.jboss.logmanager.ExtLogRecord.<init>(ExtLogRecord.java:87)
    at org.jboss.logmanager.Logger.log(Logger.java:796)
    at org.jboss.logging.JBossLogManagerLogger.doLogf(JBossLogManagerLogger.java:53)
    at org.jboss.logging.Logger.logf(Logger.java:2398)
    at org.jboss.msc.service.ServiceLogger_$logger.greeting(ServiceLogger_$logger.java:40)
    at org.jboss.msc.service.ServiceContainerImpl.<clinit>(ServiceContainerImpl.java:91)
    at org.jboss.msc.service.ServiceContainer$Factory.create(ServiceContainer.java:250)
    at org.jboss.as.server.BootstrapImpl$ShutdownHook.register(BootstrapImpl.java:231)
    at org.jboss.as.server.BootstrapImpl$ShutdownHook.access$100(BootstrapImpl.java:221)
    at org.jboss.as.server.BootstrapImpl.<init>(BootstrapImpl.java:72)
    at org.jboss.as.server.Bootstrap$Factory.newInstance(Bootstrap.java:278)
    at org.jboss.as.server.Main.main(Main.java:106)
    at org.jboss.modules.Module.run(Module.java:352)
    at org.jboss.modules.Module.run(Module.java:320)
    at org.jboss.modules.Main.main(Main.java:593)

【问题讨论】:

【参考方案1】:

我终于设法通过设置以下JAVA_OPTS 使其运行:

-Djava.util.logging.manager=org.jboss.logmanager.LogManager
-Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager
# We need to add this JAR explicitly to avoid a NoClassDefFoundError.
-Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/wildfly/common/main/wildfly-common-1.4.0.Final.jar
-Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.5.Final.jar
-javaagent:$JBOSS_HOME/prometheus/jmx-prometheus.jar=9404:$JBOSS_HOME/prometheus/config.yaml"

请记住根据您的设置调整版本。

【讨论】:

以上是关于将 JMX Exporter 与 Wildfly 15 一起使用时出现 NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Prometheus 与 Presto JMX 连接起来

容器化 Prometheus 无法抓取 JMX-exporter

使用 JMX-exporter-centos 7 配置 kafka

JMX_exporter 在 Prometheus 和 Grafana 中显示错误

集群监控JMX exporter+Prometheus+Grafana监控Hadoop集群

有没有办法配置要使用 jmx_exporter/prometheus 捕获的 kafka-connect jmx 指标?