Search code examples
apache-kafkajmx

How to access JMX metrics using kafka.tools.JmxTool?


I am unable to get JMX metrics using bin/kafka-run-class.sh kafka.tools.JmxTool script. However, I am able to connect to process using Jconsole.

I have set following properties:

com.sun.management.jmxremote = true
com.sun.management.jmxremote.authenticate = false
com.sun.management.jmxremote.local.only = false
com.sun.management.jmxremote.port = 9145
com.sun.management.jmxremote.ssl = false

Exception:

? kafka_2.11-2.1.0/bin/kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://kafkatest-01:9154/jmxrmi    
Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://kafkatest-01:9154/jmxrmi.
Could not connect to JMX url: service:jmx:rmi:///jndi/rmi://kafkatest-01:9154/jmxrmi. Exception Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: kafkatest-01; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)].
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: kafkatest-01; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)]
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:369)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
    at kafka.tools.JmxTool$.main(JmxTool.scala:120)
    at kafka.tools.JmxTool.main(JmxTool.scala)
Caused by: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: kafkatest-01; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)]
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:136)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:205)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1955)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1922)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:287)
    ... 3 more

Solution

  • Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://kafkatest-01:9154/jmxrmi.
    

    but your port is 9145

    com.sun.management.jmxremote.port = 9145
    

    Want to know what properties are actually set on your running JVM (useful for checking stuff like this)

    prompt> jcmd $pid VM.system_properties