2015-07-10 76 views
1

Kafka 0.8.1.1(kafka_2.8.0-0.8.1.1.tgz)如何使用jmxtrans监控Kafka经纪人?

我正在使用jmxtrans对Kafka实例(在docker中运行)执行JMX监视。不幸的是,kafka指标没有被返回。

我已经尝试了一些事情来调试这个,并且知道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

大量实验后的JMX端口设置为已知值使用JMX_PORT的环境变量,我现在已经解决了这个问题。为了完整性,以下是我如何解决问题。

看来我错误地指定了“obj”值。

正确OBJ值(一个例子)如下:

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

注意 “OBJ” 值需要额外的报价。这看起来不寻常,与我看到的其他JMX obj值的正常模式(不含引号)不同。对于详细的答复感谢:

JMXTRANS把正确的(引用)值obj的字符串后,提供有效的输出...

+0

您使用的是什么卡夫卡版本?我使用的是从源代码构建的最新版本,JMX确实发生了一些变化。你说得对,使用''是个解决方案,但升级之后就不会。 –

+0

我将很快升级到下一个版本 - 您是否知道它何时被修复(即不需要引号)? –

+0

不完全是,但我正在使用从源代码构建的最新版本,所以它肯定会在下一个版本中使用。 –

0

正如我在./bin/jmxtrans.sh中发现的,默认情况下,stdout/log文件是/dev/null

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

这就是为什么到的环境变量设置为东西,你可以用它来查看输出是很重要的:

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:10101Count属性为testowo主题。它每60秒将结果打印到文件LOG_FILE(您可以使用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 
    } ] 
} 

而且最后但并非最不重要的,在开始使用./bin/kafka-server-start.sh卡夫卡代理时,即

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

亚切克。我应该提到,当我使用obj“:java.lang:type = Memory”,“attr”:[“HeapMemoryUsage”,“NonHeapMemoryUsage”]时,jmxtrans成功提供了输出。由于为上述obj/attr提供了JMX输出,因此必须正确设置JMX端口并提供有效的JMX数据。通过淘汰过程,我怀疑我尝试使用的kafka obj值是错误地指定的。我将继续尝试解决错误。谢谢你的帮助! –