如何使用jmxtrans监控Kafka经纪人?

时间:2015-07-10 15:06:31

标签: jmx apache-kafka jmxtrans

Kafka 0.8.1.1(kafka_2.8.0-0.8.1.1.tgz)

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

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

答案 0 :(得分:1)

经过大量的实验,我现在已经解决了这个问题。为了完整起见,以下是我解决问题的方法。

我似乎错误地指定了“obj”值。

CORRECT obj值(示例)如下:

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

请注意,“obj”值需要额外的引号。这看起来很不寻常,与我见过的其他JMX obj值的正常模式(没有引号)不同。

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

答案 1 :(得分:0)

正如我在Gmail::Client::AuthorizationError: Couldn't login to given Gmail account: email@gmail.com (Invalid credentials (Failure)) 中发现的那样,默认情况下,stdout / log文件为./bin/jmxtrans.sh

/dev/null

这就是为什么将env var设置为可用于查看输出的内容非常重要:

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

我正在使用以下LOG_FILE=log.txt ./bin/jmxtrans.sh start kafka.json 配置文件:

kafka.json

当您启动jmxtrans时,它会在{ "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 } ] } 上使用JMX查询代理,该localhost:10101属性为Count主题。 每隔60秒将结果打印到文件testowo(您可以使用LOG_FILE env var更改它),例如

SECONDS_BETWEEN_RUNS

您可能希望使用其他jmxtrans编写器,因此输出不会混合,例如。

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

最后但并非最不重要的是,在使用{ "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 } ] } 启动Kafka代理时,将JMX端口设置为已知值时使用JMX_PORT env var,即

./bin/kafka-server-start.sh