在 boot2docker 中的 docker 中运行 kafka 时使用 JMX 进行 kafka 监控

Posted

技术标签:

【中文标题】在 boot2docker 中的 docker 中运行 kafka 时使用 JMX 进行 kafka 监控【英文标题】:kafka monitoring using JMX when running kafka in docker in boot2docker 【发布时间】:2015-09-18 23:51:45 【问题描述】:

我正在尝试让 JMX 监控工作以监控测试 kafka 实例。

我通过 boot2docker 在 docker 中运行了 kafka (ches/kafka),但我无法正确配置 JMX 监控。我做了一堆故障排除,我知道 kafka 实例运行正常(消费者和生产者工作)。当我尝试简单的 JMX 工具(jconsole 和 jvisualvm)并且两者都无法连接(不安全的连接错误,连接失败)时,就会出现问题。

配置项注意事项:我连接到192.168.59.103(运行'boot2docker ip'时发现虚拟机ip),ches/kafka docker/kafka实例使用7203端口作为JMX_PORT(在kafka启动日志中确认)。使用 jconsole,我连接到 192.168.59.103:7203,这就是错误发生的时候。

感谢任何帮助。

【问题讨论】:

请在问题中添加特定于 JMX 的 jvm 参数。您是否将 -Djava.rmi.server.hostname 设置为 boot2docker IP?您是否禁用了ssl?您是否同时设置了-Dcom.sun.management.jmxremote.port-Dcom.sun.management.jmxremote.rmi.port to same value 您是否在docker 中绑定并公开了该端口?你在 boot2docker 中转发了端口吗? 至于kafka,可以使用kafka协议直接发送请求到docker内部的节点,读取队列的状态。基本上,您发送一个读取元数据的请求,并在知道分区后获取所需的数据。 【参考方案1】:

为了完整起见,以下是可行的解决方案:

我按如下方式运行 ches/kafka docker 映像 - 请注意,JMX_PORT (7203) 现在已正确发布:

$ docker run --hostname localhost --name kafka --publish 9092:9092 --publish 7203:7203 --env EXPOSED_HOST=192.168.59.103 --env ZOOKEEPER_IP=192.168.59.103 ches/kafka

另外,kafka-run-class.sh(windows的.bat)中设置了如下环境

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

但我需要添加一项额外的项目(感谢一位评论者指出这一点):

-Dcom.sun.management.jmxremote.rmi.port=7203

现在,要在 boot2docker 中运行 ches/docker 映像,您只需设置一个可识别的环境变量(KAFKA_JMX_OPTS 或 KAKFA_OPTS)来添加附加项,它现在可以工作了。

感谢您的帮助!

【讨论】:

此处有问题的图像的所有者 — 抱歉,您遇到了麻烦,通过该附加属性设置强制 JVM 不使用 RMI 的随机高端口确实是使 JMX 更可用的关键缺失部分. This should be fixed 它在最新的标签 ches/kafka:0.8.2.1 中,如果使用起来更流畅,请告诉我! 没问题——你为设置图像所做的工作很棒,为我节省了大量时间。您的解决方案似乎对我有用。谢谢!【参考方案2】:

除非您指定它,否则 kafka docker 端口没有理由绑定到 boot2docker 虚拟机中的同一端口。

尝试使用-p 7203:7203 运行它以强制端口的 1:1 转发。

【讨论】:

以上是关于在 boot2docker 中的 docker 中运行 kafka 时使用 JMX 进行 kafka 监控的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kitematic Boot2docker linux 上安装东西?

如何在 OSX(boot2docker)上获得与 docker 容器的 ssh 连接

如何在 Windows 操作系统中运行 Docker 客户端

windows下docker toolbox无法下载boot2docker.iso

boot2docker / docker-machine / Docker Toolbox 上的 Docker 守护进程配置文件

通过 boot2docker 将卷挂载到 postgres 容器