我正在尝试使用JMX和activeMQ进行监控到目前为止我一直在使用this和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>
我恢复了我为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.password中设置了密码:
admin activemq
NOW ACTIVEMQ现在并不是RUNNINT,但如果我设置它将会运行 AUTHENTICATE = FALSE并删除JMX.ACCESS和JMX.PASSWORD BIN / ACTIVEMQ文件中的配置,但我需要用户名和密码 出于安全原因 我发现这个post与我的问题完全相同。有任何想法吗?
答案 0 :(得分:2)
默认情况下启用远程监控的密码验证。要禁用它,请在启动JVM时设置以下系统属性: -Dcom.sun.management.jmxremote.authenticate = false就像你在第二次测试中所做的那样但你需要添加系统属性-Dcom.sun.management.jmxremote
尝试将这些jvm param添加到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"
的AMQ主机与其他计算机连接jconsole而不使用user / pwd。
如果您无法连接,请尝试这样:
<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提供错误消息。
答案 1 :(得分:1)
一些故障排除步骤:
在同一系统上启动jconsole或visualvm,并使用&#34; pid&#34;附加方法。浏览MBean并确认存在org.apache.activemq bean
运行netstat -na并确认端口1099(和44444)处于LISTEN状态
查看日志并确认您没有任何&#34; java.net.BindException:地址已在使用中。&#34;表示端口与已运行的Java进程冲突的消息。
编辑bin / env以配置JMX(这会禁用SSL,将端口设置为1099并禁用要求用户名和密码。
[regex]::Match($yourString, "Deployment task '\[.*?\]\s*([^']+)").Groups[1].Value