2015-07-01 5 views
2

Я пытаюсь заставить JMX-мониторинг работать, чтобы контролировать тестовый экземпляр kafka.Мониторинг kafka с помощью JMX при запуске kafka в докере в boot2docker

У меня есть kafka (ches/kafka), работающий в докере через boot2docker, но я не могу правильно настроить мониторинг JMX. Я провел кучу поиска неисправностей, и я знаю, что экземпляр kafka работает правильно (работают потребители и производители). Проблема возникает, когда я пытаюсь использовать простые инструменты JMX (jconsole и jvisualvm), и оба они не могут подключиться (небезопасная ошибка подключения, соединение не выполнено).

Элементы конфигурации примечания: я подключаюсь к 192.168.59.103 (виртуальный ip ip найден при запуске «boot2docker ip»), а экземпляр ches/kafka docker/kafka использует порт 7203 в качестве JMX_PORT (подтвержденный в журналах запуска kafka) , Используя jconsole, я подключаюсь к 192.168.59.103:7203, и именно тогда возникают ошибки.

Любая помощь приветствуется.

+1

Пожалуйста, добавьте аргументы jvm, относящиеся к JMX, на вопрос. Вы установили -Djava.rmi.server.hostname для boot2docker IP? Вы отключили ssl? Вы установили оба параметра '-Dcom.sun.management.jmxremote.port' и' -Dcom.sun.management.jmxremote.rmi.port' [к тому же значению] (http://stackoverflow.com/a/21552812/241986) Вы связали и выставили порт в докере? Вы отправили порт в boot2docker? –

+0

Что касается kafka, вы можете использовать протокол kafka для отправки запросов непосредственно в узел внутри докера для чтения состояния очередей. В основном вы отправляете запрос на чтение метаданных и извлекаете необходимые данные после того, как разделы известны. –

ответ

3

Для полноты, вот решение, которое работает:

Я побежал Чес/Кафка 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 (.bat для окон)

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

Но мне нужно, чтобы добавить еще один элемент (благодаря одному из комментаторов за указание Тхи S вне):

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

Теперь, чтобы запустить чес/Докер изображение в boot2docker вам просто необходимо установить один из признанных переменных окружения (KAFKA_JMX_OPTS или KAKFA_OPTS), чтобы добавить дополнительный элемент, и он теперь работает.

Спасибо за помощь!

+0

Владелец изображения, о котором идет речь, - извините, что у вас возникли проблемы, заставив JVM не использовать случайные высокоскоростные порты для RMI с этой дополнительной настройкой свойств, которая действительно была ключевой недостающей частью для повышения удобства использования JMX. [Это должно быть исправлено] (https://github.com/ches/docker-kafka/commit/d4d974e8dcf9a2ba4b4dc2cd46389e63eaf95e08), и он находится в последнем теге 'ches/kafka: 0.8.2.1', сообщите мне, если это более гладкая работа с ! – ches

+0

Нет проблем - работа, которую вы сделали для настройки изображения, была отличной и спасла мне массу времени. Ваше решение, похоже, работает для меня. Благодаря! –

0

Нет причин, по которым порт докеры kafka будет привязан к тому же порту в VM-загрузчика, если вы его не указали.

Попробуйте запустить его с помощью -p 7203:7203, чтобы принудительно перенаправить порт 1: 1.