2015-07-10 2 views
1

Кафка 0.8.1.1 (kafka_2.8.0-0.8.1.1.tgz)Как контролировать брокера Kafka с помощью jmxtrans?

Я использую jmxtrans сделать JMX мониторинг экземпляра Кафки (который работает в докер). К сожалению, метрики кафки не возвращаются.

Я пробовал несколько вещей, чтобы отладить это и знаю, что kafka работает правильно (я могу создавать/использовать сообщения успешно) пришли к выводу, что jmxtrans возвращает метрики JMX (например, java.lang: type = Memory, attribute = HeapMemoryUsage возвращает правильные данные), так что, похоже, работает общая функция kafka и JMX. Кроме того, я могу получить доступ к метрикам, когда я использую jconsole - метрики, похоже, захватываются данными во всех соответствующих полях.

Когда я пытаюсь использовать jmxtrans, используя следующую конфигурацию, к сожалению, я не получаю никакой информации (вообще никаких данных). Я считаю, что показатели должны быть захвачены на основании документации Кафки («kafka.server: тип = BrokerTopicMetrics», атрибут = «MessagesInPerSec»)

Следующая конфигурация jmxtrans, что я использовал:

{ 
    "servers" : [ { 
     "port" : "9999", 
     "host" : "10.0.1.201", 
     "queries" : [ { 
      "outputWriters" : [ { 
       "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter", 
       "settings" : { 
       } 
      } ], 
      "obj" : "kafka.server:type=BrokerTopicMetrics", 
      "attr" : [ "MessagesInPerSec" ] 
     } ], 
     "numQueryThreads" : 2 
    } ] 
} 

Я не уверен, почему данные не возвращаются. Возможно, я настрою неверную конфигурацию jmxtrans или, возможно, неправильно указываю метрику.

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

ответ

1

После долгих экспериментов я теперь решили вопрос. Для полноты, ниже, как я решил проблему.

Похоже, что я неправильно указал значение «obj».

Правильное значение OBJ (пример) выглядит следующим образом:

"obj": "\"kafka.server\":type=\"BrokerTopicMetrics\",name \"AllTopicsLogBytesAppendedPerSec\"", 
"attr": [ "Count" ] 

Обратите внимание, что "OBJ" значение требует дополнительной кавычки. Это кажется необычным и отличается от обычного шаблона, который я видел (без кавычек) для других значений JMX obj.

JMXTRANS при условии, действительный выхода после ввода правильных (цитируемых) значений в строке OBJ ...

+0

Какая версия Kafka вы используете? Я использую последнюю версию, построенную из источников, и в JMX были некоторые изменения. Вы правы, что использование '' 's было решением, но оно не будет после того, как вы обновите его. –

+0

Я скоро перейду к следующей версии - знаете ли вы, когда она была исправлена ​​(т. Е. Не требует кавычек)? –

+0

Не совсем, но я работал с последней версией, построенной из источников, так что это наверняка будет в следующей версии. –

0

Как я мог бы узнать в ./bin/jmxtrans.sh, по умолчанию файл stdout/log равен /dev/null.

LOG_FILE=${LOG_FILE:-"/dev/null"} 

Вот почему так важно, чтобы установить ENV вар на то, что вы можете использовать, чтобы увидеть результат:

LOG_FILE=log.txt ./bin/jmxtrans.sh start kafka.json 

Я использую следующий kafka.json конфигурационный файл:

{ 
    "servers" : [ { 
    "port" : "10101", 
    "host" : "localhost", 
    "queries" : [ { 
     "outputWriters" : [ { 
     "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter", 
     "settings" : { 
     } 
     } ], 
     "obj" : "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=testowo", 
     "attr" : [ "Count" ] 
    } ], 
    "numQueryThreads" : 2 
    } ] 
} 

Когда вы запустите jmxtrans, он запросит у брокера JMX на localhost:10101 около Count атрибут для testowo темы. Он будет распечатать результат в файл LOG_FILE каждые 60 секунд (вы можете его изменить, используя SECONDS_BETWEEN_RUNS env var), например.

LOG_FILE=log.txt SECONDS_BETWEEN_RUNS=5 ./bin/jmxtrans.sh start kafka.json 

Вы можете использовать другие писатели jmxtrans поэтому выход не перемешаны, например,

{ 
    "servers" : [ { 
    "port" : "10101", 
    "host" : "localhost", 
    "queries" : [ { 
     "outputWriters" : [ { 
     "@class" : "com.googlecode.jmxtrans.model.output.KeyOutWriter", 
     "settings" : { 
      "outputFile" : "testowo-counts.txt", 
      "maxLogFileSize" : "10MB", 
      "maxLogBackupFiles" : 200, 
      "delimiter" : "\t", 
      "debug" : true 
     } 
     } ], 
     "obj" : "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=testowo", 
     "attr" : [ "Count" ] 
    } ], 
    "numQueryThreads" : 2 
    } ] 
} 

И последнее, но не в последнюю очередь, чтобы установить порт JMX к известному значению использование JMX_PORT окр вар при запуске брокера Кафку с помощью ./bin/kafka-server-start.sh, т.е.

JMX_PORT=10101 ./bin/kafka-server-start.sh config/server.properties 
+0

Яцека: спасибо за подробный ответ. Я должен был упомянуть, что jmxtrans успешно предоставил вывод, когда я использовал obj ": java.lang: type = Memory", "attr": ["HeapMemoryUsage", "NonHeapMemoryUsage"]. Поскольку выход JMX предусмотрен для вышеупомянутого obj/attr, порт JMX должен быть правильно настроен и доступны доступные данные JMX. По причине исключения, я подозреваю, что значение kafka obj, которое я пытаюсь использовать, указано неверно. Я буду продолжать экспериментировать, чтобы разрешить ошибку. Спасибо за вашу помощь! –

Смежные вопросы