写点什么

基于 docker 部署的 Java 应用 jmx 无法远程访问的问题

用户头像
qihuajun
关注
发布于: 2020 年 06 月 16 日

我们有一个跑在 docker 上的 kafka 因为要获得其内部的监控指标需要开启远程的 jmx 访问,根据 Kafka 的 Monitoring 文档配置了JMX_PORT 并把指定的端口从防火墙放行但是从远程仍然无法从远程访问,然后添加参数 java.rmi.server.hostname=192.168.1.1 指定了 hostname 仍然不行,最后从网上的一篇文档搜到了 com.sun.management.jmxremote.rmi.port 这个 port 也要指定并且可以和 com.sun.management.jmxremote.port(即 JMX_PORT)指定同一个端口,配置完之后就可以访问了。


要点如下:

  1. java.rmi.server.hostname 要指定可以远程访问的 IP;

  2. 除了 com.sun.management.jmxremote.port 之外,com.sun.management.jmxremote.rmi.port 也要指定,否则系统会选一个随机端口,如果有防火墙的话这个随机端口很可能被防火墙挡住,其实不用 docker 部署也存在一样的问题。推荐两个端口配置成一样的。


最后完整的启动命令如下:

docker run --name jmxkafka -e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.1 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999" -v /data:/data -v /config/server.properties:/opt/kafka/config/server.properties --network=host -d  kafka  
复制代码


参考链接:

  1. Kafka 官方文档:https://kafka.apache.org/documentation/#monitoring

  2. 性能监控之 JMX 监控 docker 中的 java 应用 https://cloud.tencent.com/developer/article/1465675

  3. Why Java opens 3 ports when JMX is configured? https://stackoverflow.com/questions/20884353/why-Java-opens-3-ports-when-jmx-is-configured/21552812#21552812

  4. hosts 配置导致 jmx 无法连接远程 jvm https://www.jianshu.com/p/b7790c9eabff

  5. Monitoring and Management Using JMX Technology https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

发布于: 2020 年 06 月 16 日阅读数: 223
用户头像

qihuajun

关注

还未添加个人签名 2009.05.15 加入

还未添加个人简介

评论

发布
暂无评论
基于docker部署的Java应用jmx无法远程访问的问题