Kafka Monitoring:请求JMX的延迟

时间:2017-11-02 20:54:07

标签: apache-kafka jmx

我们希望监控Kafka并有两个特定要求:在CSV文件中使用无头工具和存储性能指标。遵循Gwen Shapira系列[1],我倾向于请求延迟 kafka.tools.JmxTool 开始。

设置:Kafka 0.11,公开JMX,无头指标收集工具

Q :JMX bean提供的指标如[2]所示,可能是每个Broker:“请求队列”,“请求本地”,“响应远程”,“响应队列”,“响应”发送”?

[1]幻灯片 https://www.slideshare.net/ConfluentInc/metrics-are-not-enough-monitoring-apache-kafka-and-streaming-applications/

[2]期望的Kafka指标

desired Kafka metrics

3 个答案:

答案 0 :(得分:1)

经过一番探索,以下是在3999端口打开Kafka JMX并收集请求指标的全套:

1在3999处打开Kafka JMX端口:

更新bin/kafka-run-class.sh

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0 -Djava.net.preferIPv4Stack=true"
fi

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} "
fi

更新bin/kafka-server-start.sh

if [ -z "$JMX_PORT" ]; then
  export JMX_PORT=3999
fi     

2个bash脚本,用于收集Kafka指标并将其发布到journalctl:

#!/bin/bash

PIPE=/tmp/kafka-monitoring-temp.out
mkfifo $PIPE

# Start logging to journal
systemd-cat -t 'kafka-monitoring' < $PIPE &
sleep_pid=$(
        sleep 9999d > $PIPE &  # keep pipe open
        echo $!                # but allow us to close it later...
)

arrayName=( "kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=Fetch"
            "kafka.network:type=RequestMetrics,name=LocalTimeMs,request=Fetch"
            "kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=Fetch"
            "kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=Fetch"
            "kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=Fetch"
            )

for name in "${arrayName[@]}"; do
        timeout 1s /ust/lib/kafka/bin/kafka-run-class.sh kafka.tools.JmxTool --object-name "${name}" --jmx-url service:jmx:rmi:///jndi/rmi://127.0.0.1:3999/jmxrmi --reporting-interval 1100 | tee $PIPE
done

kill $sleep_pid
rm $PIPE

答案 1 :(得分:0)

“Kafka:The Definitive Guide”中有一个关于监控的好章节(pdf可以从Confluent的网站免费获得)。本书显示了以下与请求相关的指标:

Request metrics

答案 2 :(得分:0)

这里是对它们的含义的一些补充说明。希望对您有所帮助。

请求队列:请求在请求队列中等待的时间

kafka.network:type=RequestChannel,name=RequestQueueSizeMs

本地请求:在领导者处处理请求

kafka.network:type=RequestMetrics,name=LocalTimeMs,request=产品

远程响应:等待关注者处理请求的时间

kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=产生

响应队列:请求在响应队列中等待的时间

kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=生产

回复发送:发送回复的时间

kafka.network:type=RequestMetrics,name=ResponseSendTimeMs