我正在使用 JMX 和 collectd 的 GenericJMX 插件来监控 Apache Kafka 集群。但是,我不确定某些 MBean 参数的含义。
具体来说,我有一个名为的指标kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
,显示一台机器每秒接收的消息数。这是我为这个 MBean 编写的配置文件:
<MBean "kafka-all-messages">
ObjectName "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec"
InstancePrefix "all"
<Value>
InstancePrefix "kafka-messages-in"
Type "counter"
Table false
Attribute "MeanRate"
</Value>
</MBean>
我不知道哪个Type
是正确的测量单位,例如gauge
,counter
或者另一个。我尝试阅读有关 collectd 的文档但我真的不明白应该在哪里应用每种测量类型。
有人可以给我解释一下吗?
答案1
这看起来像一个计量器,因为它是一个“Per”值——Kafka 已经将其规范化为特定的时间范围。如果名称只是“MessagesIn”,我会认为它是一个计数器——一个随着消息传入而不断增加的数字。
换句话说,如果 bean 返回某事物的“当前”状态,则它就是一个计量器。如果它返回某事物的“迄今为止的总数”,则它就是一个计数器。MessagesInPerSec 是一个“当前状态”值,因此也是一个计量器。
答案2
我终于让它工作了。JMX 中的几乎所有 Kafka 指标都有多个属性。例如,它kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
包含以下属性:
Count
EventType
FifteenMinuteRate
FiveMinuteRate
MeanRate
OneMinuteRate
RateUnit
选择 时Type
,您必须选择是否希望它按原样检索值或按 collectd 配置报告指标的间隔检索其差值。因此,gauge
是值,counter
是差值。
报告 Kafka 的 JMX 指标的最灵活方法是简单地使用属性Count
,即每当有新消息到达时都会递增的单调递增计数器,并将其报告为counter
。如果 collectd 配置为每 60 秒报告一次,则这将是每分钟收到的消息数。如果每 10 分钟报告一次,则该值将是每 10 分钟的消息数。
<MBean "kafka-all-messages">
ObjectName "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec"
InstancePrefix "all"
<Value>
InstancePrefix "kafka-messages-in"
Type "counter"
Table false
Attribute "Count"
</Value>
</MBean>