如何使用jmxtrans监控kafka代理?

6xfqseft  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(435)

Kafka0.8.1.1(Kafka2.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配置,或者我不正确地指定了度量。
感谢您的帮助。

6tr1vspr

6tr1vspr1#

经过大量的实验,我现在已经解决了这个问题。为了完整起见,下面是我如何解决这个问题的。
似乎我指定的“obj”值不正确。
正确的obj值(示例)如下:

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

请注意,“obj”值需要附加引号。对于其他jmxobj值,这似乎不寻常,并且与我所看到的正常模式(没有引号)不同。
jmxtrans在将正确的(引用的)值放入obj字符串后提供了有效的输出。。。

jjjwad0x

jjjwad0x2#

我本可以发现的 ./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 环境变量),例如。

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

相关问题