jmx 似乎没有与 activeMQ 一起工作
jmx doesnt seem to be working with activeMQ
到目前为止,我一直在尝试将 JMX 与 activeMQ 结合使用进行监控,我一直在使用 this and this 作为参考,但到目前为止,我无法远程连接到 jmx,而且我也看不到在 activemq 日志中提到任何 jmx url。我想知道是否有另一种方法可以确保 jmx 正常工作?它应该在 activemq 日志中指示吗?
PS 我正在使用 jdk1.7 和 activeMQ 5.14.2。
提前致谢!
编辑
我在 activemq.xml 文件中设置了 useJmx="true":
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="primary" useJmx="true" dataDirectory="${activemq.data}">
我尝试了两个步骤:
第一个
我尝试将管理上下文从 createConnector="false" 更改为 :
<managementContext>
<managementContext createConnector="true" connectorPort="1099"/>
</managementContext>
第一次打开端口并且 ACTIVEMQ 运行良好并且 JMX URL 在日志中得到报告虽然我无法将它连接到它远程但我假设它的工作
第二个
我还原了对 managmentContext 所做的更改,并尝试设置:
ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/jmx.password -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/jmx.access"
在 bin/activemq 脚本中,我在 conf/jmx.access 文件中设置了一个用户名:
admin readwrite
并且还在conf/jmx中设置了密码。密码:
admin activemq
NOW ACTIVEMQ IS NOT RUNNINT AT ALL BUT IT WILL RUN IF I SET
AUTHENTICATE=FALSE AND DELETE JMX.ACCESS AND JMX.PASSWORD
CONFIGURATION IN BIN/ACTIVEMQ FILE BUT I NEED USER NAME AND PASSWORD
FOR SECURITY REASONS
I found this post which has the exact same issue as mine. any ideas?
一些故障排除步骤:
在同一系统上启动 jconsole 或 visualvm,并使用 "pid" 附加方法进行连接。浏览 MBean 并确认存在 org.apache.activemq 个 bean
运行 netstat -na 并确认端口 1099(和 44444)在 LISTEN
中
查看日志并确认您没有任何 "java.net.BindException: Address already in use.." 消息表明端口与已经 运行 Java 进程发生冲突。
编辑 bin/env 以配置 JMX(这将禁用对 SSL 的要求,将端口设置为 1099 并禁用对用户名和密码的要求。
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote "
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"`
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
默认启用远程监控的密码验证。要禁用它,请在启动 JVM 时设置以下系统 属性:
-Dcom.sun.management.jmxremote.authenticate=false 就像你在第二次测试中所做的那样,但你需要添加系统 属性 -Dcom.sun.management.jmxremote
尝试将这些 jvm 参数添加到 env 文件并更新主机 ip
-Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=X.X.X.X
更新
所以,为了继续,我认为您尝试的第一步是最好的,为了使其正常工作,这些步骤是:
还原所有 jmx env 文件更改,如下所示:
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 "
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
<broker useJmx="true" ...
<managementContext>
<managementContext createConnector="true" connectorPort="1099" />
</managementContext>
验证在 AMQ 日志中您有
INFO | JMX consoles can connect to
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi |
org.apache.activemq.broker.jmx.ManagementContext | JMX connector
注意:假设10.10.10.16
是AMQ主机的IP。
尝试使用 url "service:jmx:rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi"
不使用 user/pwd.[ 从另一台机器而非 AMQ 主机连接 jconsole =25=]
如果无法连接,请这样尝试:
<managementContext>
<managementContext createConnector="true" connectorPort="1099" connectorHost="10.10.10.16" />
</managementContext>
验证在 AMQ 日志中您有
INFO | JMX consoles can connect to
service:jmx:rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi |
org.apache.activemq.broker.jmx.ManagementContext | JMX connector
重试连接,第 4 步
这一步正常就可以连接jconsole了
- 如果你想添加安全和授权,使用这个:
<managementContext>
<managementContext createConnector="true" connectorPort="1099" connectorHost="10.10.10.16" >
<property xmlns="http://www.springframework.org/schema/beans" name="environment">
<map xmlns="http://www.springframework.org/schema/beans">
<entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.password.file"
value="${activemq.conf}/jmx.password"/>
<entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.access.file"
value="${activemq.conf}/jmx.access"/>
</map>
</property>
</managementContext>
</managementContext>
请尝试这些步骤,让我知道您在哪个步骤中连接失败,并提供来自 jconsole 的错误消息。
到目前为止,我一直在尝试将 JMX 与 activeMQ 结合使用进行监控,我一直在使用 this and this 作为参考,但到目前为止,我无法远程连接到 jmx,而且我也看不到在 activemq 日志中提到任何 jmx url。我想知道是否有另一种方法可以确保 jmx 正常工作?它应该在 activemq 日志中指示吗? PS 我正在使用 jdk1.7 和 activeMQ 5.14.2。
提前致谢!
编辑
我在 activemq.xml 文件中设置了 useJmx="true":
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="primary" useJmx="true" dataDirectory="${activemq.data}">
我尝试了两个步骤:
第一个
我尝试将管理上下文从 createConnector="false" 更改为 :
<managementContext>
<managementContext createConnector="true" connectorPort="1099"/>
</managementContext>
第一次打开端口并且 ACTIVEMQ 运行良好并且 JMX URL 在日志中得到报告虽然我无法将它连接到它远程但我假设它的工作
第二个
我还原了对 managmentContext 所做的更改,并尝试设置:
ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/jmx.password -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/jmx.access"
在 bin/activemq 脚本中,我在 conf/jmx.access 文件中设置了一个用户名:
admin readwrite
并且还在conf/jmx中设置了密码。密码:
admin activemq
NOW ACTIVEMQ IS NOT RUNNINT AT ALL BUT IT WILL RUN IF I SET AUTHENTICATE=FALSE AND DELETE JMX.ACCESS AND JMX.PASSWORD CONFIGURATION IN BIN/ACTIVEMQ FILE BUT I NEED USER NAME AND PASSWORD FOR SECURITY REASONS I found this post which has the exact same issue as mine. any ideas?
一些故障排除步骤:
在同一系统上启动 jconsole 或 visualvm,并使用 "pid" 附加方法进行连接。浏览 MBean 并确认存在 org.apache.activemq 个 bean
运行 netstat -na 并确认端口 1099(和 44444)在 LISTEN
中
查看日志并确认您没有任何 "java.net.BindException: Address already in use.." 消息表明端口与已经 运行 Java 进程发生冲突。
编辑 bin/env 以配置 JMX(这将禁用对 SSL 的要求,将端口设置为 1099 并禁用对用户名和密码的要求。
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 " ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false " ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote " # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"` # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
默认启用远程监控的密码验证。要禁用它,请在启动 JVM 时设置以下系统 属性: -Dcom.sun.management.jmxremote.authenticate=false 就像你在第二次测试中所做的那样,但你需要添加系统 属性 -Dcom.sun.management.jmxremote
尝试将这些 jvm 参数添加到 env 文件并更新主机 ip
-Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=X.X.X.X
更新
所以,为了继续,我认为您尝试的第一步是最好的,为了使其正常工作,这些步骤是:
还原所有 jmx env 文件更改,如下所示:
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 " # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password" # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access" # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false" ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
<broker useJmx="true" ...
<managementContext> <managementContext createConnector="true" connectorPort="1099" /> </managementContext>
验证在 AMQ 日志中您有
INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi | org.apache.activemq.broker.jmx.ManagementContext | JMX connector
注意:假设10.10.10.16
是AMQ主机的IP。
尝试使用 url
"service:jmx:rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi"
不使用 user/pwd.[ 从另一台机器而非 AMQ 主机连接 jconsole =25=]如果无法连接,请这样尝试:
<managementContext> <managementContext createConnector="true" connectorPort="1099" connectorHost="10.10.10.16" /> </managementContext>
验证在 AMQ 日志中您有
INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi | org.apache.activemq.broker.jmx.ManagementContext | JMX connector
重试连接,第 4 步
这一步正常就可以连接jconsole了
- 如果你想添加安全和授权,使用这个:
<managementContext> <managementContext createConnector="true" connectorPort="1099" connectorHost="10.10.10.16" > <property xmlns="http://www.springframework.org/schema/beans" name="environment"> <map xmlns="http://www.springframework.org/schema/beans"> <entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.password.file" value="${activemq.conf}/jmx.password"/> <entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.access.file" value="${activemq.conf}/jmx.access"/> </map> </property> </managementContext> </managementContext>
请尝试这些步骤,让我知道您在哪个步骤中连接失败,并提供来自 jconsole 的错误消息。