2

卡夫卡 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 配置,或者我不正确地指定了指标。

任何帮助表示赞赏。

4

2 回答 2

1

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

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

CORRECT obj 值(示例)如下:

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

请注意,“obj”值需要额外的引号。这似乎不寻常,并且与我看到的其他 JMX obj 值的正常模式(没有引号)不同。

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

于 2015-07-12T17:56:29.807 回答
0

正如我在 中发现的那样./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。它将每 60 秒结果打印到文件中LOG_FILE(您可以使用SECONDS_BETWEEN_RUNSenv 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_PORT最后但并非最不重要的一点是,在启动 Kafka 代理时使用 env var 将 JMX 端口设置为已知值./bin/kafka-server-start.sh,即

JMX_PORT=10101 ./bin/kafka-server-start.sh config/server.properties
于 2015-07-11T21:26:05.693 回答