Как контролировать брокера Kafka с помощью jmxtrans?
Кафка 0.8.1.1 (кафка_2.8.0-0.8.1.1.tgz)
Я использую jmxtrans для мониторинга JMX экземпляра Kafka (который работает в Docker). К сожалению, метрики кафки не возвращаются.
Я попробовал несколько вещей, чтобы отладить это и знаю, что kafka работает правильно (я могу успешно создавать / потреблять сообщения), пришел к выводу, что jmxtrans действительно возвращает метрики JMX (например, java.lang:type=Memory, attribute=HeapMemoryUsage возвращает правильный данные), так что общие возможности Kafka и JMX, кажется, работают. Кроме того, я могу получить доступ к метрикам, когда использую jconsole - метрики, похоже, записываются с данными во всех соответствующих полях.
Когда я пробую jmxtrans, используя следующую конфигурацию, к сожалению, я не получаю никакой информации (вообще никаких данных). Я считаю, что метрики должны быть получены на основе документации kafka ("kafka.server:type=BrokerTopicMetrics", attribute="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 или, возможно, неправильно указал метрику.
Любая помощь приветствуется.
2 ответа
После долгих экспериментов я решил вопрос. Для полноты ниже, как я решил проблему.
Похоже, что я неправильно указал значение obj.
ПРАВИЛЬНОЕ значение obj (пример) выглядит следующим образом:
"obj": "\"kafka.server\":type=\"BrokerTopicMetrics\",name \"AllTopicsLogBytesAppendedPerSec\"",
"attr": [ "Count" ]
Обратите внимание, что значение "obj" требует дополнительных кавычек. Это кажется необычным и отличается от обычного шаблона, который я видел (без кавычек) для других значений JMX obj.
JMXTRANS предоставил правильный вывод после помещения правильных (заключенных в кавычки) значений в строку obj...
Как я мог узнать в ./bin/jmxtrans.sh
по умолчанию файл stdout/log /dev/null
,
LOG_FILE=${LOG_FILE:-"/dev/null"}
Вот почему важно установить env var в то, что вы можете использовать, чтобы увидеть результат:
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
env var при запуске брокера Kafka с помощью ./bin/kafka-server-start.sh
т.е.
JMX_PORT=10101 ./bin/kafka-server-start.sh config/server.properties