kafka - 正确激活JMX的姿势

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka - 正确激活JMX的姿势相关的知识,希望对你有一定的参考价值。

参考技术A kafka启动时默认是不启用远程JMX的。根据官方文档需要通过设置JMX_PORT环境变量在启动kafka时激活JMX。
see Apache Kafka Monitoring

正确设置JMX_PORT的姿势(以 19797 端口为例,所有命令在 同一行 ):

以下方式是 不起 作用的(分别设置JMX_PORT和启动kafka),也就是说JMX_PORT的设置不会被传递到子shell中,原因请参看: linux - export not working in my shell script - Stack Overflow ,上面链接里提到的解决方案(使用. or source 来调用kafka-server-start.sh的方法)无法在kafka启动脚本里使用,因为一行kafka脚本 base_dir=\$(dirname $0) 会因为$0值的改变而报错,导致脚本运行失败。

kafka 和 JMX 导出器

【中文标题】kafka 和 JMX 导出器【英文标题】:kafka and JMX-exporter 【发布时间】:2020-02-24 05:16:13 【问题描述】:

我无法使用 JMX 导出器来公开 kafka 指标。你能看看我的步骤并在需要的地方纠正我吗? 我正在按照步骤here 启用带有 JMX 导出器的 kafka。

以下是我遵循的分步说明

#get kafka
wget kafka_2.11-2.0.0

# Download Prometheus JMX exporter:
sudo wget -P /opt/kafka/prometheus/ https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.0/jmx_prometheus_javaagent-0.3.0.jar
sudo wget -P /opt/kafka/prometheus/ https://raw.githubusercontent.com/prometheus/jmx_exporter/master/example_configs/kafka-0-8-2.yml

#Edit Prometheus JMX exporter config file; and append following lines 
echo  “- pattern : kafka.producer<type=producer-metrics, client-id=(.+)><>(.+):\w* name: kafka_producer_$2” >> /opt/kafka/prometheus/kafka-0-8-2.yml
echo  “— pattern : kafka.consumer<type=consumer-metrics, client-id=(.+)><>(.+):\w* name: kafka_consumer_$2” >> /opt/kafka/prometheus/kafka-0-8-2.yml
echo  “— pattern : kafka.consumer<type=consumer-fetch-manager-metrics, client-id=(.+)><>(.+):\w* name: kafka_consumer_$2” >> /opt/kafka/prometheus/kafka-0-8-2.yml


#start zookeeper in terminal 0
/opt/kafka/bin/zookeeper-server-start.sh config/zookeeper.properties


#start kafka broker in terminal 1
KAFKA_HEAP_OPTS=’”-Xmx1000M -Xms1000M”’ 
KAFKA_OPTS=”-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.3.0.jar=7071:/opt/kafka/prometheus/kafka-0–8–2.yml” 
JMX_PORT=7071
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties  


#start kafka consumer in terminal 2
KAFKA_OPTS=”-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.3.0.jar=7072:/opt/kafka/prometheus/kafka-0–8–2.yml” 
JMX_PORT=7072
/opt/kafka/bin/kafka-console-consumer.sh — bootstrap-server 0.0.0.0:9092 — topic test — from-beginning

#start kafka producer in terminal 3
KAFKA_OPTS=”-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.3.0.jar=7073:/opt/kafka/prometheus/kafka-0–8–2.yml” 
JMX_PORT=7073
/opt/kafka/bin/kafka-console-producer.sh — broker-list 0.0.0.0:9092 — topic test

经过上述步骤,zookeeper 和 kafka 运行良好。 我可以在生产者终端输入一条消息,并在消费者控制台上接收。但是,在 Prometheus 上看不到 kafka 指标。为了调试这个,我检查了端口 7071/2/3

netstat -tlnp | grep 7071
netstat -tlnp | grep 7072
netstat -tlnp | grep 7073

导致空白响应;这意味着没有服务正在使用上述端口。我觉得 JMX 导出器没有正确启用。

你能帮我解决以上问题吗?

【问题讨论】:

【参考方案1】:

