【问题标题】:Kafka Monitoring: request latencies from JMXKafka 监控:来自 JMX 的请求延迟
【发布时间】:2017-11-02 20:54:07
【问题描述】:

我们想要监控 Kafka 并有两个特定要求:使用无头工具并将性能指标存储在 CSV 文件中。在 Gwen Shapira 系列 [1] 之后,我倾向于从 request latencieskafka.tools.JmxTool 开始。

设置:Kafka 0.11、暴露的 JMX、无头指标收集工具

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

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

[2] 所需的 Kafka 指标

【问题讨论】:

  • 您的意思是您想知道此类指标的确切 MBean 名称吗?

标签: apache-kafka jmx


【解决方案1】:

经过一番探索,这里是在 3999 端口打开 Kafka JMX 并收集 request 指标的全套:

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

【讨论】:

  • 这不是问题所要求的(但你实际上也回答正确),但实际的细节正是我想要的,非常感谢:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    在这里,它们是对它们含义的一些描述。希望对你有帮助。

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

    kafka.network:type=RequestChannel,name=RequestQueueSizeMs

    请求本地:在领导者处处理请求的时间

    kafka.network:type=RequestMetrics,name=LocalTimeMs,request=Produce

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

    kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=Produce

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

    kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=Produce

    响应发送:发送响应的时间

    kafka.network:type=RequestMetrics,name=ResponseSendTimeMs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 2011-07-21
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多