Как контролировать брокера 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
Другие вопросы по тегам