从您的问题来看,您将变量放在自己的行上,而博客将它们放在同一行上......

例如这是启动Kafka服务器的方法

KAFKA_HEAP_OPTS='"-Xmx1000M -Xms1000M"' KAFKA_OPTS='-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.3.0.jar=7071:/opt/kafka/prometheus/kafka-0–8–2.yml' JMX_PORT=7081 /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

否则,您需要导出变量,以便子流程会像您 in your previous question 那样将它们拾取,这似乎可以很好地公开指标

export KAFKA_HEAP_OPTS='"-Xmx1000M -Xms1000M"'
export KAFKA_OPTS='-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.3.0.jar=7071:/opt/kafka/prometheus/kafka-0–8–2.yml'
export JMX_PORT=7081
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

注意:您链接的博客不使用JMX_PORT,但这些端口不能与导出器相同。

我还建议至少下载一个比 0.3 更新的版本 - https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/

并使用 Kafka 2.0 的配置 - https://github.com/prometheus/jmx_exporter/blob/master/example_configs/kafka-2_0_0.yml


旁注:netstat -tlnp | grep 707 会立即向您展示所有这些内容

【讨论】:

我使用 0.12.0 java 代理和 kafka 2.0.0 yaml 但现在我得到“错误:代理抛出的异常:java.rmi.server.ExportException:端口已在使用:7071;嵌套异常是:java.net.BindException:地址已在使用中(绑定失败)jdk.internal.agent.AgentConfigurationError:java.rmi.server.ExportException:端口已在使用:7071;嵌套异常是:java.net.BindException:地址已在使用(绑定失败)”错误,尽管“lsof -i:7071”和“netstat -tlnpu | grep 70”没有显示任何内容 尝试使用不同的端口?如果 lsof 没有显示任何内容,那么我不确定问题是什么 哦。将JMX_PORT 设置为与代理不匹配,或者只是将其删除... Prometheus 代理启动 Web 服务器。 JMX 不通过 HTTP Bingo 成功了,我现在可以看到正在监听 6071 的进程。 我正在结束这个问题,因为我在 curl -s :7071 | 上获得了所有代理指标grep -i 卡夫卡。谢谢 cricket 我将打开一个新的,用于将这些指标移植到 Prometheus【参考方案2】:

感谢cricket-007 的帮助。 为简单起见,我在此处列出了我遵循的步骤

wget -q -O /tmp/kafka.tgz https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
tar -xf /tmp/kafka.tgz --directory /opt/kafka --strip 1
rm -f /tmp/kafka.tgz

wget -q -O /tmp/kafka.tgz https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
mkdir /opt/kafka
tar -xf /tmp/kafka.tgz --directory /opt/kafka --strip 1
rm -f /tmp/kafka.tgz
sudo wget -P /opt/kafka/prometheus/ https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar
wget https://raw.githubusercontent.com/prometheus/jmx_exporter/master/example_configs/kafka-2_0_0.yml
cd kafka
export KAFKA_OPTS="-javaagent:/opt/kafka/prometheus/jmx_prometheus_javaagent-0.12.0.jar=7071:/opt/kafka/prometheus/kafka-2_0_0.yml"
export KAFKA_HEAP_OPTS="-Xmx1000M -Xms1000M"
mv ../kafka-2_0_0.yml prometheus/
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
netstat -tlnpu |grep 70

tcp6       0      0 :::7071                 :::*                    LISTEN      209455/java         
udp6       0      0 :::40705                :::*      

curl -s localhost_or_IP:7071 | grep -i kafka
long list of metrics will be dumped on stdout                          -       

【讨论】:

以上是关于kafka - 正确激活JMX的姿势的主要内容,如果未能解决你的问题,请参考以下文章

在 boot2docker 中的 docker 中运行 kafka 时使用 JMX 进行 kafka 监控

gensim中正确使用姿势

正确的执笔姿势

GitGIT使用rebase和merge的正确姿势

Git Flow 的正确使用姿势

FlinkFlink 清理过期 Checkpoint 目录的正确姿势